Як створити індекс у Oracle, якщо таблиця зайнята
Як створити індекс Oracle, якщо таблиця зайнята.
Іноді бувають такі ситуації, коли щось трапилося з індексами на важливій таблиці. Якщо робота з БД безперервна і ця таблиця часто зайнята, відновити індекси досить проблематично, оскільки ресурс постійно зайнятий. Звичайно можна зловити такий момент, коли СУБД дасть можливість створити index. Однак якщо ця проблема спливла лише після запуску тривалої та важливої операції, яка не потребує зволікань. Так як об'єкт зайнятий вам доведеться писати код створення індексу і сидіти тиснути, ловлячи момент, коли пройде commit і об'єкт розблокується. Не дуже райдужні перспективи. Тому розумні люди в Oracle подумали про це. У Oracle Enterprise Edition можна запустити створення індексу в режимі очікування. На жаль, вже у версії Standard Edition дана можливість відсутня. Щоб запустити створення індексу, коли ресурс зайнятий необхідно дописати в кінці ONLINE.
CREATE INDEX index_name ON table_name (column_name, column_name, column_name, column_name) ONLINE;
Операція запуститься і чекатиме моменту, коли ресурс звільниться. Як тільки пройде commit, запуститься створення індексу. Майте на увазі, що час, необхідний для завершення побудови онлайн індексу пропорційний розміру таблиці та кількості одночасно виконуваних DML звітності. Тому, найкраще, починати оперативну побудову індексу за низької DML активності.
Дуже корисна feature. Якщо у вас версія Enterprise Edition раджу користуватися, тому що вона потрібна не тільки в ситуації, яку я описала. Прочитати документацію про це можна тут.