Deutsch

Fehler: ORA-00060: Deadlock beim Warten auf Ressource festgestellt

Fehlermeldung

Oracle Deadlocks treten auf, wenn mindestens eine Sitzung versucht, eine Ressource für ein Datenbankobjekt abzurufen, das derzeit von einer zweiten Sitzung gehalten wird, die ebenfalls versucht, eine von der ersten Sitzung gehaltene Ressource abzurufen.

Um den Deadlock zu unterbrechen, gibt Oracle die von einer Sitzung gehaltene Ressource frei und dann einen Fehler aus, damit die andere Sitzung fortgesetzt werden kann. Dabei wird eine Ablaufverfolgungsdatei für die problematische Sitzung in einem Verzeichnis basierend auf dem Wert für den Initialisierungsparameter "user_dump_dest" erstellt.

Während der Komprimierung einer versionierten Geodatabase kann beim Komprimierungsbefehl potenziell der Oracle-Fehler "ORA-00060: Deadlock beim Warten auf Ressource festgestellt" auftreten.

Ursache

Tritt der Oracle-Fehler während einer Komprimierung auf, handelt es sich bei dem aufgetretenen Deadlock nicht um den üblichen Deadlock-Typ, bei dem zwei Sitzungen um Anforderungen für dieselben zu aktualisierenden oder zu löschenden Zeilenobjekte konkurrieren bzw. sich aufgrund dieser Anforderungen blockieren, sondern vielmehr um einen Deadlock, bei dem sie sich für die ITL-Slots in der Bezugszeichenzeile des Segments blockieren.

Eine detaillierte Beschreibung des Problems finden Sie im Oracle Metalink-Dokument 62354.1 "TX Transaction locks - Example wait scenarios" unter "Waits due to Insufficient 'ITL' slots in a Block".

Der Blockierungszustand tritt wahrscheinlich in einer state_lineages-Tabelle oder in einem der beiden Indizes auf: lineages_pk oder lineage__id_idx2.

Der Fehler manifestiert sich in der Regel, wenn eine Komprimierung ausgeführt wird, während die versionierte Geodatabase von einer hohen Anzahl von Benutzern gleichzeitig bearbeitet wird.

Lösung oder Problemumgehung

Um den Deadlock-Fehler aufzulösen, muss der SDE-Benutzer die state_lineage-Tabellenindizes neu erstellen und den Wert für die Anzahl der initialen Transaktions-Slots in der Bezugszeichenzeile des Objekts erhöhen.

ArcGIS legt den initrans-Wert auf 4 fest, wenn alle von der Versionierung verwendeten Tabellen und Indizes erstellt werden. Der initrans-Wert wird von der dbtune.sde-Datei unter dem Schlüsselwort DATA_DICTIONARY gesteuert, wird jedoch nur bei der anfänglichen Erstellung der Instanz referenziert.

Um den initrans-Wert für die Indizes zu erhöhen, erstellt der SDE-Benutzer den Index neu und legt den neuen Wert fest.

Code:
SQL> ALTER INDEX lineages_pk REBUILD INITRANS 8;

Index geändert.

SQL> ALTER INDEX lineages_id_idx2 REBUILD INITRANS 8;

Index geändert.


Um die Größe für die state_lineages-Tabelle zu erhöhen, ändern Sie die Tabelle.

Code:
SQL> ALTER TABLE state_lineages INITRANS 8;

Tabelle geändert.


Die Tabelle ist dahingehend eingeschränkt, dass die vorhandenen Datenblöcke nicht durch die Änderung selbst geändert werden sondern nur dann, wenn im Rahmen der größer werdenden Tabelle neue Blöcke hinzugefügt werden. Wenn der Deadlock in der Tabelle auftritt und das Problem nicht durch eine Änderung der Tabelle gelöst werden kann, muss die Tabelle exportiert, gelöscht und neu erstellt werden. Außerdem muss ein größerer initrans-Wert festgelegt und die Zeilen müssen wieder in die neue Tabelle importiert werden.

Ein initrans-Wert von 8 sollte ausreichen; dies gilt für größere Organisationen mit vielen gleichzeitigen Editoren jedoch möglicherweise nicht. Der Oracle-Datenbankadministrator (DBA) sollte die Instanz überwachen und die Häufigkeit von Blockierungszuständen ermitteln, die auf ITL-Slots warten. Wenn es sich um ein allgemeines Warteereignis handelt, sollte der Wert weiter erhöht werden. Weitere Anweisungen zum Überwachen von Blockierungszuständen finden Sie in der Oracle-Dokumentation.

    Referenzinformationen