Ich bin in einer Situation fest, wo ich eine Select-Anweisung mit FOR UPDATE SKIP LOCKED verwenden. Below Abfrage ist Teil eines Verfahrens, das von mehreren parallelen Jjobs in RAC-Umgebung aufgerufen wird ausgeführt:FÜR UPDATE SKIP LOCKED Verriegelungstabelle nicht in Select-Anweisung Oracle
CURSOR MyCursor IS
SELECT A.ID, A.NEXTSEQNBR, A.EVENTTYPCD, A.EVMEVENTID , B.EVENTTTIMESTAMP
FROM Table1 A
INNER JOIN Table2 B ON A.ID = B.ID
AND A.NEXTSEQNBR - 1 = B.SEQNBR
WHERE B.STATCD = 'MYVAL'
AND MOD(A.ID, 1) = 0
FOR UPDATE SKIP LOCKED;
Tabelle 1 hat eine Master-Tabelle mit dem Namen EVENTTYPTABLE1. Table1.EVENTTYPCD-Spalte ist ein Fremdschlüssel, der auf EVENTTYPTABLE1 verweist.
In der Produktionsumgebung habe ich die gesperrten Objekte überprüft und festgestellt, dass die Haupttabelle EVENTTYPTABLE1 gesperrt ist, obwohl ich in der obigen Abfrage die Haupttabelle EVENTTYPTABLE1 nicht verwende. Ich erwartete Table1 und Table2 Tabelle in einer Lock-Situation wegen der FOR UPDATE SKIP LOCKED. Aber warum EVENTTYPTABLE1? Ich vermisse etwas?
Natürlich wird der Cursor in der Prozedur geöffnet und abgerufen.
Ich bin nicht vor einer Oracle-Instanz jetzt Antwort vollständiger. Ab Oracle 11.1.0.6 übernimmt DML für eine untergeordnete Tabelle jedoch eine DML-Sperre im SX-Modus für die übergeordnete Tabelle. Siehe Oracle-Support-Hinweis 5909305.8. –
Bitte teilen Sie den Link für den Punkt, auf den Sie sich beziehen. –
Ich kann den Link nicht teilen - der Support-Hinweis ist nur über die Support-Website von Oracle zugänglich. Ihre Oracle-Lizenz sollte Sie dazu berechtigen, sich dort zu registrieren. –