Warum ist die Implementierung einer Fehlerbehandlung in DBMS wichtig?
Datenbasis hat hohen wert für unternehmen -> wichtig dass im Fehlerfall daten wiederhergestellt werden
Fehler lassen sich nie vermeiden, sei es in dem Programm oder in der Hardware oder auch durch umwelteinflüsse bedingte Fehler
Wie werden Fehler klassifiziert?
lokale fehler in noch nicht festgerschriebener TA
Fehler mit Hauptspeicherverlust
Fehler mit Hintergrundspeicherverlust
Was kann lokale Fehler verursachen?
Fehler im Anwendungsprogramm
expliziter abbruch (abort) durch Benutzer
systemgesteuerter abbruch (e.g. deadlock)
Wie werden lokale Fehler behoben?
Local Undo
-> alle Änderungen die die TA an der Datenbasis vorgenommen hat zurücksetzen
-> muss schnell und effizient erfolgen
Wie werden Daten unmittelbar verarbeitet?
Einlagern von Hintergrundspeicher in Hauptspeicher
-> organisiert in Seiten (segmenten)
-> mögliches Auslagern in Hintergrundspeicher
Was für Fehler können einen Hauptspeicherverlust mit sich ziehen?
Beispielsweise ein Stromausfall, da danach der Arbeitsspeicher leer ist
Wie werden Fehler mit Hauptspeicherverlust behandelt?
Muss erfüllen:
alle änderungen durch nicht abgeschlossene TA die schon im Hintergrundspeicher sind rückgängig machen
global undo
alle noch nicht in Hintergrundspeicher übertragenen Änderungen abgeschlossener TA wiederholen
global redo
Was ist nötig für ein globales re- und undo im Falle eines Fehlers mit Hauptspeicherverlust?
Es muss eine Log-Datei vorhanden sein, mithilfe derer man nachvollziehen kann, was man re un was undoen muss
Welchen zeitrahmen hat Fehlerbehandlung mit Hauptspeicherverlust?
Einige Minuten
Was kann Fehler mit Hintergrundspeicherverlust verursachen?
Head Crash
Naturkatastrophe
Fehler in systemprogrammen (bsp. plattentreiber) der zu datenverlust führt
Was ist notwendig, um Fehler mit Hintergrundspeicherverlust zu beheben?
Archivkopie der materialisierten Datenbasis mit zugehörigem Log-Archiv
Wie ist die Speicherhierarchie in einem DBMS aufgebaut?
Pufferspeicher (Hauptspeicher)
Hintergrundspeicher mit materialisierter Datenbasis
Wie viele Seiten benötigt eine Transaktion im Allgemeinen?
Mehrere
Wie kann verhindert werden, dass eine von einer TA benötigte Seite ausgelagert wird?
Durch setzen des FIX flags
Wie wird angezeigt, dass Daten auf einer Seite geändert wurden?
Durch setzen des dirty flags
Wann werden fix vermerke gelöscht?
Nach beendigung einer Operation auf der Seite
Was für Ersetzungsstrategien bestehen im Bezug auf Seiten nicht abgeschlossener TA?
steal
not steal
Was besagt steal und not steal?
Bei der steal strategie dürfen alle nicht fixierten seiten prinzipiell ersetzt werden
Bei der not steal strategie dürfen nur seiten ersetzt werden, die nicht mehr von einer aktiven TA modifiziert werden
Was kann bei der not steal strategie nie vorkommen?
Dass änderungen einer nicht festgeschriebenen TA im Hintergrundspeicher landen
Was für Strategien zum Einbringen von Änderungen existieren?
force
not force
Was besagt die force und not force strategie?
Bei der force strategie werden alle Änderungen einer abgeschlossenen Transaktion nach beenden in den Hintergrundspeicher geschrieben, bei der nor force stragegie muss das nicht sein
Was ist bei der force strategie nicht notwendig?
Man benötigt keine Log dateien für ein Redo, da nach beenden alle änderungen in den Hintergrundspeicher geschrieben werden und so im falle einer Fehlers mit Hauptspeicherverlust keine Daten verloren gehen (im hinblick auf abgeschlossene TA)
Was ist der Vor und Nachteil einer force not steal strategie?
Man muss kein redo machen und es werden keine änderungen noch nicht abgeschlossener TA durch einen steal in den Hintergrundspeicher geschrieben
Dadurch hat man zu keinem Zeitpunkt unvollständige änderungen im Hintergrundspeicher oder fehlende änderungen abgeschlossener Transaktionen im Hintergrundspeicher
Der nachteil ist, dass diese strategie nicht sehr performant ist
Was spricht gegen eine force not steal strategie?
erzwungenes zurückschreiben aller änderungen am ende der TA sehr teuer (alles auf einmal)
falls TA seiten exkulsiv sperren können ist die strategie nicht möglich
Was versteht man unter der Einbringungsstrategie?
Die methodik, nach der Änderungen in den Hintergrundspeicher propagiert werden
->zuordnung von puffer seiten zu hintergrundspeicher seiten
Wie funktioniert die update in place strategie und wie wird sie noch genannt?
jede seite im puffer wird genau einer seite im Hintergrundspeicher zugeordnet
d.H. beim zurückschreiben wird die ursprüngliche seite überschrieben
-> direkte einbringungsstrategie
Was ist ein nachteil der update in place strategie?
Bei einem undo benötigt man zusätzliche log informationen, da die alten daten “verloren” sind
Wie funktioniert die indirekte einbringungsstrategie?
Seiten werden in einen anderen bestimmten Speicherplatz im Hintergrundspeicher zurückgeschrieben und nur zu vordefinierten zeitpunkten in die ursprünglichen speicherplätze übertragen
Wie könnte die indirekte einbringungsstrategie funktionieren und wie wird das genannt?
Man hat je zwei plätze für eine puffer seite
PA0 und PA1
es gbt ein bit das angibt, welche davon das aktuelle datum enthält
-> bei einem fehler kann das system performant die alten (nicht aktuell) daten wiederherstellen
Twin Block verfahren
Was ist ein nachteil des Twin Block verfahrens?
Der Speicherbedarf verdoppelt sich
Wie funktioniert das schattenspeicherkonzept und wird es in der praxis angewandt?
Twin block verfahren in dem nur twinblöcke für modifizierte seiten existieren
-> nachteile deshalb keine anwendung in der praxis
Was für Strategien werden in der Vorlesung angenommen?
update-in--place
kleine sperrgranulate
Was bedeutet kleine sperrgranulate?
Anstatt eine ganze seite zu sperren, können TA auch kleinere Teile davon sperren
->verschiedene TA können daten auf der gleichen seite modifizieren
Wieso benötigt man log-dateien?
Da die materialisierte datenbasis meistens nicht den aktuellen oder nichtmal einen konsistenten zustand enthält
im falle eines fehlers müssen die änderungen nachvollzogen werden können um die konsistenz wieder herzustellen
Wie ist die Struktur der Log-Einträge (was enthalten sie)?
Redo informationen
Undo informationen
Log Sequence Number (LSN)
-> eindeutige kennung des Log eintrags; monoton aufsteigend um eine chronologie zu schaffen
Transaktionskennung TA
-> Kennung der TA die die änderung verursacht hat
PageID
-> identifier der seite auf der daten modifiziert wurden
PrevLSN
-> zeiger auf vorherigen Log eintrag; Effizienzgründe
Was für arten der protokollierung existieren?
logische protokollierung
physische protokollierung
Was ist der unterschied zwischen logischer und physischer protokollierung?
Art, wie redo und undo informationen angegeben werden
logisch: angabe der operationen (bsp. a + 3)
physisch: absolute angabe der daten (a = 4)
Was sind before und after image in der protokollierung?
Der werd vor und nach einer änderung
Wie kann man erkennen, ob das before oder after image in der materialisierten datenbank gespeichert ist?
Bei anlegen eines Log eintrages wird die LSN in der modifizierten seite gespeichert
-> dadurch weiß man, dass falls die LSN auf der seite größer ist, ein after image gespeichert ist
falls sie kleiner ist, ist ein before image gespeichert
(deshalb die chronologische nummerierung der LSN)
Wann werden log einträge angelegt?
VOR ausfühern einer Änderungsoperation
Wo werden log einträge unmittelbar gespeichert?
Im log-puffer im hauptspeicher
Wann muss der log-puffer spätestens in den Hintergrundspeicher geschrieben werden?
Spätestens sobald er voll ist
Wie wird der Log puffer in modernen Datenbankarchitekturen implementiert?
Als ringpuffer
d.H. es wird kontinuierlich auf einer seite zurückgeschrieben wähernd auf er anderen seite die Einträge ersetzt werden können
Was ist ein vorteil eines Log Ringpuffers?
Man muss nicht alle einträge auf einmal zurückschrieben,
Durch kontinuierliches Zurückschreiben geschieht dies um einigers performanter (gleichmäßige auslastung)
Wohin werden Log einträge aus dem puffer ausgeschrieben?
Auf das temporäre log im hintergrundpeicher und in das log archiv
-> temp. online/plattenspeicher
-> archiv: magnetband (Im falle des verlusts des Hintergrundspeichers)
Was besagt das WAL prinzip?
Write ahead log
Prinzip, wie mit log einträgen umgegangen wird
Wann benötigt man das WAL prinzip?
In besonderem maße bei einer steal nor force strategie wie wir sie in der VL behandeln
Welche regeln beschreibt das WAL prinzip?
Vor commit einer TA müssen die log einträge zurückgeschrieben werden
vor auslagern einer modifizierten seite müssen alle log einträge zurückgeschrieben werden die zu dieser seite gehören
Mit welchen Fehlerbehandlungen korrespondieren die WAL regeln?
Ausschreiben vor commit -> benötigt für redo informationen da TA abgeschlossen
Ausschreiben vor zurückschreiben einer modifizierten seite -> benötigt für undo, da informationen nicht abgeschlossener TA in die materialiseirte Datenbasis übernommen worden sein können
Welche TA müssen bei einem Wiederanlauf nach einem Fehler unterschieden werden?
Schauen nach allen TA, die vor dem Fehler abgeschlossen waren (winner) -> müssen nachvollzogen (redo) werden
Schauen nach allen TA, die während dem Fehler noch nicht abgeschlossen waren (loser) -> müssen rückgängig gemacht werden
Aus welchen Phasen besteht der fehlerbedingte wiederanlauf?
Analyse (winner und loser ermitteln)
Wiederholung der Historie: Alle protokollierten änderungen in der reihenfolge der ausführung in die datenbasis einbringen
Undo der loser: rückgängigmachen aller protokollierten änderungen der loser in UMGEKEHRTER reihenfolge
Wie können winner und loser TA in der log datei unterschieden werden?
BOT als beginn aller TA
-> falls ein commit vorhanden, dann winner; sonst loser
Nenne die Ablaufschritte der Redophase
Durchlaufen des Logs
Jeweils einlagern der Page nach ID in Puffer
Falls seiten LSN größer als Log eintrag, nichts machen
Falls LSN auf page kleiner als Log eintrag, Redo operation ausführen
LSN auf Page durch LSN in Log-eintrag ersetzen
Warum ist es wichtig, die LSN auf der Page bei der Redo phase nach einer Redo operation zu aktualisieren?
Im falle eines erneuten fehlers muss man diesen Redo nicht erneut ausführen (falls zurückgeschrieben)
Nenne die Schritte der Undo phase
Log datei rückwärts durchgehen
Übergehen der Log einträge der winner Transaktionen
Undo operationen aller loser TA durchführen; egal welche LSN darauf steht
Erstellen der Kompensationseinträge
Was muss man zusätzlich hinsichtlich der Fehlertoleranz des Wiederanlaufs beachten?
Man muss mit erneuten Fehlern während einem Wiederanlauf umgehen können
Was muss für die Fehlertoleranz des Wiederanlaufs gewährleistet sein?
Die Idempodenz der redo und undo operationen
-> mehrmaliges redo oder undo führt zu gleichem Ergebnis
Wie wird die Idempotenz der Redo phase gewährleistet?
Durch eintragen der aktuellen LSN in der Page kann man bei erneutem Fehler einfach dort weitermachen, wo man zuvor aufgehört hat
Wie wird die Idempotenz der Undo phase gewährleistet?
Durch sogenannte Kompensations-Protokolleinträge CLR (Compensation Log Record)
Welche Informationen enthält ein CLR?
LSN
Transaktions-ID
Page-ID
Redo Information
UndoNxtLSN
Wie funktionieren CLR?
Nach einem Undo fügt man einen CLR zu den Logeinträgen hinzu
Der CLR enthält als redo die undo information
DIe LSN des CLR wird bei zurückschreiben einer undo änderung in die Seite geschrieben
Damit wird sichergestellt, dass die undo änderung nicht erneut im redo ausgeführt wird, falls sie in die materialisierte Datenbasis eingebracht wurde
Und falls sie nicht in die materialisierte Datenbasis eingebracht wurde, wird der CLR ausgeführt
Bei der Undo phase wird sich die UndoNextLSN der jeweiligen letzen CLR einer TA angeschaut und dann dort mit dem Undo fortgefahren
Falls UndoNextLSN 0 ist, weiß man, dass die TA vollständig zurückgesetzt wurde
Was wird nach einer Undo operation gemacht?
CLR erzeugen
LSN des CLR in Page in materialisierter Datenbasis schreiben
UndoNxtLSN auf vorherige LSN setzen
Wie kann man TA lokal zurücksetze?
Indem man die Log-Einträge rückwärts durchläuft und undo operationen ausführt
Für jede Unto operaiton wird ein CLR erstellt
Auf welchen Log-Eintrag zeigt die PrevLSN?
Auf den nächsten vorausgegangenen Log-Eintrag DER GLEICHEN TRANSAKTION
Wieso können lokale TA effizient zurückgesetzt werden?
Da meistens die Log Einträge aktiver TA noch im Log Puffer vorhanden sind
Was muss zusätzlich beim lokalen rollback (lokales zurücksetzten einer TA) beachtet werden?
Die sperren dieser TA auf einer seite müssen aufgegeben werden
Wie können TA partiell zurückgesetzt werden?
Normales Undo mit CLR bis zu dem Punkt an den man zurücksetzen möchte
Was ist ein nachteil der bisher diskutierten Wiederanlaufmöglichkeit?
Je länger die Log-Einträge werden (je länger die Betriebszeit), desto langwieriger ist der WIederanlauf!
Wie kann man den Nachteil eines Langwierigen Wiederanlaufs nach einem Fehler beheben?
Mit sog. Sicherungspunkten
Was sind sicherungspunkte im Hinblick auf den Wiederanlauf?
Sicherungspunkte sind eine Markierung im Log, über die man beim Wiederanlauf nicht hinaus gehen muss
!!bei einigen Sicherungspunkten (arten) muss man aber auch ältere Log Einträge beachten!!
Was für Arten von Sicherungspunkten existieren?
(globale) Transaktionskonsistente Sicherungspunkte
aktionskonsistente Sicherungspunkte
unscharfe (fuzzy) Sicherungspunkte
Was sind Transaktionskonsistente Sicherungspunkte?
Sicherungspunkte an denen sichergestellt wird, dass
die materialisierte Datenbasis in einem Konsistenten zustand ist
keine Informaitonen nicht abgeschlossener Transaktionen enthält
alle abgeschlossenen Transaktionen zurückgeschrieben wurden
Wie werden Transaktionskonsistente Sicherungspunkte erstellt?
Transaktionskonsistente Sicherung anmelden (z.B. zu bestimmten Zeitpunkten)
DBMS in “Ruhezustand” überführen
Alle neu ankommenden TA müssen warten
Laufende TA abschließen
alle modifizierten Seiten zurückschreiben
Log-Datei von neuem beginnen (Sicherungspunkt erstellen)
Was ist ein Nachteil der Transaktionskonsistenten Sicherungspunkte?
Sehr Zeitaufwändig, da das DBMS in ruhezustand und TA warten / alle seiten Zurückgeschrieben werden
-> nur in ausnahmefällen z.B. am Wochenende
Was sind Aktionskonsistente Sicherungspunkte?
Sie stellen sicher, dass alle aktuellen Änderungsoperationen abgeschlossen und zurück geschrieben worden sind
Was ist ein Vorteil der Aktionskonsistenten Sicherungspunkte ggü den TA konsistenten?
Bis zum Sicherungspunkt wird gesichert, dass alle Änderungen in die materilaisierte Datenbasis übernommen worden
-> erst ab dem Punkt mit redo phase beginnen
Was ist wichtig im hinblick auf die Undo phase aktionskonsistenter Sicherungspunkte?
Die Undophase geht über den Sicherungspunkt hinaus, da änderungen nicht abgeschlossener TA in die materialisierte Datenbasis übernommen worden sein können
Wie wird in aktionskonsistenten Sicherungspunkten protokolliert, bis zu welchem punkt man in der Undo phase gehen muss?
Man ermittelt die kleinste LSN der aktuell aktiven Transaktionen. Damit ist sichergestellt, das alle vorherigen log-einträge zu abgeschlossenen TA gehören und somit konsistent in der Materialisierten Datenbasis vorliegen
-> bez. MinLSN
Was ist generell zu beachten beim erstellen von Sicherungspunkten?
Nach dem WAL prinzip muss vor jedem Zurückschreiben des Puffers zuerst der Log Puffer zurückgeschrieben werden
Was wird neben der MinLSN noch bei einem Aktionskonsistenten Sicheungspunkt angelegt?
Eine Liste aller aktiven TA
Wieso wird bei einem Aktionskonsistenten Sicherungspunkt eine liste aller aktiven TA angelegt?
Das benötigt man, um die Loser in der Analyse phase festzustellen, da das BOT der aktiven TA vor dem Sicherungspunkt liegt
-> vergleichen für welche aktiven TA (in der Liste) ein commit und für welche keiner vorliegt!!!
Was sind unscharfe (fuzzy) Sicherungspunkte?
Anstatt modifizierte seiten auszuschreiben, markiert man alle aktuell modifizierten, nicht ausgeschriebenen seiten als Dirty Page. Damit fuzzy sicherungspunkte funktionieren, muss man sich noch die minimale LSN aller noch nicht ausgeschriebenen Seiten im Puffer merken. Das ist die MinDirtyLSN
Die MinDirtyLSN bildet den Punkt, an dem die Redo-Phase beginnt
Die Undophase wird wie bei Aktionskonsistenten Sicherungspunkten bis zur MinLSN (aktuell kleinste LSN der aktiven TA) durchgeführt
Dadurch dass man die kleinste LSN der dirty pages weiß, muss man von anlauf redo bis zum tatsächlichen sicherungspunkt nur die Redo Informationen von Dirty Pages ausführen
-> dirty pages noch nicht sicher zurückgeschrieben und deshalb redo; falls ziwschenzeitlich zurückgeschrieben, LSN auf page größer
-> andere zwischen MinDirtyLSN und sicherungspunkt nicht nötig, da Änderungen für die nicht dirty log einträge bereits zurückgeschrieben wurden
Was ist ein vorteil der fuzzy sicherungspunkte?
Man muss nicht die gesamten Log Einträge auf einmal ausschreiben, wie dies bei den Aktionskonsistenten Sicherungspunkten der Fall wäre
Was kann die Performanz von Fuzzy Sicherungspunkten verschlechtern?
Falls es einige sog. Hot Spot seiten im Puffer gibt die ständig benötigt werden und somit selten ausgeschrieben werden. Dadruch bleiben diese die MinDirtyPageLSN und bedingen so eine lange Redo phase.
Wie kann das Problem der Hot Spot seiten von fuzzy sicherungspunkten vermieden werden?
Indem das system sicherstellt, dass im folgenden fuzzy sicherungspunkt alle dirty seiten, die seit dem letzen fuzzy sicherungspuntk nicht ausgeschrieben wurden, ausgeschrieben werden
Was für 2 wege gibt es zur wiederherstellung der Datenbank?
Intakte materialisierte Datenbasis (Hintergrundspeicher) -> materialisierte Datenbasis + temp. Log Datei
Hintergrundspeicher kaputt -> Datenbasis Archiv + Log Archiv
Last changed2 years ago