Таблиця dual
Таблиця dual дуже проста. Вона складається з одного поля та містить одне значення.
Однак це значення нікого не цікавить. Таблиця використовується для отримання даних, що не мають відношення до dual. Наприклад:
Щоб отримати значення user, ми з таким самим успіхом могли б виконати запит
Dual використовується для таких вибірок просто тому, що завжди існує. Це об'єкт під користувачем sys і він з'являється під час створення бази. І ніхто (за винятком цікавих DBA) не може його змінити. Однак, якщо поставити собі за мету погратися з dual (виключно на тестовій базі), то можна виявити цікаві речі:
Незважаючи на те, що dual тепер містить 3 рядки, select вибирає лише один. Що це - у бази "поїхав дах" від того, що ми внесли зміни до словника (адже формально dual - частина словника)? Строго кажучи, ні.
Ми хотіли видалити всі рядки з dual, але вийшла тільки одна.
Пояснення цьому таке: оптимізатор передбачає, що таблиця dual у будь-яких умовах міститиме лише один рядок.
Втім, у сенсі, dual не зовсім проста таблиця. Ось приклад:
Що за магічна команда була виконана, яка призвела до таких змін у таблиці dual?
Відповідь:alter database close.
Справа тут ось у чому: RMAN'у потрібен доступ до dual навіть коли база закрита, тому при закритті бази dual залишається доступна, але зі зміненою структурою та вмістом.
В кінці нашої коротенької нотатки хочеться повторити наступне: пам'ятайте, що таблиця dual - частина системного словника і Ви в жодному разі не повинні її будь-яким чином змінювати на базі, де працюють користувачі.