2016-06-23 3 views
1

Ein Angebot ORA-04020: deadlock detected while trying to lock object und ich glaube, dass die Quelle des Fehlers diese Aussagen sein könnte:ORA - 04020: erkannt Deadlock beim Versuch Objekt zu sperren

v_sql := 'DELETE FROM ' || in_table_name || ' SUBPARTITION (' || v_subpart_name || ')'; 
    EXECUTE IMMEDIATE v_sql; 

    v_sql := 'ALTER TABLE ' || in_table_name || ' TRUNCATE SUBPARTITION ' || v_subpart_name; 
    EXECUTE IMMEDIATE v_sql; 

Alle Ideen, wie dieses Problem zu lösen? Könnte es sein, dass die ALTER Aussage den Fehler wirft, da die DELETE direkt davor ist? Nicht sicher, ich dachte, die ALTER würde nur einmal die DELETE ausführen, wenn Sie fertig sind. Oder könnte es sein, dass die Prozedur nicht darauf wartet, dass die ALTER beendet wird, bevor sie beendet und erneut ausgeführt wird?

+1

Es ist wahrscheinlich, weil es keine begehen ist, so dass die Löschsperren die Reihen. –

+0

Vielleicht finden Sie den folgenden Link hilfreich http://www.dba-oracle.com/t_ora_04020_deadlock_detected_while_try_to_lock_object_string.htm –

+0

Ich stehe auch dieses Problem in dev/Produktion env. In meinem Fall lasse ich 'Unterpartition' mit 'UPDATE INDEXES' fallen. Ich bekomme es auch, wenn keine andere Sitzung eine DML ausführt. Scheint in meinem Fall ein 'Self Deadlocks' zu sein. Will Details veröffentlichen, sobald ich es knacke ... – pahariayogi

Antwort

1

Wenn Sie bereits TRUNCATE ABTEILUNG dann, warum Sie löschen müssen. TRUNCATE wäre ein sehr effizienter Weg, Daten aus der Tabelle zu löschen.

Andernfalls müssen Sie Commit nach dem Löschen durchführen, dann ist nur Abschneiden erlaubt.

Grüße Ramki

Verwandte Themen