Transaktionen

Werbung
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.
Herunterladen