Übung: Transaktionale Systeme

Slides:



Advertisements
Ähnliche Präsentationen
Kapitel 15 Verteilte Datenbanken
Advertisements

Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: 1.Lese den Kontostand von A in die Variable a: read(A,a); 2.Reduziere.
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
Rücksetzen Bisher betrachtetes Scheduling gewährleistet Isolation, d.h. Serialisierbarkeit, setzt jedoch voraus, dass Transaktionen abgebrochen und rückgesetzt.
Beim Start eines Prozesses in Windows NT, 2000 wird a der Programmtext aus der exe-Datei ab der dort angegebenen Adresse gespeichert.
C Tutorium – Semaphoren –
Transaktionsverwaltung
Vs61 6 Verteilte Datenverwaltung. vs62 Ziel:Zusammengehöriger Datenbestand soll über mehrere Stationen verteilt werden, z.B. Fragmentierung: in mehrere.
Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: 1.Lese den Kontostand von A in die Variable a: read(A,a); 2.Reduziere.
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Kapitel 7.2 Dining philosophers problem
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Ein Beispiel in Java.
Transaktionen in verteilten Datenbanken
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Datenbanksysteme für FÜ WS 2004/2005 Transaktionen 1 Worzyk FH Anhalt Transaktionen und Parallelverarbeitung Eigenschaften von Transaktionen Konsistenz.
Datenbanksysteme für FÜ SS 2000 Seite Worzyk FH Anhalt Transaktionen und Parallelverarbeitung Eigenschaften von Transaktionen Konsistenz Isolation.
Bilder vergrößern ohne Qualitätsverlust
Sicherheit von mobilem Code Hauptseminar: Sicherheit in vernetzten Systemen Sicherheit von mobilem Code Oliver Grassow.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Kapitel 13: Mehrbenutzersynchronisation
Kapitel 14: Recovery Oliver Vornberger
1 Kapitel 12: Transaktionsverwaltung Oliver Vornberger Fachbereich Mathematik/Informatik Universität Osnabrück Osnabrück
1 Kapitel 12: Transaktionsverwaltung. 2 Transaktion Bündelung mehrerer Datenbankoperationen Mehrbenutzersynchronisation Recovery.
Erhard Künzel für Info 9. Klasse: Digitale Schule Bayern© Erhard Künzel.
Recovery AIFB SS Recovery 5.1 Fehler im Datenbankbetrieb(1/10) (1)Transaktionsfehler (TF) (2)Systemfehler (SF) (3)Speicherfehler (SpF) Fehlerfallen.
Synchronisation paralleler Transaktionen AIFB SS Synchronisationsverfahren 4.4 Synchronisationsverfahren (1/18) Sperrmodi und Sperrobjekte Sperrprotokoll.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
ausdrucksschwächeres
Transaktion 1Transaktion 2... Transaktion n Synchronisation durch Scheduler Datenbasis-Verwalter lokaler Schedule 1lokaler Schedule n konfliktserialisierbarer.
4.4.2 Sperrverfahren (9/18) Regeln für das Setzen von Sperren
Ausführungsmodell Zustandsübergang einer Transaktion aus Nutzersicht:
Implementierung von S2PL (1) Scheduler als Verwalter von Sperren auf Datenelementen sowie Warteschlangen für Sperren (Sperren-Verwalter). Transaktion 1Transaktion.
Modellierung von Transaktionen Zur Formalisierung der ACID-Garantien muss Verhalten von Transaktionen modelliert werden. Folge aus der Forderung nach lokaler.
Synchronisation paralleler Transaktionen AIFB SS Konzept der Transaktion 4.2 Konzept der Transaktion (1/4) Eine Transaktion ist ein in sich geschlossener,
Betriebliche Informationssysteme Prof. Dr. Michael Löwe
Java Threads Sebastian Werler
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
WS 2012/13 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #11 Transaktionsverwaltung.
WS 2004/2005 Datenbanken II - 5W Mi 17:00 – 18:30 G 3.18 Vorlesung #6 Fehlerbehandlung.
WS 2011/12 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #10 Transaktionsverwaltung.
Vorlesung #9 Fehlerbehandlung
Meins & Vogel GmbH, Tel. (07153) , Sicher im Internet – Nur eine Illusion? Vortrag im Rahmen eines Info-Abends Meins und Vogel.
Transaktion Huang Zhenhao FU Shuai.
Thread Synchronisation in JAVA
Betriebssysteme Übung 2. Tutorium. Task 1 – Locks (1) Wozu Locks? Dienen dazu, exklusiven Zugriff auf eine Ressource sicherzustellen Lock = binäre Semaphore.
Datenbanksysteme Technische Grundlagen Transaktions-Konzept, Mehrbenutzer-Synchronisation, Fehlerbehandlung Prof. Dr. Manfred Gruber FH München.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager.
Parallelisierung für Multiprozessor-Maschinen
Mehrbenutzerzugriff auf GIS-Daten
Transaktionsverwaltung
Synchronisation paralleler Transaktionen  AIFB SS Sperrverfahren Sperrverfahren (13/18) Behandlung von Konflikten bei der Sperrvergabe.
Persistenz: Objekt-Lebensdauer In RDBMS wird Lebensdauer von Werten durch ihren Typ festgelegt: Instanzen von Relationstypen sind persistent, alle anderen.
Vs Verteilte Transaktionen Situation:Fragmentierung: Ein Datenbestand ist über mehrere Stationen verteilt (z.B. verteilte Datenbank, verteiltes Dateisystem,...)
6.3 Verteilte Transaktionen
Transaktionsverwaltung Beispiel einer typischen Transaktion in einer Bankanwendung: 1.Lese den Kontostand von A in die Variable a: read(A,a); 2.Reduziere.
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer:
Übung – Recovery Manager Undo Redo Algorithmus
6.3 Verteilte Transaktionen
Vorlesung #7 Fehlerbehandlung
Transaktionsabbruch, System Crash, Media Failure
Vorlesung #7 Fehlerbehandlung
Vorlesung #7 Fehlerbehandlung
Vorlesung #10 Fehlerbehandlung
 Präsentation transkript:

Übung: Transaktionale Systeme 31.05.2007

Organisatorisches Bewertung, Scheinkriterien: Projektzeitplan: 20% Übung: Mindestens einmal vorrechnen! Aktive Teilnahme! 55% Klausur Projektzeitplan: Projektteil C ist optional, relevant nur für Projektscheinerwerb mind. Benotung von 2,0 für Projektteile A, B Entwicklungsumgebung: Java, Eclipse Projektteil Start Abgabe Besprechung A 03.05.2007 24.05.2007 31.05.2007 B 21.06.2007 28.06.2007 (C) 19.07.2007 ---

Projekt: Überblick Ziel: Verteiltes transaktionales Reisebuchungssystem Eine Reise besteht aus Flügen, Hotels, Mietwagen Einzelne Leistungen werden bei verschiedenen Anbietern gebucht Client 1 Client 2 Client n …… ~ X/Open TX Workflow Controller Transaction Manager -RM manages shared resource -RM must be capable of rollback -RM eher abstraktes Konstrukt mit obigen Eigenschaften  z.B. transaktionales DBS oder unser Resource Manager ~ X/Open XA RM RM RM Flight Reservation Hotel Reservation Rental Car Reservation

X/Open DTP Modell

Häufig gemachte Fehler… Das Schattenspeicherkonzept wurde teilweise nicht richtig umgesetzt! Es wird (beim commit) stets nur in eine Datei auf Festplatte geschrieben. Was passiert, wenn ein Fehler bei diesem Schreibvorgang auftritt?  Zwei-Phasen-Schreiben notwendig (Codebeispiel) Beim Start einer Transaktion wird eine Kopie der Datenbasis erstellt. Startet eine weitere Transaktion wird diese Kopie wieder überschrieben. Es sind keine parallelen Transaktionen möglich! Gewünscht war, dass „Updates einer Transaktion auf einer Kopie der Datenbasis“ ausgeführt werden. Von welcher Datenbasis liest eine Transaktion während ihrer Ausführung? Aktuelle Datenbasis, Kopie, beides? Nicht für jede Kopie eine Datei auf Platte erstellen! Welche Eigenschaft sollte durch Schattenspeicher eigentlich erreicht werden?  Atomarität (alles oder nichts) Und zwar Atomarität auf zwei Ebenen (Hauptspeicher und Hintergrundspeicher) Wenn am Anfang Kopie der Datenbasis erstellt wird, so müßte eigentlich auf jedes Datum ein READ-Lock geholt werden! Schattenkopien im Hauptspeicher hauptsächlich dazu da, um einfaches Rücksetzen einer Transaktion gewährleisten zu können. Einige haben sogar eine Art Logging implementiert

Häufig gemachte Fehler… Synchronisation von Datenstrukturen vergessen: Datentyp HashMap ist nicht synchronisiert!  Der RM wird von mehreren Threads (evtl. originär von entferntem Rechner) gleichzeitig genutzt! Besser Hashtable oder ConcurrentHashMap benutzen Oder über einen Aufruf von Collections.synchronizedMap(new HashMap<K><V>()) eine threadsafe HashMap erstellen Das Umsetzen des Schattenspeicher-Pointers geschieht nicht atomar, bzw. ist nicht synchronisiert. Zwei Transaktionen versuchen eventuell in die gleiche Datei zu schreiben, so dass es bei einer evtl. Recovery zu Problemen kommt! Welche? (Codebeispiel)

Häufig gemachte Fehler… Synchronisation von Datenstrukturen vergessen: Verwendung des Schlüsselworts volatile bei Variablen wie shutdown, dieAfter/BeforePointerswitch. Warum sinnvoll? Inkrementieren des XID-Zählers muss atomar sein! synchronized-Block schöner: AtomicInteger.incrementAndSet() Es wird explizit beim Aufruf der Methode dieBefore/AfterPointerSwitch ein Flag gesetzt, ob eine Recovery notwendig ist: Die die…()-Methoden sind ja nur zur Simulation von Fehlern gedacht. Die Recovery muss auch funktionieren, wenn ein Fehler nicht angekündigt wird!

Häufig gemachte Fehler… Zustand der Transaktionen wird über einen Systemstart hinweg vergessen: Welche Probleme treten beim Neustart auf, wenn ein Systemabbruch (z.B. durch dieNow) auftrat, während mehrere Transaktionen noch aktiv waren?  Theoretisch könnte der Lockmanager noch Sperren der aktiven Transaktionen halten.  Wie reagiert der RM, wenn ein Klient eine Operation für eine ehemals aktive, dann aber vergessene Transaktion ausführen will?  Eindeutigkeit der XIDs ist nicht mehr gewährleistet, da vergessen wird, welche XIDs bereits vergeben wurden. Der XID-Zählerstand sollte persistiert werden.

Häufig gemachte Fehler… Shutdown-Flag wird zwar gesetzt, aber Shutdown wird nie ausgeführt: Thread in der shutdown()-Methode in einer Schleife schlafenlegen und warten bis keine Transaktion mehr aktiv ist. besser mit Thread.yield() Schöner: Bei jedem Commit/Abort überprüfen, ob gerade die letzte aktive Transaktion fertig geworden ist und dann ggf. System.exit() aufrufen. In einem Fehlerfall (Deadlock, IOException) nicht ein System.exit() aufrufen! Bei erkanntem Deadlock soll die Transaktion zurückgesetzt werden!

Häufig gemachte Fehler… Es wird zu grob-granular gesperrt: Sperre wird über einen Aufruf lock(<xid>,<location>, LockManager.READ) angefordert.  Konsequenz: Komplette Tabelle ist gesperrt.  Und mehr noch: Eventuell sind sogar mehrere Tabellen gesperrt! Einfach auf „<tablename>:<key>“ sperren… Aufwendiges Klonen von Objekten: Wenn shallow-copy ausreichend, dann reicht die Implementierung des Markerinterfaces Cloneable und ein Aufruf von super.clone() in der clone()- Methode. (Codebeispiel) Unterschied shallow-copy / deep-copy?

Projekt: Teil A Schritt 2: Atomarität Gewährleistet durch Schattenspeicherkonzept Führe die Updates einer Transaktion auf einer Kopie der Datenbasis aus z.B. separate Hashtabellen Bei commit:  Bringe Updates in die eigentliche Datenbasis (im Speicher) ein.  Schreibe Datenbasis in separate Datei auf Hintergrundspeicher. (stetiger Wechsel zwischen zwei Dateien)  In atomarem Schritt ändere globalen Zeiger so, dass die neue Datei als aktive Datenbasis markiert ist Bei abort:  Verwerfe die separaten Hashtabellen (im Speicher) Shadowspeicher (Originalliteratur) http://www-depreciated.inf.fu-berlin.de/lehre/WS06/DBS-Tech/Reader/shadowStorage.pdf

Projekt: Teil A Schritt 3: Isolation Implementierung von 2PL (rigoros) mithilfe des Lock Managers für jede Operation auf RM Lese- oder Schreibsperre anfordern bei commit/abort alle Lese-/Schreibsperren aufgeben Granularität der Locks so fein wie möglich für eine Operation maximale Parallelität möglichst keine Table-Locks Lock Manager erkennt Deadlocks durch Timeouts DeadLockException betroffene Transaktion abbrechen (abort)

Projekt: Teil A Schritt 4: Dauerhaftigkeit Persistenz und Recovery Zustand des Resource Managers auf Hintergrundspeicher schreiben: aktive Datenbasis Zustand von Transaktionen (start, commit, abort) XIDs Zeiger auf aktive Datenbasis Recovery, falls RM nicht korrekt heruntergefahren wurde (dieNow(), dieBeforePointerSwitch(), dieAfterPointerSwitch()) Welche Transaktionen waren vor Absturz bekannt? Welchen Zustand hatten diese Transaktionen?

Projekt: Teil A Test-Schnittstelle: shutdown():  warten, bis alle Transaktionen beendet sind  keine neuen zulassen  „korrekten“ Zustand hinterlassen, so dass keine Recovery beim nächsten Start notwendig ist dieNow(): sofortiges System.exit(); dieAfter/BeforePointerSwitch():  setze Flag, so dass System.exit() während der nächsten Commit-Operation aufgerufen wird direkt vor bzw. direkt nach dem Ändern des Zeigers auf aktive Datenbasis