Inside Oracle APEX auf Deutsch (von Patrick Wolf)

Lock Konflikte bei Automatic Row Processing (DML) Prozessen

Oracle APEX 3.0 beinhaltet ein nettes neues Feature das Ihr kennen solltet. Es gibt eine neue "Substituation Variable" APEX_DML_LOCK_WAIT_TIME welche dazu verwendet werden kann um das Verhalten der "Automatic Row Processing (DML)" und der ApplyMRU/D Prozesse zu definieren, wenn ein verarbeiteter Datensatz in der Datenbank bereits gelockt ist.

Mit der Standardeinstellung wartet APEX ewig, oder so lange bis der Datensatz wieder freigegeben wird. Das Schlechte daran ist, dass Benutzer normalerweise nicht so lange warten sondern den Abbrechen Button im Browser drücken und die Änderungen erneut an den Server schicken und wieder schicken und wieder schicken. Und jedesmal wird dabei eine neue Datenbankverbindung aus dem Connection Pool verwendet, welche niemals dorthin zurückgegeben wird, weil sie ja beim Lock hängenbleibt. Wenn man sich das genauer überlegt, könnte man damit sicher eine interessante Denial-of-Service Angriffsmethode entwickeln, aber das ist eine andere Geschichte...

Wie kann so eine Locking Situation aussehen?

Zum Beispiel wenn Ihr eine Datenbank habt auf deren Daten auch von einer Oracle Forms Applikationen oder jede andere Client/Server Answendung zusätzlich zur APEX Anwendung zugegriffen wird.

Für solche Anwendungen ist es meistens normal, dass sie eine pessimistische Locking Strategie implementiert haben. Das bedeutet, dass der Datensatz sofort gelockt wird wenn der Benutzer anfängt die Daten zu ändern. APEX und die meisten Web Anwendungen verfolgen eine optimistische Locking Strategie.

Locks können auch entstehen wenn man lange laufende Batch Jobs hat die nur selten ihre Änderungen speichern.

Welche Einstellung soll ich verwenden?

Ich würde vorschlagen in jeder Applikation die "Substitution Variable" auf 0 zu setzen. Unabhängig ob man obiges Szenario hat oder nicht. Ein Wert von 0 bedeutet, dass sofort eine Fehlermeldung ausgegeben wird wenn ein Datensatz gelockt ist.

Weitere Einstellungen können in der Online Dokumentation im Kapitel About DML Lockings nachgelesen werden. Weitere Hintergrund Informationen findet Ihr im zugehörigen OTN Forums Thread.

Labels: , , ,