Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Berlin Rasch Geändert vor über 9 Jahren
1
Transaktionen Dr. Heidrun Bethge Datenbanken II
2
Bsp. für Notwendigkeit von Transaktionen
INSERT INTO auftrag (aufnr, kundennr) VALUES (111,333); INSERT INTO auftragdetails (aufnr, artikelnr, anzahl) VALUES (111,3456,4); UPDATE artikel SET anzahl_auf_lager=234 WHERE artikelnr=3456; Dr. Heidrun Bethge Datenbanken II
3
Was ist eine Transaktion?
Eine Transaktion ist eine ununterbrechbare Folge von DML-Befehlen, welche die Datenbank von einem logisch konsistenten Zustand in einen neuen logisch konsistenten Zustand überführt. Die Datenbank braucht nur vor und nach einer Transaktion in einem zulässigen Zustand zu sein. Dr. Heidrun Bethge Datenbanken II
4
ACID-Prinzip Atomicity: Atomarität. Eine Transaktion wird entweder ganz oder gar nicht ausgeführt. Consistency: Konsistenz. Transaktionen sind die Einheiten der Integritätsüberwachung. Nach einer Transaktion müssen alle Integritätsbedingungen erfüllt sein. Isolation: Parallel laufende Transaktionen sind isoliert und können sich nicht gegenseitig be-einflussen. Ein Nutzer sollte immer den Eindruck haben, dass er allein mit der DB arbeitet. Durability: Dauerhaftigkeit. Sobald eine Transaktion ihre Änderungen freigegeben hat, muss das System das Überleben dieser Änderungen trotz beliebiger (erwarteter) Fehler garantieren (Persistenz). Dr. Heidrun Bethge Datenbanken II
5
Transaktionsbefehle BEGIN / BOT (Begin of Transaction): Beginn einer Transaktion. Wird von einigen DBMS implizit gesetzt. COMMIT / EOT (End of Transaction): Die Transaktion soll erfolgreich beendet werden. ROLLBACK / ABORT: Die Transaktion wird abgebrochen. Alle bereits in ihr durchgeführten Aktionen werden rückgängig gemacht. Dr. Heidrun Bethge Datenbanken II
6
Ende der Transaktion Für das Ende einer Transaktion gibt es nur zwei Möglichkeiten: COMMIT; Erfolgreich beendet. ROLLBACK; Nicht erfolgreich beendet. Dr. Heidrun Bethge Datenbanken II
7
Abschluss von Transaktionen
Der User setzt ein COMMIT oder ROLLBACK selbst ab. Vor und nach jedem DDL-Befehl wie z.B. CREATE, ALTER, DROP, RENAME wird vom DBMS ein implizites COMMIT abgesetzt. Hardware- oder Laufzeitfehler können zu einem Rollback führen. Das DBMS kann Transaktionen zurückrollen, wenn sie z.B. bei Beendigung Konsistenzbedingungen verletzen oder in ein Deadlock laufen. wird eine neue Transaktion eingeleitet, während eine andere noch offen ist, so wird die offene Transaktion automatisch durch COMMIT abgeschlossen. Dr. Heidrun Bethge Datenbanken II
8
Automatische Sperren bei Transaktionen
Ist eine Transaktion aktiv, kann eine andere Transaktion keine Operationen durchführen, die Datensätze der aktiven Transaktion betreffen. Dies gilt, sofern auf diesen Datensätzen von der offenen Transaktion bereits geschrieben wurde. Diese Kommandos werden blockiert. Jedoch: Standard-Sperrlevel von DBMS erfüllen NICHT vollständig das ACID-Prinzip! → Sperren von Hand setzen. Dr. Heidrun Bethge Datenbanken II
9
Beispiel Transaktion Transaktion 1 Transaktion 2
select * from testdaten; update testdaten set wert=11 where id=1; select * from testdaten; select * from testdaten; update testdaten set wert = 22 where id=1; commit; select * from testdaten; select * from testdaten; rollback; Dr. Heidrun Bethge Datenbanken II
10
Transaktionen im Mehrbenutzerbetrieb
Fehler durch gleichzeitigen Zugriff mehrerer Benutzer auf dieselben Daten mehrere Transaktionen laufen parallel und behindern sich ggf. gegenseitig → nebenläufige konkurrierende Prozesse Dr. Heidrun Bethge Datenbanken II
11
Inkonsistentes Lesen: Nonrepeatable Read
X = A + B +C am Ende der Transaktion T1 Integritätsbedingung A + B + C = 0 Dr. Heidrun Bethge Datenbanken II
12
Lesen inkonsistenter Zustände
Integritätsbedingung X + Y = 0 T1 T2 read(X,x); read(Y,y); x=x+1; write(X,x); y=y-1; read(X); read(Y); write(Y,y); commit; Dr. Heidrun Bethge Datenbanken II
13
Dirty Read Lesen nicht freigegebener, ungültiger Daten
Dr. Heidrun Bethge Datenbanken II
14
Verlorengegangenes Ändern: Lost Update
Dr. Heidrun Bethge Datenbanken II
15
Mehrbenutzer-Anomalie
Integritätsbedingung A = B Dr. Heidrun Bethge Datenbanken II
16
Das Phantom-Problem Dr. Heidrun Bethge Datenbanken II
17
Probleme bei Cursor-Referenzen
Dr. Heidrun Bethge Datenbanken II
18
Transaktions-Sperrlevel in SQL
Sperrlevel der nächsten Transaktion: set transaction [read only, |read write,] [isolation level read uncommitted, | read committed, | repeatable read, | serializable] Sperrlevel innerhalb dieser Session: alter session set isolation_level serializable;
19
Sperrlevel read uncommitted Erlaubt Lesen nicht committeter Daten. Read only. read committed Erlaubt nur Lesen von committeten Daten. Non Repeatable Read-Problem besteht. repeatable read Non Repeatable Read-Problem behoben, jedoch Phantom-Problem nicht. serializable Stärkste Stufe, garantiert Serialisierbarkeit. ACID-Prinzip wird erfüllt. Dr. Heidrun Bethge Datenbanken II
20
Auswirkungen der Isolationsstufen
Level dirty read non repeatable read / lost update Phantomproblem read uncommitted ist möglich read committed nein repeatable read serializable
21
Sperren shared lock: read lock (S) exclusive lock: write lock (X)
Kompatibilitätsmatrix von T1 gehaltene Sperre X S - N J von T2 geplante Sperre Dr. Heidrun Bethge Datenbanken II
22
Regeln für Sperren Eine Transaktion, welche einen Datensatz lesen will, muss diesen zunächst mit einem S- oder X-Lock versehen. Eine Transaktion, welche einen Datensatz ändern will, muss diesen zunächst mit einem X-Lock versehen. Ein S-Lock kann durch die gleiche Transaktion durch ein X-Lock erweitert werden. Liegt auf einem Objekt ein X-Lock, kann durch die gleiche Transaktion kein S-Lock auf dieses Objekt gesetzt werden. Wird einer Transaktion A eine Sperre verweigert, da bereits anderweitig eine Sperre besteht, so geht A in Wartestellung (Wartezeit ist begrenzt). Sperren werden in der Regel bis zum Ende der Transaktion gehalten. COMMIT löst alle bestehenden Sperren. Dr. Heidrun Bethge Datenbanken II
23
Sperren in DBMS X-Lock wird vom DBMS automatisch beim Schreiben auf die zu ändernden Datensätze gesetzt. SELECT setzt keine Sperren. SELECT ... FOR UPDATE versieht die Ergebnisdatensätze mit einem X-Lock und den Rest der Tabelle mit einem S-Lock. Lesezugriffe sind auch dann möglich wenn auf den Daten ein S- oder X-Lock liegt. LOCK TABLE tabelle IN SHARE MODE LOCK TABLE tabelle IN EXCLUSIVE MODE Datenbanksysteme unterscheiden in der Praxis noch weitere Sperrtypen. Dr. Heidrun Bethge Datenbanken II
24
Beispiel Sperren I T1 T2 T1 T2 write(A) read(A) rollback X-Lock A
Anfrage: S-Lock A (read(A)) wait rollback (löst X-Lock(A)) resume: S-Lock(A) read(A) Dirty Read Dr. Heidrun Bethge Datenbanken II
25
Beispiel Sperren II T1 T2 T1 T2 read(A) read(B) write(B) write(A)
S-Lock(A) read(A) S-Lock(B) read(B) X-Lock(B) (write(B)) wait X-Lock(A) (write(A)) vorher: lost update nachher: deadlock -> eine der beiden Transaktionen bekommt rollback „deadlock victim“ Dr. Heidrun Bethge Datenbanken II
26
DEADLOCKS Deadlocks sind Fälle, in denen sich zwei oder mehr Prozesse gegenseitig blockieren und jeder auf das Ende der Transaktion eines anderen Prozesses wartet. Das DBMS erkennt automatisch Deadlock-Situationen und führt bei dem Prozess, der den Deadlock ausgelöst hat, ein ROLLBACK aus. (Oracle: nur der letzte Transaktionsschritt wird rückgängig gemacht) Dr. Heidrun Bethge Datenbanken II
27
Beispiel DEADLOCK Transaktion 1 Transaktion2 sperrt A sperrt B
versucht B zu sperren versucht A zu sperren begin; begin; select * from testdaten select * from testdaten where id=1 where id=2 for update of wert; for update of wert; update testdaten update testdaten set wert= set wert=50 where id=2; where id=1; Dr. Heidrun Bethge Datenbanken II
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.