Frage:

Wir haben Probleme mit unserem Zeitfenster für die Sicherung und überlegen, ob wir im aktiven Zustand sichern sollen. Sind da Probleme zu erwarten?

Antwort:

Die OS/400-Befehle SAVLIB, SAVOBJ, SAVCHGOBJ, SAVDLO und SAV haben einen Parameter SAVACT, mit dem die Sicherung während der Benutzung gesteuert werden kann. Dieser Parameter hat als Unterlassungswert *NO hinterlegt, was zur Folge hat, dass Objekte nicht gesichert werden können, während sie anderweitig benutzt werden.

Die klassische Sicherungsstrategie beendet nun im Nachtjob alle Benutzeraktivitäten für die Dauer der Sicherung und startet anschließend die Verarbeitung neu. Vorteil dieser Lösung ist ein einfacher Ablauf bei einer erforderlich werdenden Komplett-Wiederherstellung, alle Objekte haben einen passenden Stand und sind synchronisiert. Nachteilig ist, dass die Verarbeitung für die Dauer der Sicherung angehalten werden muss – oft für Stunden.

Über den Parameter SAVACT kann man nun die beiden Anforderungen „einfache Wiederherstellung und Verfügbarkeit“ optimieren, wenn kein echter 24/7-Betrieb gefordert ist, sogar ohne Einschränkungen für die Wiederherstellung.

Die einfachste Vorgehensweise besteht nun darin, wie bisher alle Aktivitäten zu beenden, indem man die interaktiven Subsysteme, die Batch-Aktivitäten und die Serverjobs herunter fährt. Für eine nächtliche Komplettsicherung der Benutzerdaten verwendet man nun im Parameter SAVACT den Wert *SYNCLIB. Sobald die Nachricht CPI3712 (Prüfpunktverarbeitung für das Sichern im aktiven Zustand abgeschlossen) an den Sicherungsjob gesendet wird, kann die Verarbeitung bereits wieder gestartet werden. Diese Meldung wird gesendet, bevor tatsächlich auf Band gesichert wird; die Unterbrechung der übrigen Verarbeitung liegt lediglich im Minutenbereich. Während der eigentlichen Sicherung kann bereits wieder mit den Objekten gearbeitet werden, gesichert wird der Stand direkt vor dem Senden von CPI3712. Das System hält sich dafür alle geänderten Speicherseiten vorübergehend zusätzlich bereit, was Platz und etwas Performance kostet.

Um diesen Ablauf zu automatisieren und in den Sicherungsjob einzubauen, legt man sich eine MSGQ SAVACT (oder als anderen Namen) an und verwendet für einen SAVLIB-Befehl folgende Parameter: SAVLIB LIB(*ALLUSR) DEV(TAP01) SAVACT(*SYNCLIB) SAVACTMSGQ(SAVACT). Die Angabe der Nachrichtenwarteschlange sorgt dafür, dass die Nachrichten des Sicherungsjobs auch an diese Nachrichtenwarteschlange gehen, wo man sie von einem Programm verarbeiten lassen kann.

Vor dem SAVLIB-Befehl baut man in das CL-Programm mit der Sicherung noch den CL-Befehl CHGMSGQ MSGQ(SAVACT) DLVRY(*BREAK) SEV(00) PGM(SAVACT) ein, der dafür sorgt, dass bei jeder Nachricht, die in diese Warteschlange gesendet wird, das Message Handler-Programm SAVACT aufgerufen wird.

Dieses Programm bekommt als Parameter den Namen der Warteschlange, die die Bibliothek und einen Schlüsselwert übergibt, mit dem die Nachricht selber identifiziert wird. Das Programm holt sich lediglich die Nachrichten-ID und prüft, ob die Nachricht CPI3712 gesendet wurde. Auf diese Nachricht reagiert dann das Programm und startet die Verarbeitung wieder. In dem kleinen Beispiel ist dies durch den Aufruf des Programms myRestart angedeutet.

Mit der soeben besprochenen Vorgehensweise trägt die Sicherung im aktiven Zustand sogar zur Vereinfachung der Wiederherstellung bei. Alle Objekte werden mit dem genau gleichen Stand gesichert und die Unterbrechung der Verarbeitung ist minimal – zumindest im Vergleich zur klassischen Vorgehensweise.

Eine unterbrechungsfreie Verarbeitung geht mit dieser Strategie im Allgemeinen nicht, da das System für die Synchronisierung Objektsperren setzt. Für die Komplett-Synchronisation (Parameterwert *SYNCLIB) wirkt sich konkurrierende Verarbeitung störend aus. Echter 24/7-Betrieb erfordert Reduzierung oder gar Verzicht auf Synchronisation. Dann werden die Wiederherstellungsabläufe komplex und sind ohne Journalisierung nicht mehr durchführbar. Eine Sicherung während der Durchführung von Fortschreibe-Operationen ist zudem nur durchführbar, wenn keine länger andauernden Satzsperren auftreten können. Bei der Verwendung von Save while active ist also in der Tat Vorsicht geboten; bei richtiger Anwendung aber wird es in der Mehrzahl der Fälle sogar einfacher als mit der klassischen Vorgehensweise.

Den Autor Dieter Bender erreichen Sie unter dieter.bender@midrangemagazin.de