WIE wird innerhalb der ´normalen´ Baumverarbeitung erkannt, daß Operationsabbruch aufgetreten und Baum inkonsistent ist? • Bsp.: Suche nach Einträgen N,O,P führt fälschlicherweise in Block4 → Meldung „Einträge existieren nicht“ Beim Abstieg von Block i (hier:7) über Verweis Pj (hier:2) zu Block k (hier:4) wird geprüft, ob NEXT(k)=Pj+1 (hier:9≠5) Inkonsistenzen? erkannt (falls Pj+1 ex.) c) Einfügung von „O“ abgeschlossen, Einfügung von „E“ nach Schritt 5 8 ∞ I 6 B P1 B A 1 7 LNQ ∞ I P2 C 2 D EG 10 L K 3 N M 4 OP 9 Q SUV ∞ 5 • Bsp.: Suche nach Einträgen D, E, G: Verweis Pj+1 existiert in Block i nicht. Prüfung deshalb, ob NEXT(k) = NEPHEW(i) (hier: 10 ≠ 3) Inkonsistenz erkannt Fehlertoleranz 01.06.2006 44 Fehlerbehandlung in B`-Bäumen • Ausgangspunkt: Beim Abstieg von Block i auf Baumebene e zu Block k auf Ebene e-1 wird Inkonsistenz festgestellt: laufende Operation wird zunächst angehalten; es folgt die Fehlerbehandlung Einfügealgorithmus wird gestartet in Schritt 2: Einfügen von MEDIAN(k) in Block i und zu Ende geführt Suspendierte Operation wird dann (auf nun konsistenten Baum!) fortgesetzt Abschließende Bemerkungen zum B`-Baum • Kein besonderes Reparaturverfahren, sondern Nutzung des normalen Einfügealgorithmus: Vorteil insbesondere, wenn Operationsabbruch bei Reparaturdurchführung • Hier nicht betrachtet: - Wartung der Redundanzen - Löschalgorithmus 1 Originalliteratur Fehlertoleranz 01.06.2006 45 2. Erkennung/Behandlung „beliebiger“ Verfälschungen Begriffe: • Elementare Änderung ("Elementary Modifikation"): Änderung eines einzelnen, atomaren Elements einer Speicherungsstruktur (etwa ein Schlüsselwert, ein Verweis, ein Zähler …) • Eine Speicherungsstruktur heißt "n-detectable", wenn es stets möglich ist, bei bis zu n beliebigen inkorrekten atomaren Elementen die Inkonsistenz zu erkennen • . . . "n-correctable", … die Konsistenz (automatisch) wiederherzustellen Detectability und Correctability sind somit wichtige Maße zur Bewertung der Fehlertoleranzeigenschaften einer Speicherungsstruktur. Fehlertoleranz 01.06.2006 46 Einige fehlertolerante Listenimplementierungen und deren "detectability" und "correctability" "detectability" Kopf Listenelemente 1 2 "correctability" 3 0 ● 0 Zähler Identifikator 1 Fehlertoleranz ID ID ID 0 ID ID ID 1 ID ID ID 1 3 2 3 3 ID ID I II 3 ID ID 01.06.2006 47 in Praxis nicht 100%ig realisierbar Betrachtungen der Listenimplementierungen im Einzelnen 0: Setze beliebigen NEXT-Verweis fälschlicherweise auf NIL: nicht zu erkennen, nicht zu korrigieren 1: ID für alle Listenelemente gleich Annahme: Tritt in keinem anderen über Verweise erreichbaren Element (z.B. in einer anderen Liste) auf; d.h. z.B. jede Liste besitzt eigene, eindeutige ID • Nachweis der "1-detectability" durch Fallunterscheidung (Hausaufgabe!) • Nicht "2-detectable": Z.B. Zähler im Listenkopf um 1 dekrementieren und NEXT-Verweis vom vorletzten Listenelement zum Listenkopf „zurückbiegen“ → nicht zu erkennen • Nicht "1-correctable„: Z.B. kann ein inkorrekter NEXT-Verweis zum irreparablen Abtrennen von Kettenteilen führen • „Geschlossenheit“ der Kette für „detectability“ und „correctability“ ohne Bedeutung: NIL-Verweis am Ende wäre ebenfalls als Vereinbarung möglich Fehlertoleranz 01.06.2006 48 2: Doppelt verkettete Liste (NEXT- und PRIOR-Verweise) • „Detectability“- und „correctability“-Nachweis wie zuvor; offensichtlich: Listenelemente auf zwei unterschiedlichen Wegen erreichbar → ein inkorrekter Verweis kann nicht mehr zum Abtrennen von Kettenteilen führen ! • NICHT „3-detectable“: 2 Verweisänderungen plus Zähler um 1 dekrementieren → nicht erkennbar Element nicht erkennbar ausgekoppelt • NICHT „2-correctable“: 2 Verweisänderungen koppeln Kettenteile irreparabel aus 3: Ebenfalls doppelte Verkettung, aber PRIOR-Verweis zeigt auf Vorvorgänger • Zweigeteilter Listenkopf erforderlich (sonst könnte etwa Liste der Länge 1 durch 2 Änderungen unbemerkt in Liste der Länge 0 verwandelt werden) → Hausaufgabe Fehlertoleranz 01.06.2006 49 • Implementierung und Fehlererkennungsalgorithmen etwas trickreich • Angelegenheit etwas exotisch Zu den Verarbeitungskosten atom. Element • Betrachte Einfügung eines neuen Listenelements • Jede Änderung/Wertzuweisung für einen Verweis / Zähler / Identifikator trage mit 1 zu den Gesamtkosten bei (elementare Änderung nach obiger Definition) → für Datenbanksysteme ungeeignetes Kostenmaß Verarbeitungskosten 7 6 5 2 Verweise + Zähler + ID 4 3 2 Verweise 2 1 0 Fehlertoleranz 0 1 2 01.06.2006 3 Implementierung 50 Der "Chained and Threaded B-tree" (CTB-Baum) Kopf ID 8 "chain pointer" DOWN-Verweis ID ID ID ID ID ID ID ID "thread pointer" Legende: ID "chain pointer" Identifkator Fehlertoleranz 01.06.2006 51 Eigenschaften des CTB-Baums • Separater Knoten („Kopf“) mit ID und Zähler: Anzahl der Knoten im Baum • NEXT-Verweise auf Blattebene unter Einbeziehung des Kopfs → geschlossene Kette • THREAD-Verweise auf Blattebene: „The thread pointer in a leaf is non-null if and only if that leaf is the rightmost leaf in the leftmost subtree of a node X, in which case the thread points to X.“ inneren Knoten ! Konsequenz: Auf jeden Nicht-Blattknoten im CTB-Baum zeigt genau ein TREAD-Verweis • Für CTB-Baum kann „2-detectability“ und „1-correctability“ nachgewiesen werden • „2-detectability“ nur, wenn Fehlererkennungsalgorithmus den Baum vollständig durchläuft → als „online“-Prüfung durch das DBVS somit nicht geeignet Fehlertoleranz 01.06.2006 52 Der "Robust Contiguous List Storage" (RCLS) a) Modell zum Listenformat Zähler K1 K2 K3 K4 K5 5 7 2 15 0 6 9 7 8 l-1 l … Kopf Freiplatz b) Beispiel für einen RCLS Zähler K0 D0 K1 D1 K2 D2 K3 D3 K4 D4 K5 D5 F1 F2 F3 F4 F5 F6 F7 F8 5 2 5 7 11 2 13 15 1 0 9 9 9 7 Kopf 7 7 7 7 7 7 7 Freiplatz (markiert) c) Beispiel zur falschen Festlegung der Füllwerts 6 0 Zähler K0 D0 K1 D1 K2 D2 K3 D3 K4 D4 K5 D5 F1 F2 F3 F4 F5 F6 F7 F8 5 2 5 7 11 2 13 15 1 0 9 Kopf Fehlertoleranz 9 9 2 2 2 2 2 2 2 2 Freiplatz (markiert) 01.06.2006 53 Eigenschaften den RCLS M = größter darstellbarer Schlüsselwert Einträgen • Für fortlaufende, lückenlose Speicherung von Listenelementen • Speicherbereich fester Länge, Einträge (Schlüssel) ebenfalls fester Länge • Fehlerhafte Werte können auftreten im Zähler oder in den Schlüsseln Ki (etwa eine Schlüsselvertauschung Ki Kj gilt auch als Fehler) • Ziel: „2-detectability“ und „1-correctability“ • Hinter jedem Schlüssel Ki (1 ≤ i ≤ Zähler) wird eine Distanz Di eingefügt, zusätzlich Listenkopf mit K0/D0 (K0 beliebig) i<Zähler Ki+1≥Ki Di:=Ki+1-Ki Fehlertoleranz i=Zähler Ki+1<Ki Di:=Ki+1-Ki +M+1 01.06.2006 K0≥Ki Di:=K0-Ki K0<Ki Di:=K0-Ki +M+1 54 • Freiplatz zwischen aktuellem Listenende und Ende des Speicherbereichs wird mit Füllwerten F versehen: 7 • • • • 2 F:= a+b∗K0 mit - b≠0 & - (2∗b-1) kein Teiler von a & - b kein Teiler von a & - (b-1) kein Teiler von a Konsistenzprüfung bei der (sequentiellen) Suche nach einem vorgegebenen Schlüsselwert K: if i<Zähler then (Ki+Di) mod (M+1) = Ki+1 else (Ki+Di) mod (M+1) = K0 Im Beispiel oben: - K0=2 - a=1, b=3 ⇒ F=7 Wahl des Füllwerts F ist wesentlich für „detectability“ (siehe Beispiel c oben) Problem beim RCLS: Speicherplatzmehrbedarf durch Mitführen der Distanzen Di 1 kann fast 100% betragen! Fehlertoleranz 01.06.2006 55 II. Fehlerklassifikation für Verletzungen der physischen Integrität einer Datenbank Fehlerklassen Lesen und Schreiben unmöglich Schreiben möglich Lesen unmöglich Plattendefekt Slotdefekt Blockdefekt Lesen möglich falscher Block richtiger Block Blockzuordungsfehler Blockinhaltsfehler Seiteninhaltsfehler E/A-bezogene Fehler Fehlertoleranz 01.06.2006 56 Einige Erläuterungen zur Fehlerklassifikation • Plattendefekt: Eine Magnetplatte ist insgesamt nicht mehr zugreifbar; die auf ihr gespeicherten Daten sind verloren: "head crash", manuelle Beschädigung o.ä. • Slotdefekt: (Slots nehmen Blöcke auf der Magnetplatte auf.) Ein Slotdefekt macht nur einen Teil einer Magnetplatte unbrauchbar: Staubablagerungen, Kratzer … • Blockdefekt: Die Magnetplatte ist physisch intakt. Aufgrund etwa von "umgekippten" Bits kann ein Block / können Blöcke nicht mehr von der Platte gelesen werden (autom. Korrektur scheitert). Überschreiben des Blocks / der Blöcke ist jedoch möglich. • Blockzuordnungsfehler: Block i auf der Platte wurde versehentlich von einem anderen Block j überschrieben: Adressierungsfehler im Kanal o.ä. Fehlertoleranz 01.06.2006 57 • Blockinhaltsfehler: Inhalt eines Datenblocks hat sich zwischen einer Schreib- und der nachfolgenden Leseoperation verändert („umgekippte“ Bits): dem DBVS wird ein inkorrekter Blockinhalt beim Lesen übergeben (sofern der Fehler nicht „unterhalb“ des DBVS – Geräte-/Kanalebene(, Betriebssystem) – erkannt wird und dies wird er höchstwahrscheinlich). • Seiteninhaltsfehler: stehen in keinem unmittelbaren Zusammenhang mit E/A-Operationen (im Gegensatz zu den o.g. Fehlerklassen): Seiteninhalt wird im Systempuffer des DBVS durch unzulässige (etwa „wild store“) oder fehlerhafte (algorith. Defekt im DBVS etc.) Modifikationen verfälscht. Fehlertoleranz 01.06.2006 58 III. Verfahren zur Fehlererkennung: Betrachtung entlang des Schichtenmodells • Ziel: Fehlererkennung möglichst weit unten im Schichtenmodell ansiedeln mit dem Ziel einer möglichst frühen Fehlererkennung, aber: - Klare Struktur mit Trennung der Aufgabenbereiche im DBVS beachten (Schichten) und nicht durch Fehlererkennungsmaßnahmen mit falscher Platzierung aufweichen, - Laufzeiteffizienz (Performance) beachten: keine mehrfache Interpretation/Analyse gleicher Daten auf verschiedenen Ebenen (z.B. im Pufferverwalter und dann nochmals im Record Manager) → viel zu teuer! Fehlertoleranz 01.06.2006 59 1. Fehlererkennung durch die Hardware und das Betriebssystem • Plattendefekte: - physische Zerstörung der Platte: Erkennung durch Plattensteuerung - Logische Zerstörung von Platteninhalten (Platteninhaltsverzeichnis (Volume Table of Contents, VTOC), Dateiverwaltungstabellen (Extent-Tabellen)): Erkennung durch Datenverwaltungssystem im Betriebssystem • Slotdefekte: Wie bei Plattendefekten (phys. Zerstörung) • Blockdefekte: Fehlererkennung in Plattensteuerung/Kanal möglich sowie – beschränkt – Fehlerbehandlung: durch Verwendung von Blockprüfinformation (etwa gleiches Prinzip wie Prüfziffer", nur ausgefeiltere Technik und umfangreichere redundante Information; z.B. 56 Bytes pro Block) Fehlertoleranz 01.06.2006 60 Ebenso: Bestimmte Arten (Ursachen) von Blockzuordnungsfehlern, da Blockmummer redundant auf der Platte abgelegt wird ≈ 2-4 KB und mehr ≈ 60 Byte Blocknummer i Blockprüfinformation eigentlichen Daten Block i auf Platte (inkl. Redundanzen) 2. Fehlererkennung durch den Pufferverwalter im DBVS • Stellt seitenorientierten linearen Adressraum bereit • Was kann/soll erkannt werden? Versehentliches Überschreiben der Seitengrenze bei Manipulation in Seite, etwa Einfügen eines neuen Satzes Idee: Schutzzonen im Systempuffer des DBVS . . . der Seite Seite h i j k Seite i Seite j Seite k ... festes Bitmuster Fehlertoleranz 4 Byte Systempuffer 4 Byte 01.06.2006 Seite l ... 61 Systempuffer Satz1 Seite i Satz2 Satz1 1 Freiplatz Seite j Satz4 Seite i Satz3 Satz4 ohne Schutzzonen Seite k INSERT Satz2 Seite j Satz3 Seite k • Teile des Inhalts von Seite k wurden unbemerkt überschrieben/zerstört durch Satz 3 in Seite j • Schutzzonen hätten (mit sehr hoher Wahrscheinlichkeit) zur Fehlererkennung geführt Allgemein: • Etwa 4 Bytes lange Schutzzonen (fast) beliebigen (zufällig bestimmten) Inhalts; Ws., dass Überschreiben der Seitengrenze nicht erkannt wird: 2-32 • Wann wird Unversehrtheit der Schutzzonen einer Seite überprüft? - BEREITSTELLEN Seite - FREIGEBEN Seite - RÜCKSCHREIBEN Seite Fehlertoleranz 01.06.2006 62 Record-Manager, Zugriffspfadverwaltung Fix-Phase Fix-Phase lesender Zugriff ändernder Zugriff BEREITSTELLEN Seite i, lesen FREIGEBEN Seite i BEREITSTELLEN Seite i, ändern FREIGEBEN Seite i Prüfung der Schutzzonen Prüfung der Schutzzonen Unifix-Phase Unifix-Phase Prüfung der Schutzzonen Pufferverwalter LIES Block k Systempufferschnittstelle SCHREIBE Block k DVS Dateischnittstelle Zeit t t1 Fehlertoleranz t2 t3 01.06.2006 t4 t5 63 Schutz von Seiten im Systempuffer gegen unbeabsichtiges Modifizieren („Schüsse von oben“) • Schutzzonen nur gegen „Schüsse von der Seite“ tauglich • Welche Seiten könnte man gegen unbeabsichtigtes Modifizieren schützen? - Seiten, die sich in der Unfix-Phase befinden - Seiten, die sich in der Fix-Phase für lesenden Zugriff befinden • Wie? BS-Aufruf - Supervisor Call (SVC), um Seite im (virtuellen) Speicher für „read only“ zu erklären - Seitenprüfinformation à la Blockprüfinformation (erfordert keinen BS-Aufruf) alles teuer (CPU-Zeit)! Fehlertoleranz 01.06.2006 64 Weitere Prüfmöglichkeiten auf der Ebene des Pufferverwalters • Seitenidentifikatoren Seitennummer wird redundant im Seitenkopf mitgeführt (wird nicht zur Seitenadressierung benötigt, nur zur Fehlererkennung) • Seitentypindikatoren Seitentyp wird (redundant) im Seitenkopf mitgeführt ? hängt ab von DBVS-Implementierung Mögliche Seitentypen: - FPA: Free Place Administration; Freiplatzverwaltung → am Beginn des DB-Segm. - DBTT: Data Base Key Translation Table; Satzadressierungstabelle (vor allem bei Netzwerk-Datenbanksystemen) - HASH: Buckets einer Hashtabelle - TREE: Knoten eines B- oder B*-Baums - DATA: Seiten (Behälter) für sonstige Datensätze - EMPTY: leere Seite - etc. Fehlertoleranz 01.06.2006 65