yo,
nein, ich denke, das war nicht die Frage!
nun ja, es gab ja auch mehr als eine frage. und ich wollte ihm ein gutes beispiel für eine traskation geben. ob damit alle fragen abgedeckt sind, keine ahnung. aber vielleicht hilft es ihm ein wenig weiter.
Wenn es innerhalb einer Transaktion zum Absturz des Rechners/der DBMS kommt, so wird die Transaktion beim erneuten Hochfahren einem Rollback unterzogen. Dies passiert automatisch und bedarf keines Eingriffs.
es passiert nicht nur ein rollback beim absturz des dbms, sondern generell wenn die transaktion nicht vollständig durchgeführt werden konnte. dies kann unterschiedliche ursachen haben, rechnerabsturz ist sicherlich einer davon. unter Oracle sollte dan der SMON dafür sorgen, dass alles wieder im konsistenten zustand gebracht wird.
Wenn jetzt ein zweiter Prozeß das gleiche macht, so kann dieser aus A lesen, in B speichern aber u.U. nicht mehr aus A löschen, weil der Datensatz nicht mehr in A vorhanden ist. Er wurde schon von dem ersten Prozeß gelöscht.
Dies führt zu einem SQL-Fehler (das Löschen aus A schlägt fehl), aber die Transaktion sollte dennoch abgeschlossen werden.
der versuch, einen datensatz zu löschen, der gar nicht vorhanden ist, wird keine fehlermeldung nach sich ziehen und es wird somit auch nicht die transaktion zurück gerollt. ich kann auf eine leere tabelle einen delete statement absetzten und er wird erfolgreich ausgeführt, egal wieviele datensätze davon betroffen wurden.
Ilja