ORA-00060: Deadlock detected while waiting for resource (Deadlock beim Warten auf Ressource erkannt)
OracleWas bedeutet das?
Zwei oder mehr Sessions blockieren sich gegenseitig; jede wartet auf eine Ressource, die die andere hält. Oracle erkennt den Zyklus, wählt ein Opfer und setzt dessen Statement zurück.
Ursache
Zeilensperren in unterschiedlicher Reihenfolge, dieselben Zeilen über Kreuz von verschiedenen Transaktionen aktualisiert, Tabellensperren bei Updates der Elterntabelle durch nicht indizierte Foreign Keys oder parallele DML auf einem Bitmap-Index.
Lösung
Untersuche die im Alert Log referenzierte Deadlock-Tracedatei (Graph), um die beteiligten SQL-Statements und Zeilen zu finden. Greife in der Anwendung immer in derselben Reihenfolge auf Tabellen/Zeilen zu. Indiziere Foreign-Key-Spalten (nicht indizierte FKs sind eine klassische Deadlock-Ursache). Halte Transaktionen kurz und prüfe die Commit-Häufigkeit. Fange die Deadlock-Transaktion in der Anwendung ab und wiederhole sie.
Weitere Einträge zu dieser Datenbank
- ORA-00001Unique constraint violated (Unique Constraint verletzt)
- ORA-00054Resource busy and acquire with NOWAIT specified or timeout expired (Ressource belegt; NOWAIT angegeben oder Timeout abgelaufen)
- ORA-01017Invalid username/password; logon denied (ungültiger Benutzername/Passwort; Anmeldung verweigert)
- ORA-01555Snapshot too old: rollback segment number too small (Snapshot zu alt: Rollback-Segment-Nummer zu klein)
- ORA-01652Unable to extend temp segment by N in tablespace (Temp-Segment kann im Tablespace nicht um N erweitert werden)
- ORA-04031Unable to allocate N bytes of shared memory (N Bytes Shared Memory können nicht allokiert werden)