---
# System prepended metadata

title: Untitled

---

## Контрольная работа №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. Перечислите условия, при которых представление допускает изменение данных в таблице__

Если простое представление(?)

