Discussion:
Oracle sqlplus commit (newbie)
(zu alt für eine Antwort)
Joachim Hofmann
2004-05-28 21:31:19 UTC
Permalink
Hallo,

Ich stelle fest, dass sqlplus, wenn ich INSERT - Befehle eingebe, mir zwar auf
darauffolgende SELECT - Anweisung meine vorher angefügten Datensätze anzeigt; aber andere
parallel laufende Tools wie Oracle Enterprise Manager, wie auch meine Kollegen mittels
ihrem eigenen sqlplus die Einfügung *nicht* sehen können, solange, bis ich mich
disconnecte, dann ist die Einfügung überall sichtbar.

Ist das das Standardverhalten? Kann man dieses Verhalten auch ändern?

Danke

Joachim
Tiscali
2004-05-28 22:20:25 UTC
Permalink
Post by Joachim Hofmann
Hallo,
Ich stelle fest, dass sqlplus, wenn ich INSERT - Befehle eingebe, mir zwar auf
darauffolgende SELECT - Anweisung meine vorher angefügten Datensätze anzeigt; aber andere
parallel laufende Tools wie Oracle Enterprise Manager, wie auch meine Kollegen mittels
ihrem eigenen sqlplus die Einfügung *nicht* sehen können, solange, bis ich mich
disconnecte, dann ist die Einfügung überall sichtbar.
Ist das das Standardverhalten? Kann man dieses Verhalten auch ändern?
Danke
Joachim
Hallo Joachim,

ja das ist Standardverhalten. Um Änderungen in der Datenbank
festzuschreiben, ist es erforderlich die Eingaben mit dem Befehl
'COMMIT' abzuschließen. Danach sind die Änderungen für alle anderen
Benutzer und Programme sichtbar.

Im Gegensatz zu 'COMMIT' wideruft der Befehl 'ROLLBACK' die im SqlPlus
vorgenommenen Änderungen.


Detlef
Thomas Blankschein
2004-05-29 08:32:25 UTC
Permalink
Post by Joachim Hofmann
Ist das das Standardverhalten? Kann man dieses Verhalten auch ändern?
Du kannst für Deine aktuelle Session das Verhalten mit SET AUTOCOMMIT ON und
SET AUTOCOMMIT OFF ändern.

Thomas
Joachim Pense
2004-05-29 23:30:35 UTC
Permalink
Post by Thomas Blankschein
Post by Joachim Hofmann
Ist das das Standardverhalten? Kann man dieses Verhalten auch ändern?
Du kannst für Deine aktuelle Session das Verhalten mit SET AUTOCOMMIT ON
und SET AUTOCOMMIT OFF ändern.
Vorsicht! SET AUTOCOMMIT ON führt dazu, dass _jede_ SQL-Anweisung sofort
committet wird. Das ist in der Voreinstellung ausgeschaltet.

Worum es dem OP geht, ist, dass beim Verlassen von SQL*Plus ein implizites
"commit" abgeschickt wird. Wenn man das nicht will, muss man SQL*Plus mit
"exit rollback" verlassen. Ich weiß im Moment nicht, ob es eine Möglichkeit
gibt, das Standardverhalten von "exit" auf "exit rollback" umzustellen.

Joachim
Stefan Graf
2004-05-29 11:19:50 UTC
Permalink
Post by Joachim Hofmann
Ich stelle fest, dass sqlplus, wenn ich INSERT - Befehle eingebe, mir zwar auf
darauffolgende SELECT - Anweisung meine vorher angefügten Datensätze anzeigt; aber andere
parallel laufende Tools wie Oracle Enterprise Manager, wie auch meine Kollegen mittels
ihrem eigenen sqlplus die Einfügung *nicht* sehen können, solange, bis ich mich
disconnecte, dann ist die Einfügung überall sichtbar.
Ist das das Standardverhalten? Kann man dieses Verhalten auch ändern?
Fast hätte ich gesagt, bleib mal bei Access, aber das wäre ja dann doch
etwas unfair ;-)

Oracle nimmt alle Änderung erstmal nur innerhalb der eigen Sitzung vor und
macht dies erst mit einem Commit für alle anderen Sitzungen sichtbar.
Geändret Record sind solange für alle anderen Sitzungen fürs Schreiben
gelockt.
Das ganze läuft unter dem Begriff "Isolierte Transaktionen".

SQLPLUS ist standardmäßig auf AUTOCOMMIT ON eingestellt, was aber im Prinzip
nicht korrekt ist, denn alle anderen Anwednungen machen beim Schliessen
einer Sitzung erst mal ein Rollback.
--
Stefan Graf
Marc Blum
2004-06-02 18:30:01 UTC
Permalink
Post by Stefan Graf
SQLPLUS ist standardmäßig auf AUTOCOMMIT ON eingestellt,
da liegt Dir eine Fehlinformation vor. SQL*Plus macht defaultmäßig *kein*
Autocommit. Hier die Referenz, der Default ist unterstrichen:

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a90842/ch13.htm#1012156
Post by Stefan Graf
was aber im Prinzip
nicht korrekt ist, denn alle anderen Anwednungen machen beim Schliessen
einer Sitzung erst mal ein Rollback.
Das ist interessant. Welche?


--
Marc Blum
mailto:***@marcblum.de
http://www.marcblum.de
Stefan Graf
2004-06-03 17:44:37 UTC
Permalink
Post by Marc Blum
Post by Stefan Graf
SQLPLUS ist standardmäßig auf AUTOCOMMIT ON eingestellt,
da liegt Dir eine Fehlinformation vor. SQL*Plus macht defaultmäßig *kein*
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a90842/ch13.htm#1012156
Post by Marc Blum
Post by Stefan Graf
was aber im Prinzip
nicht korrekt ist, denn alle anderen Anwednungen machen beim Schliessen
einer Sitzung erst mal ein Rollback.
Das ist interessant. Welche?
Eigentlich alle, denn wenn man eine Sitzung, in der eine Transaktion noch
offen ist, einfach schliesst, macht Oracle ein Rollback.
--
Stefan Graf
Marc Blum
2004-06-04 06:12:25 UTC
Permalink
Post by Marc Blum
Post by Marc Blum
Post by Stefan Graf
SQLPLUS ist standardmäßig auf AUTOCOMMIT ON eingestellt,
da liegt Dir eine Fehlinformation vor. SQL*Plus macht defaultmäßig *kein*
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a90842/ch13.htm#1012156
Post by Marc Blum
Post by Stefan Graf
was aber im Prinzip
nicht korrekt ist, denn alle anderen Anwednungen machen beim Schliessen
einer Sitzung erst mal ein Rollback.
Das ist interessant. Welche?
Eigentlich alle, denn wenn man eine Sitzung, in der eine Transaktion noch
offen ist, einfach schliesst, macht Oracle ein Rollback.
Klar, wenn man die Anwendung abschießt und serverseitig eine verwaiste Session
liegenbleibt, kommt irgendwann der PMON des Weges, fährt offene Transaktionen
zurück etc. blabla.

Du hast aber geschrieben dass die *Anwendung* ein ROLLBACK macht. Würde mich
wirklich interessieren, in welcher Standardsoftware, welcher
Entwicklungsumgebung das Defaultverhalten "reguläre Beendigung der Anwendung =>
ROLLBACK" ist.



--
Marc Blum
mailto:***@marcblum.de
http://www.marcblum.de
Mario Rothacher
2004-06-04 09:05:22 UTC
Permalink
Post by Marc Blum
Du hast aber geschrieben dass die *Anwendung* ein ROLLBACK macht. Würde mich
wirklich interessieren, in welcher Standardsoftware, welcher
Entwicklungsumgebung das Defaultverhalten "reguläre Beendigung der Anwendung =>
ROLLBACK" ist.
Also ich entwickle mit Delphi und den Oracle-Komponennten von DOA. Dort
gibts bei der TSession-Komponennte ein Property RollbackOnDisconnect.
Das ist zwar defaultmässig auf False, aber in unserer *Anwendung* ist
sie auf True. Denn wenn der Benutzer das Programm verlässt und nicht
gespeichert hat, dann darf die Anwendung wirklich selber ein Rollback
veranlassen und muss sich nicht auf die Oracle-Internas verlassen.

cu
Mario
Stefan Graf
2004-06-04 17:42:05 UTC
Permalink
Post by Marc Blum
Post by Stefan Graf
Post by Marc Blum
Post by Stefan Graf
SQLPLUS ist standardmäßig auf AUTOCOMMIT ON eingestellt,
da liegt Dir eine Fehlinformation vor. SQL*Plus macht defaultmäßig *kein*
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a90842/ch13.ht
m#1012156
Post by Marc Blum
Post by Stefan Graf
Post by Marc Blum
Post by Stefan Graf
was aber im Prinzip
nicht korrekt ist, denn alle anderen Anwednungen machen beim Schliessen
einer Sitzung erst mal ein Rollback.
Das ist interessant. Welche?
Eigentlich alle, denn wenn man eine Sitzung, in der eine Transaktion noch
offen ist, einfach schliesst, macht Oracle ein Rollback.
Klar, wenn man die Anwendung abschießt und serverseitig eine verwaiste Session
liegenbleibt, kommt irgendwann der PMON des Weges, fährt offene Transaktionen
zurück etc. blabla.
Du hast aber geschrieben dass die *Anwendung* ein ROLLBACK macht. Würde mich
wirklich interessieren, in welcher Standardsoftware, welcher
Entwicklungsumgebung das Defaultverhalten "reguläre Beendigung der Anwendung =>
ROLLBACK" ist.
Ich meine ja auch das ungeplante Beenden eines Programms, oder bezeichnest
Du ein exit in sqlplus bei einer offenen Transaktion als geplant ;-)?
--
Stefan Graf
Marc Blum
2004-06-04 19:26:09 UTC
Permalink
Post by Stefan Graf
Ich meine ja auch das ungeplante Beenden eines Programms, oder bezeichnest
Du ein exit in sqlplus bei einer offenen Transaktion als geplant ;-)?
ja

--
Marc Blum
mailto:***@marcblum.de
http://www.marcblum.de

Loading...