30 likes | 111 Vues
Wiederanlauf nach Systemzusammenbruch. Aufgabe : Bei Noforce -Strategie Wiederholung aller noch nicht in die Datenbasis eingebrachten Änderungen bereits abgeschlossener Transaktionen. Bemerkungen :
E N D
Wiederanlauf nach Systemzusammenbruch • Aufgabe: Bei Noforce-Strategie Wiederholung aller noch nicht in die Datenbasis eingebrachten Änderungen bereits abgeschlossener Transaktionen. • Bemerkungen: • Bei Force-Strategie sind alle Änderungen festgeschriebener Transaktionen bereits eingebracht, daher Wiederholung unnötig. • Bei Noforce-Strategie reicht es, Wiederanlauf im Puffer durchzuführen und Propagation auf Hintergrundspeicher der normalen Seitenverdrängung zu überlassen.
Wiederholverfahren (1) • Praktische Lösung: • Verwalte Zeiger RLWM („redo low water mark“) auf bot-Satz für älteste festgeschriebene Transaktion, deren Änderungen noch nicht in persistente Datenbasis eingebracht wurden. • Spiele redo-Sätze, für die eot-Sätze vorliegen, ab Position RLWM wieder ein. • Da Datenbasis nicht gelöscht wurde, müssen außerdem Änderungen aller nicht abgeschlossenen Transaktionen rückgängig gemacht werden. • Verwalte dazu Zeiger ULWM („undo low water mark“) auf bot-Satz für älteste noch nicht abgeschlossene Transaktion. • Wende Rücksetzalgorithmus auf undo-Sätze ab Position ULWM an. • Lösche Protokoll-Einträge vor min(RLWM,ULWM) periodisch.
Wiederholverfahren (2) • Rücksetzen und Wiederholen lässt sich mit einem einzigen Durchlauf durch Protokolldatei erledigen: • Arbeite Protokoll rückwärts vom Ende bis min(RLWM,ULWM) ab. • Für jeden Eintrag undo(Ti,x,v), für den kein eot(Ti)-Satz vorliegt: • Lese x in Puffer ein. • Setze x auf v. • Merke Protokoll-Eintrag redo(Ti,x,v) vor. • Für jeden Eintrag redo(Ti,x,v), für den ein eot(Ti)-Satz vorliegt und für den Datenelement x bisher noch nicht geschrieben wurde: • Lese x in Puffer ein. • Setze x auf v. • Nach Ende des Durchlaufs schreibe alle vorgemerkten redo(Ti,x,v)-Sätze sowie alle fehlenden eot(Ti)-Sätze ins Protokoll.