2016-07-26 2 views
1

Я работаю над скриптом для создания индекса онлайн в одной из таблиц, к которым постоянно обращается приложение. Я хотел бы знать, если у меня есть возможность отказаться от индекса онлайн, как раз в случае, если требуется откат.Удаление индекса при выполнении операций DML

Я использую Oracle Database 11g 11.2.0.4.0

Причина, почему я спрашиваю это потому, что если я пытаюсь удалить индекс, не принимая эксклюзивную блокировку, это даст ORA-00054 - ресурс занят. Документ oracle говорит, что я могу использовать онлайн для 12c, есть ли способ достичь этого и в 11g? DROP INDEX [ schema. ] index [ ONLINE ] [ FORCE ] ;

Любые предложения?

ответ

3

Вы должны попробовать ddl_lock_timeout (я предполагаю, что таблица не будет заблокирована навсегда):

DDL_LOCK_TIMEOUT определяет лимит времени, как долго DDL заявления будет ждать в очереди блокировок DML

alter session set ddl_lock_timeout = 1000000; 
drop index idxName; 

Может быть, вы должны рассмотреть вопрос об изменении его INVISIBLE первым:

ALTER INDEX idName INVISIBLE; 
+1

Спасибо @vercelli. Мой индекс был довольно маленьким, и этот подход работал отлично. Было бы интересно посмотреть, как это будет работать на больших объектах индекса. – Ankit

+0

@Ankit Удаление индекса должно быть довольно быстрым. После того, как блокировка будет получена по индексу падения, остальным запросам придется подождать – vercelli

Смежные вопросы