## Контрольная работа №1 по БД ### __1. Опишите информацию, которая находится в столбце `ROWID` и форму её хранения__ `ROWID` - это псевдостолбец, содержащий физический (следовательно, уникальный) адрес (двоичные данные) строки в базе данных. Используются следующие типы данных: - `UROWID` (universal `ROWID`) для индексно-организованных таблиц и внешних таблиц - `ROWID` для прочих таблиц обычных строка длины 18, в индексно-организованных - 13, в внешних - 23 Фактически `ROWID` представляется строкой. https://docs.oracle.com/cd/A58617_01/server.804/a58241/ch5.htm ### __2. Перечислите интервальные типы данных Oracle и перечислите их свойства__ - `INTERVAL YEAR [(year_precision)] TO MONTH` - представляет период времени с точностью до лет и месяцев (по умолчаию year_precision = 2) - `INTERVAL [DAY [(days_precision)]] [TO HOUR | MINUTE | SECOND [(seconds_precision)]]` - представляет период времени с точностью до дней, часов, минут и секунд (по умолчанию y_p = 2, s_p = 6) http://www.java2s.com/Book/Oracle/Data-Types/INTERVAL_YEAR_TO_MONTH.htm http://www.java2s.com/Book/Oracle/Data-Types/INTERVAL_DAY_TO_SECOND.htm ### __3. Перечислите типы синонимов в Oracle и опишите особенности__ Синоним - альтернативное имя для объектов БД(таблицы, представления, последовательности и т.д.) Типы синонимов: * `PUBLIC` * Доступны всем пользователям, имеющим соответствующие привелегии на базовый объект * `PRIVATE` * Доступен в рамках своей схемы * Имя такого синонима должно быть уникальным в своей схеме https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm ### __4. Каковы отличия в функционировании и использовании B-tree и Bitmap индексов?__ B-tree: - В основе структуры индекса используется сбалансированное дерево поиска - Блоки верхнего уровня - branch (ветка), нижнего - leaf (лист) - Листовые блоки содержат 2 элемента - индексированное значение столбца и идентификатор ROWID для строки содержащей значение столбца - Сканирование индекса даёт быструю возможность обратиться к нужной строке через ROWID - лучше использовать для множества с хорошим распределением и большимм количеством уникальных значений Bitmap: - Используют битовые карты для указания значения индексированного столбца (состоят из битового потока 0 и 1 для каждого столбца индекса) - Хорошо использовать для таблиц с низким числом уникальных значений и при этом большого размера таблицы Использование: ![](https://i.imgur.com/o3DJ3tM.png) ![](https://i.imgur.com/p1CInuB.png) https://docs.oracle.com/cd/E11882_01/server.112/e25554/indexes.htm#DWHSG006 https://oracle-dba.ru/docs/architecture/indexes/ https://habr.com/ru/post/102785/ https://docs.oracle.com/cd/E11882_01/server.112/e25554/indexes.htm#DWHSG8131 ### __5. Каковы отличия в хранении стандартных и кластерных таблиц в Oracle?__ *Кластерами называют две или более таблиц, которые физически хранятся вместе*, чтобы использовать преимущества совпадающих между таблицами столбцов. Если две таблицы имеют идентичный столбец и вам, к примеру, часто приходится соединять таблицы по нему, то становится выгодно хранить значения общих столбцов в одном и том же блоке данных. Целью такой организации является сокращение объема ввода-вывода с увеличением скорости доступа при соединении связанных таблиц. Однако кластеры понижают производительность операторов INSERT, поскольку для хранения данных нескольких таблиц требуется больше блоков. Обычные таблицы Oracle, в которых данные хранятся без какого-то определенного порядка. https://oracle-patches.com/oracle/begin/3008-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D1%8B-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86 https://oracle-patches.com/oracle/prof/3002-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B-oracle#view ### __6. Каковы отличия в хранении стандартных и индексно-организованных таблиц в Oracle?__ Индекс-таблицы (index-organized table — IOT) в базе данных Oracle Database представляют собой некоторый гибрид, потому что им присущи свойства как индексов, так и таблиц. Таблицы IOT — это таблицы, в которых данные хранятся в виде индексной структуры B-дерева (в отсортированном по первичному ключу виде), но они отличаются от традиционных, или организованных в куче, таблиц тем, что последние не упорядочивают данные. https://oracle-patches.com/oracle/prof/3004-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B-oracle ### __7. Какое максимальное число можно хранить в столбце таблицы с типом данных `NUMBER(5, -2)`?__ 9999900 __8. Какому виду ограничений в представлениях словаря данных соответствует обозначение `V` и как действует данный вид ограничений?__ Обозначение `V` соответствует ограничениям `CHECK`, накладываемым на представления. Это ограничение не позволяет работать со строками, которые не относятся к представлению. https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022 ### __9. Перечислите источники данных для представлений словаря данных типа `V$`__ - конфигурация сервера баз данных - дисковые структуры, используемые сервером (например, `V$FILESTAT`) - оперативная память - специальные файлы управления ORACLE ### __10. Каково назначение опции `CACHE` при создании последовательности и каково значение этой опции по умолчанию?__ `CACHE n` позволяет заранее сгенерировать `n` значений для ускоренного получения, при этом сгенерированные значения теряются при отключении сервера баз данных. Значение по умолчанию - 20. ### __11. Опишите задачи, которые решает TopN анализ__ Запросы Top-N полезны в сценариях, где требуется отображать только n самых верхних или n самых нижних записей из таблицы на основе условия. Этот результирующий набор можно использовать для дальнейшего анализа. http://dwhlaureate.blogspot.com/2012/08/how-to-do-top-n-analysis-in-oracle.html ### __12. Перечислите условия, при которых представление допускает вставку данных в таблицу__ Все поля таблицы-источника, не присутствующие в представлении, имеют значения по умолчанию. Если представление использует несколько таблиц, то вставка должна происходить ровно в одну таблицу. ### __13. В чем разница в синтаксисе коррелированного и некоррелированного подзапросов__ Существуют два типаподзапросов: - **Коррелированный** - выбирает данные из таблицы со ссылкой на внешний запрос. Он не считается независимым запросом, поскольку ссылается на другую таблицу или столбец в таблице. ``` SELECT last_name FROM s_emp one WHERE 'Ngao' IN (SELECT last_name FROM s_emp WHERE salary=one.salary); ``` Коррелированный подзапрос содержит ссылку на данные внешнего запроса и выполняется не один раз, а для каждой строки внешнего запроса. - **Некоррелированный** - является независимым запросом, в котором выходные данные подзапроса подставляются в основной запрос. ``` SELECT last_name FROM s_emp WHERE start_date < (SELECT MIN(startdate) FROM semp WHERE title='Warehouse Manager'); ``` Данные, выбираемые некоррелированным подзапросом, никак не зависят от внешнего запроса. Также подзапрос выполняется один раз. https://studopedia.ru/3_52779_korrelirovannie-i-nekorrelirovannie-podzaprosi.html ### __14. В чем разница в хранении данных в столбцах с типами данных `BFILE` и `BLOB`__ Данные типа `BFILE` хранятся в отдельных от базы данных файлах, а `BLOB` - в файлах базы данных. ### __15. Какие ограничения в таблице можно установить при создании таблицы только на уровне столбца?__ `NOT NULL`. ### __16. Напишите команду которая позволяет найти записи в таблице Employees содержащие текст `SA_` в столбце `JOB_ID`__ ```sql SELECT * FROM EMPLOYEES WHERE JOB_ID LIKE 'SA\_%' ESCAPE '\'; ``` ### __17. Перечислите дополнительные возможности которые обеспечивает тип данных Timestamp по сравнению с типом данных Date__ `TIMESTAMP` имеет следующие особенности: - данный тип данных имеет большую точность (доли секунды) 0 - 9, по умолчанию - 6 - имеет несколько расширений: - TIMESTAMP WITH TIME ZONE - Хранит вместе со значением даты и времени информацию о часовом поясе - TIMESTAMP WITH LOCAL TIME ZONE - Значения этого типа автоматически преобразуются между часовым поясом базы данных и местным (сеансовым) часовым поясом. При хранении в базе данных значения преобразуются к часовому поясу базы данных, а при выборке они преобразуются к местному (сеансовому) часовому поясу. - из DATE c помощью EXTRACT можно вытащить только YEAR, MONTH, DAY; В то время как из TIMESTAMP можно вытащить также и всё остальное HOUR, MINUTE, SECOND > имеет ограничение `NOT NULL` - > что это [color=#ff0000] > > имеет значение по умолчанию, равное текущему времени (`NOW()`) https://oracle-patches.com/db/sql/3407-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B4%D0%B0%D1%82%D1%8B-%D0%B8-%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8-%D0%B2-pl-sql ### __18. Расставьте операторы в порядке убывания их приоритетов (мее)__ - `+, ||` - `IS NULL` - `BETWEEN` - `=, <>` ### __19. Перечислите различия в возможностях операторов Decode и Case__ - `DECODE` считает, что `NULL` равно `NULL`, а `CASE` - нет - `CASE` может использоваться в WHERE, `DECODE` - нет ### __20. Опишите процесс обеспечения сервером Oracle согласованности по чтению при одновременной работе нескольких пользователей__ Согласованность чтения: - Гарантирует непротиворечивое представление данных в любой момент времени - Изменения, сделанные одним пользователем, не вступают в противоречие с изменениями, сделанными другим пользователем. - Читатели не блокируют писателей, и наоборот (Select for Update - в этом случае не работает) ![](https://i.imgur.com/qTTtDMM.jpg) https://oracle-patches.com/oracle/prof/1436-%D1%81%D0%BE%D0%B3%D0%BB%D0%B0%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BD%D0%B5%D0%B1%D0%BB%D0%B0%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B5-%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F-oracle ### __21. Какой модификатор формата следует использовать чтобы вводимый литерал в точности соотвествовал заданному шаблону? Приведите пример__ Модификатор `FX`. Пример: ```sql SELECT TO_DATE('01-01-2020', 'FXDD-MM-YYYY') FROM DUAL; ``` выполнится корректно, а ```sql SELECT TO_DATE('1-01-2020', 'FXDD-MM-YYYY') FROM DUAL; ``` нет, поскольку во втором строковом литерале опущены ведущие нули. ### __22. Опишите различия между ограничениями PRIMARY KEY и UNIQUE__ - столбец с ограничением PRIMARY KEY не может принимать значение NULL, а столбец с ограничением UNIQUE может принимать одно значение NULL - В одной таблице может быть только один PRIMARY KEY, но может быть несколько ограничений UNIQUE - При создании PRIMARY KEY автоматически генерируется кластеризованный индекс, а при UNIQUE - некластеризованный (миллион раз подумать прежде чем это писать) https://www.geeksforgeeks.org/difference-between-primary-key-and-unique-key/ (кому не лень - прочитайте это и допишите что-нибудь полезное) ### __23. Каково значение, расположение и свойства сегмента в базе данных ORACLE__ **Сегмент** - это набор экстентов, содержащих все данные для определенной логической структуры хранения в табличном пространстве. - Для каждой таблицы Oracle выделяет один или несколько экстентов для формирования сегмента данных этой таблицы - Для каждого индекса Oracle выделяет один или несколько экстентов для формирования своего сегмента индекса. В базах данных Oracle используются четыре типа сегментов: - сегмент данных (data segments) - сегмент индекса (index segments) - сегмент отката (rollback segments) - временные сегменты (temporary segments) (учитывая что говорили только про сегмент отката, про него подробнее) - Каждая база данных содержит один или несколько сегментов отката. - **Сегмент отката** - это часть базы данных, которая записывает действия транзакций, если транзакция должна быть откатана (отменена). - Сегменты отката используются для обеспечения согласованности чтения, транзакций отката и восстановления базы данных. https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch3.htm#segments ### __24. Каков будет результат выполнения команды__ ```sql SELECT ROUND(TRUNC(MOD(1600, 10), -1), 2) FROM DUAL; ``` Результат: 0. - MOD - остаток от деления. - TRUNC - возвращает число, усеченное до определенного количества знаков после запятой. - ROUND - возвращает число, округленное до определенного количества знаков после запятой. Разница между ROUND и TRUNC [![](https://i.imgur.com/86dWTes.jpg) ](https://)[](https://) ### __25. Сколько строк будет выбрано командой__ ```sql SELECT * FROM EMPLOYEES WHERE ROWNUM > 2; ``` Будет выбрано 0 строк, поскольку `ROWNUM` присваивается только строкам, удовлетворяющим предикату в `WHERE`. ### __26. Перечислите виды ограничений для которых Oracle неяно создает уникальный индекс__ - `PRIMARY KEY` - `UNIQUE` ### __27. Столбец Col в таблице my_table содержит значения от 1 до 10 и NULL. Строки с какими значениями в столбце Col будут выбраны командой__ Никакие. ### __28. Какое максимальное число можно хранить в столбце таблицы с типом данных Number(3, -3)__ 999000 ### __29. Какому виду ограничений в представлениях словаря данных соответствует обозначение O и как действует данный вид ограничений__ WITH READ ONLY. Данное ограничение означает что данная таблица или представление не могут быть изменены. https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8004.htm https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022 ### __30. Перечислите условия, при которых представление допускает изменение данных в таблице__ Если простое представление(?)