Datenbank - Transaktionen • Beginnen, wenn das erste ausführbare SQL Statement arbeitet • Enden mit einem der folgenden Ereignisse: Vorteile von COMMIT und ROLLBACK • Sicherung der Datenkonsistenz • Vorhergehende Datenänderungen können persistent gemacht werden. – COMMIT oder ROLLBACK – DDL oder DCL Statement wird ausgeführt (automatisches Commit) • Gruppierung von logischen relationalen Operationen – Der Nutzer loggt sich aus – Das System stürzt ab. SQL1 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. SQL2 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Transaktionssteuerung Transaktion INSERT COMMIT UPDATE Savepoint A INSERT DELETE Savepoint B ROLLBACK bis Savepoint B ROLLBACK bis Savepoint A Implizite Transaktionsabarbeitung • Ein automatisches Commit kommt unter folgenden Bedingungen vor: – Ein DDL Statement wurde verarbeitet – Ein DCL Statement wurde verarbeitet – Ein normales Exit aus SQL*Plus ohne Commit oder Rollback • Ein automatisches Rollback wird bei abnormalem Ende von SQL*Plus oder Systemabsturz ausgeführt ROLLBACK SQL3 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. SQL4 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Status der Daten vor COMMIT oder ROLLBACK • Der vorhergehende Status kann wiederhergestellt werden. • Der Nutzer kann die Ergebnisse der DMLOperation mit einem SELECT- Statement überprüfen. • Andere Nutzer können die Ergebnisse noch nicht sehen. • Die betroffenen Tupel sind gelockt, andere Nutzer können diese Daten nicht ändern. SQL5 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Festschreiben von Daten (commit) • Ändern SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782; 1 row updated. • Festschreiben der Änderung. SQL> COMMIT; Commit complete. Status der Daten nach COMMIT • Die Datenänderung ist permanent in der Datenbank. • Der vorherige Status der Daten ist permanent verloren • Alle Nutzer können die Ergebnisse sehen. • Die Sperren der betroffenen Tupel sind zurückgesetzt, diese Tupel können von anderen Nutzern geändert werden. • Alle Sicherungspunkte sind gelöscht. SQL6 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Status der Daten nach ROLLBACK Alle noch nicht festgeschriebenen Änderungen werden durch das ROLLBACK Statement zurückgesetzt. • Datenänderungen werden nicht durchgeführt. • Der vorherige Status wird wiederhergestellt. • Sperrungen werden zurückgesetzt. SQL> DELETE FROM 14 rows deleted. SQL> ROLLBACK; Rollback complete. SQL7 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. employee; SQL8 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Rücksetzen von Änderungen bis zu einer Markierung • Erzeuge eine Markierung der laufenden Transaktion mit der Anweisung SAVEPOINT • Setze zurück bis zur Markierung mit der Anweisung ROLLBACK TO SAVEPOINT. SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO update_done; Rollback complete. SQL9 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Konsistentes (widerspruchsfreies) Lesen Statement-Level Rollback • Wurde ein einfaches DML Statement fehlerhaft ausgeführt, wird nur dieses Statement zurückgesetzt. • Der Oracle Server fügt einen impliziten Sicherungspunkt ein.. • Alle anderen Änderungen bleiben. • Der Nutzer kann die Transaktionen explizit durch Ausführung eines COMMIT oder ROLLBACK Statements beenden. SQL10 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Implementation von konsistentem Lesen • Konsistentes Lesen garantiert eine konsistente Sicht auf alle Daten. • Änderungen durch einen Nutzer machen keine Konflikte, aber bei mehreren Nutzern sind Konflikte möglich. Daten blöcke UPDATE emp SET sal = 2000 WHERE ename = 'SCOTT'; Rollback segmente Nutzer A SELECT * FROM emp; • Beim Lesen der gleichen Daten soll zugesichert werden: Liest eine Konsistente Ansicht – Leser warten nicht auf Schreiber – Schreiber warten nicht auf Leser SQL11 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Nutzer B SQL12 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Geänderte und ungeänderte Daten Vor der Änderung “alte” Daten Locking (Sperren) Oracle-Sperren: • Verhindern zerstörende Dialoge zwischen konkurrierenden Transaktionen • Erfordern keine Aktion des Nutzers • Gebrauchen automatisch den niedrigsten Level der Einschränkung • Werden für die Dauer einer Transaktion gehalten • Haben zwei Basis-Modi: – Exclusive – Share SQL13 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved. Zusammenfassung Anweisung Beschreibung INSERT Fügt ein neues Tupel in die Tabelle UPDATE Modifiziert ein existierendes Tupel in der Tabelle DELETE Löscht ein existierendes Tupel aus der Tabelle COMMIT Macht alle "schwebenden" Änderungen permanent SAVEPOINT Erlaubt ein Rollback bis zum markierenden Punkt ROLLBACK Setzt alle "schwebenden" Transaktionen zurück SQL14 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved.