2016-07-26 7 views
1

Ich arbeite an einem Skript, um einen Index online für eine der Tabellen zu erstellen, auf die ständig von der Anwendung zugegriffen wird. Ich würde gerne wissen, ob es einen Weg für mich gibt, den Index auch online fallen zu lassen, nur für den Fall, dass ein Backout erforderlich ist.Einen Index löschen, während DML-Vorgänge ausgeführt werden

Ich bin mit Oracle Database 11g 11.2.0.4.0

Der Grund, warum ich dies zu fragen, denn wenn ich versuche, den Index zu löschen, ohne eine exklusive Sperre nehmen es ORA-00054 geben wird - Ressource beschäftigt. Der Orakel-Doc sagt, ich kann online für 12c verwenden, gibt es einen Weg, dies auch in 11g zu erreichen? DROP INDEX [ schema. ] index [ ONLINE ] [ FORCE ] ;

Irgendwelche Vorschläge?

Antwort

3

sollten Sie versuchen, ddl_lock_timeout (Ich denke, die Tabelle wird für immer nicht gesperrt werden):

DDL_LOCK_TIMEOUT gibt ein Zeitlimit für wie lange DDL-Anweisungen in einer DML Sperre Warteschlange warten

alter session set ddl_lock_timeout = 1000000; 
drop index idxName; 

Vielleicht sollten Sie sich überlegen, es zu INVISIBLE ersten Wechsel:

ALTER INDEX idName INVISIBLE; 
+1

Danke @vercelli. Mein Index war ziemlich klein und dieser Ansatz funktionierte gut. Es wäre interessant zu sehen, wie es bei großen Indexobjekten funktionieren würde. – Ankit

+0

@Ankit Das Löschen eines Indexes sollte ziemlich schnell sein. Sobald die Sperre vom Drop-Index übernommen wurde, müssen die restlichen Abfragen warten – vercelli

Verwandte Themen