View Full Version : Commit ohne Datensatzfreigabe
Allrounder
05-05-10, 09:46
Folgende Konstellation:
Programm A läuft in benannter Aktivierungsgruppe und ruft die Prozedur P eines Serviceprogramms auf, das in Aktivierungsgruppe *CALLER läuft.
Die Prozedur macht ein Update auf einen Satz der Tabelle T und sperrt diesen richtigerweise. Dies wird auch bei den Teildateisperren des Jobs angezeigt:
DATEN *SHRUPD HELD
Programm A setzt direkt nach dem Prozeduraufrud einen sql commit ab. Nach meinem Verständnis müsste dieser den Datensatz wieder freigeben, tut er aber nicht.
sqlcod nach update und commit ist beidesmal 0.
Hat jemand eine Erklärung?
... Beobachtung falsch, oder Bug
zur Beobachtung: die Teildateisperre ist nicht das Kriterium für den record lock!!!
D*B
Folgende Konstellation:
Programm A läuft in benannter Aktivierungsgruppe und ruft die Prozedur P eines Serviceprogramms auf, das in Aktivierungsgruppe *CALLER läuft.
Die Prozedur macht ein Update auf einen Satz der Tabelle T und sperrt diesen richtigerweise. Dies wird auch bei den Teildateisperren des Jobs angezeigt:
DATEN *SHRUPD HELD
Programm A setzt direkt nach dem Prozeduraufrud einen sql commit ab. Nach meinem Verständnis müsste dieser den Datensatz wieder freigeben, tut er aber nicht.
sqlcod nach update und commit ist beidesmal 0.
Hat jemand eine Erklärung?
Mit F10 auf Satzsperren umschalten, dann siehst du die Wahrheit.
Allrounder
05-05-10, 10:38
Danke Euch!
Die Aufregung war also umsonst. Der COMMIT funktioniert erfreulicherweise wie er soll.
Ich war in der falschen Ebene unterwegs.
Die Satzsperren-Anzeige hatte mir gefehlt.
VG Allrounder
Nur als Hinweis, der UPDATE gibt den Satz nach dem UPDATE eigentlich wieder frei und sperrt ihn nicht.
... nur damit das nicht am Ende noch jemand glaubt:
bei Einsatz von Commitment Controll werden alle Satzsperren bis zum Ende der Transaktion, die mit Commit (Änderungen festschreiben) oder Rollback (Änderungen zurückfahren) beendet wird, gehalten.
D*B
Nur als Hinweis, der UPDATE gibt den Satz nach dem UPDATE eigentlich wieder frei und sperrt ihn nicht.
Allrounder
05-05-10, 12:55
Nur als Hinweis, der UPDATE gibt den Satz nach dem UPDATE eigentlich wieder frei und sperrt ihn nicht.
Wie Dieter bereits richtiggestellt hat, ist hier der Satz nach dem Update (SQL) noch gelockt, was auch so gewollt ist. Erst der Commit hebt die Sperre auf.