SQL*Plus, AUTOCOMMIT und EXIT

Auch wenn das eigentlich ein Grundlagenthema sein sollte — gerade heute durfte ich selbst mal wieder erfahren, daß es folgenreiche Unterschiede zwischen dem kontrollierten Abbruch eines Skriptes in SQL*Plus und dem Abbruch einer Server-seitigen Session gibt.

Mythos: Ein „quit“ oder ein „whenever sqlerror exit“ bewirken ein Rollback beim Beenden eines Skriptes.

Tatsache: Ein „exit“ in SQL*Plus impliziert ein COMMIT und kein ROLLBACK!

Die Oracle-Doku zu SQL*Plus wurde zum Release 10g um einen kleinen, aber wichtigen Satz erweitert, der klarstellt, daß dieses Verhalten auch unabhängig von der Umgebungseinstellung „AUTOCOMMIT“ ist.

Damit unterscheidet sich das Standardverhalten des Clients „SQL*Plus“ vom Verhalten des RDBMS: Wird eine Session nämlich unterbrochen („disconnect“) oder abgeschossen („kill“), dann führt Oracle ein Rollback durch. Übrigens: Dieses implizite Rollback ist meist der Grund, warum Sessions noch lange als „aktiv“ gekennzeichnet sind, obwohl sie schon lange zuvor mit „alter system kill session“ abgeschossen wurden.

Rollback bei Abbruch

Anstelle von bisher z.B.

whenever sqlerror exit exitcode_error

kann z.B.

whenever sqlerror exit exitcode_error ROLLBACK

verwendet werden. Dann findet bei einem kontrollierten Abbruch („Graceful Exit“) auch wieder ein Rollback statt — wenn das denn so gewünscht ist.

Autocommit

Dieses eher selten genutzte Feature (das meiner Ansicht nach auch möglichst nicht genutzt werden sollte) sorgt dafür, daß nach einer gewissen Anzahl INSERT/UPDATE/DELETE (Voreinstellung 1) sofort ein COMMIT ausgeführt wird. Damit kann es bei der Fehlersuche in SQL-Skripten schon mal relevant werden, z.B. wenn bei der zweiten Ausführung eines Skriptes nach vorherigem Abbruch Unique Key Constraints verletzt werden. Ein

show autocommit

Gibt dann darüber Auskunft, ob das Feature an- oder abgeschaltet ist.

Weblinks

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s