Können wir wissen, welcher Datensatz gesperrt ist, wenn ein Datensatz gesperrt ist?
Wie kann ich die Datensatz-Rowid oder andere Informationen erhalten?
Ich kann einige Informationen von diesem SQL bekommen
SELECT c.ROW_WAIT_OBJ#,c.ROW_WAIT_FILE#,c.ROW_WAIT_BLOCK#,c.ROW_WAIT_ROW#
FROM v$locked_object a, dba_objects b, v$session c
WHERE a.object_id = b.object_id
AND a.SESSION_ID = c.sid(+)
Ich habe im Web eine Methode gefunden, um mithilfe der Funktion eine Rowid zu erhalten DBMS_ROWID.ROWID_CREATE()
Aber es scheint nicht zu funktionieren.
V$LOCK
.Antworten:
Sie können nicht wirklich alle Zeilen auflisten, die von einer Sitzung gesperrt werden. Sobald jedoch eine Sitzung von einer anderen blockiert wird, können Sie feststellen, welche Sitzung / Zeile sie blockiert.
Oracle führt keine Liste einzelner Zeilensperren. Sperren werden vielmehr direkt in den Zeilen selbst registriert - stellen Sie sich das als zusätzliche Spalte vor.
Sie können über die
V$LOCK
Ansicht herausfinden, welche Sitzung eine Sperre für ein Objekt erhalten hat. Dabei werden jedoch nur allgemeine Informationen aufgelistet, nicht auf Zeilenebene.In dieser Ansicht können Sie auch feststellen, ob eine Sitzung von einer anderen blockiert wird. In diesem Fall werden die Zeileninformationen in den Informationen angezeigt , wenn eine Sitzung von einer anderen Sitzung blockiert wird
V$SESSION
.Sie können die Zeilen-ID abrufen. Erstellen Sie ein Beispiel mit zwei Sitzungen:
Sitzung 2 wartet jetzt auf Sitzung 1. Wir können die blockierende Zeile mit folgender Adresse ermitteln :
Zur weiteren Lektüre: eine Beschreibung des Prozesses von Tom Kyte .
quelle
Sie können alle Tabellensperren in einer Oracle-Datenbank finden, indem Sie die folgende Abfrage ausführen
quelle