Aus den gesicherten Guardinformationen werden Prozedurkommandos abgeleitet und in eine vom Anwender festgelegte Prozedurdatei geschrieben. Diese Prozedurdatei hat das Dateiformat SAM und kann mit einem Texteditor, z.B. EDT, modifiziert werden.
Die Prozedur enthält in Form von Kommentarzeilen dieselben Informationen wie ein GUARDS-SAVE-Protokoll: die Kopf- und Fußzeilen, die Rahmenbedingungen und (am Prozedurende) eine zusammenfassende Liste mit den Namen aller durch die Prozedur restaurierten Guards.
Die Prozedur ist so strukturiert, dass die Guards in alphabetischer Reihenfolge restauriert werden. Vor den Kommandos zum Restaurieren eines Guards werden in Form von PProzedurkommentaren folgende Informationen eingetragen:
der Pfadname, wie er aus der Sicherungsdatei gelesen wurde
der Pfadname, wie er sich durch Umbenennungen neu zusammensetzt (falls vorhanden)
die in dem Guard auftretenden Referenzguards mit ihrem altem und ggf. neuen Pfadnamen
Zur Behandlung von Fehlersituationen werden Sprungmarken generiert, deren Name sich aus einem Buchstaben und einer siebenstelligen Nummer zusammensetzt. Die Nummer der Sprungmarke für das erste zu restaurierende Guard ist 0000001, und sie erhöht sich für jedes weitere um 1. Übersteigt die Anzahl der Sprungmarken die Zahl 9999999, wird ein Fehler gemeldet und der Prozedur-Generierungsprozess abgebrochen. In diesem Fall wird empfohlen, die Restaurierung in mehrere Läufe aufzuteilen, z.B. durch die Erzeugung von je einer eigenen Restaurierungsprozedur pro Guardtyp.
Abhängig vom Operanden REPLACE beim Restaurierungslauf werden bei der Prozedurerstellung folgende Aktionen durchgeführt:
REPLACE=*YES
/DELETE-GUARD
Mit dem Kommando wird ein gegebenenfalls existierendes Guard gelöscht.
Durch entsprechende Sprungmarken wird die Situation abgefangen, dass das zu löschende Guard nicht vorhanden ist.
/CREATE-GUARD
Das Guard wird neu erzeugt und die Guardattribute restauriert.
/ADD-... oder /MODIFY-...
Der Guardinhalt wird restauriert.
REPLACE=*NO
/CREATE-GUARD
Es wird versucht, das Guard neu zu erzeugen und die Guardattribute zu restaurieren.
Gibt es das Guard bereits, protokolliert die Prozedur eine entsprechende Textmeldung und fährt mit dem nächsten Guard fort. Gibt es das Guard nicht, wird mit seiner Restaurierung fortgefahren.
/ADD-... oder /MODIFY-...
Der Guardinhalt wird restauriert.
Beispiel
Im folgenden Beispiel wird eine von GUARDS-SAVE generierte Prozedur dargestellt, mit der die beiden Guards $TSOS.SYS.DEFPATTR und $TSOS.SYS.PDF unter gleichzeitigem Austausch von Katalog- und Benutzerkennung restauriert werden können.
Das referenzierte Benutzerkennungsguard $LUZIFER.DEFPUID wurde zuvor nicht gesichert und wird darum bei der Prozedurgenerierung in der Sicherungsdatei nicht gefunden.
Die Schreibkennwörter werden nicht restauriert, stattdessen wird ein entsprechender Hinweis in die Prozeur eingetragen.
/ BEGIN-PROCEDURE LOGGING=*NO / / REMARK MOD-JOB-OPT LOGGING=(LISTING=*YES) / STEP / ASSIGN-SYSLST TO=#RESTORE.LST.2017-12-15.170512 / STEP / / WRI-TEXT '*********************************************************' / WRI-TEXT 'GUARDS-SAVE RESTORE-GUARDS' / WRI-TEXT 'Proc Generated by User TSOS at 2017-12-15/17:05:12' / WRI-TEXT '*********************************************************' / WRI-TEXT ' *** Begin *** ' / "*********************************************************" / "Backup File : :XXXX:$TSOS.BACKUP-GUARD " / "Backup Date : 2017-12-07/14:11:58 " / "Backup Pubset : XXXX " / " " / "Restore Guard : :XXXX:$TSOS.* " / "Restore Type : COOWNERP, DEFAULTP, DEFPATTR, " / " DEFPUID , STDAC , UNDEF " / "Restore Resolve : *YES " / "Restore Replace : *YES " / " " / "New Pubset-Id : 2OSC " / "New User-Id : MARY " / "New Name : *SAME " / "New Prog Pvs-Id : *SAME " / "*********************************************************" / / "** =================================================== **" / "** **" / "** Guard :XXXX:$TSOS.DEFPATTR DEFPATTR 0000001 **" -- alter Pfad / "** --> :2OSC:$MARY.DEFPATTR **" -- neuer Pfad / "** **" / "** =================================================== **" / DEL-GUARD :2OSC:$MARY.DEFPATTR - / ,DIALOG-CONTROL=*NO / WRI-TEXT '** :2OSC:$MARY.DEFPATTR DEFPATTR deleted **' / SKIP .C0000001 / STEP / WRI-TEXT '** :2OSC:$MARY.DEFPATTR DEFPATTR delete *error* **' / SKIP .C0000001 / / .C0000001 / CRE-GUARD :2OSC:$MARY.DEFPATTR - / ,SCOPE=*USER-ID - / ,USER-INFO=' ' / WRI-TEXT '** :2OSC:$MARY.DEFPATTR DEFPATTR created **' / SKIP .R0000001 / STEP / WRI-TEXT '** :2OSC:$MARY.DEFPATTR DEFPATTR create *error* **' / SKIP .E0000001 / / .R0000001 / ADD-DEFAULT-PROTECTION-ATTR :2OSC:$MARY.DEFPATTR / MOD-DEFAULT-PROTECTION-ATTR :2OSC:$MARY.DEFPATTR / ,ATTR-SCOPE=*CREATE-OBJECT / ,ACCESS=*SYSTEM-STD / ,USER-ACCESS=*SYSTEM-STD / ,BASIC-ACL=*SYSTEM-STD / ,GUARDS=*SYSTEM-STD / ,READ-PASSWORD=*SYSTEM-STD / ,WRITE-PASSWORD=*NONE (kein Passwd) / ,EXEC-PASSWORD=*SYSTEM-STD / ,DESTROY-BY-DELETE=*SYSTEM-STD / ,SPACE-RELEASE-LOCK=*SYSTEM-STD / ,EXPIRATION-DATE=*SYSTEM-STD / ,FREE-FOR-DELETION=*SYSTEM-STD / ,DIALOG-CONTROL=*NO / MOD-DEFAULT-PROTECTION-ATTR :2OSC:$MARY.DEFPATTR / ,ATTR-SCOPE=*MODIFY-OBJECT-ATTR / ,ACCESS=*SYSTEM-STD / ,USER-ACCESS=*SYSTEM-STD / ,BASIC-ACL=*SYSTEM-STD / ,GUARDS=*SYSTEM-STD / ,READ-PASSWORD=*SYSTEM-STD / ,WRITE-PASSWORD=*NONE (kein Passwd / ,EXEC-PASSWORD=*SYSTEM-STD / ,DESTROY-BY-DELETE=*SYSTEM-STD / ,SPACE-RELEASE-LOCK=*SYSTEM-STD / ,EXPIRATION-DATE=*SYSTEM-STD / ,DIALOG-CONTROL=*NO / WRI-TEXT '** **' / WRI-TEXT '** Warning: **' / WRI-TEXT '** ------- **' / WRI-TEXT '** WRITE-PASSWORD=*NONE restored for ATTR-SCOPE=*CRE **' (Warnung) / WRI-TEXT '** WRITE-PASSWORD=*NONE restored for ATTR-SCOPE=*MOD **' (Warnung) / WRI-TEXT '** **' / WRI-TEXT '** :2OSC:$MARY.DEFPATTR DEFPATTR restored **' / SKIP .E0000001 / STEP / WRI-TEXT '** :2OSC:$MARY.DEFPATTR DEFPATTR restore *error* **' / SKIP .E0000001 / .E0000001 / / "** =================================================== **" / "** **" / "** Guard :XXXX:$TSOS.SYS.PDF DEFAULTP 0000002 **" (alter Pfad) / "** --> :2OSC:$MARY.SYS.PDF **" (neuer Pfad) / "** Ref $LUZIFER.DEFPUID **" / "** Ref $TSOS.DEFPATTR **" (alter Pfad) / "** --> $MARY.DEFPATTR **" (neuer Pfad) / "** **" / "** =================================================== **" / WRI-TEXT '** --------------------------------------------------- **' / DEL-GUARD :2OSC:$MARY.SYS.PDF / ,DIALOG-CONTROL=*NO / WRI-TEXT '** :2OSC:$MARY.SYS.PDF DEFAULTP deleted **' / SKIP .C0000002 / STEP / WRI-TEXT '** :2OSC:$MARY.SYS.PDF DEFAULTP delete *error* **' / .C0000002 / CRE-GUARD :2OSC:$MARY.SYS.PDF - / ,SCOPE=*USER-ID - / ,USER-INFO=' ' / WRI-TEXT '** :2OSC:$MARY.SYS.PDF DEFAULTP created **' / SKIP .R0000002 / STEP / WRI-TEXT '** :2OSC:$MARY.SYS.PDF DEFAULTP create *error* **' / SKIP .E0000002 / .R0000002 / ADD-DEFAULT-PROTECTION-RULE :2OSC:$MARY.SYS.PDF - / ,PROTECTION-RULE=RULE1 - / ,RULE-POSITION=*LAST - / ,PROTECT-OBJECT=*PARAMETERS - / (NAME=A - / ,ATTRIBUTE-GUARD=$MARY.DEFPATTR - / ,USER-ID-GUARD=$LUZIFER.DEFPUID ) - (fehlt) / ,GUARD-CHECK=*NO - / ,DIALOG-CONTROL=*NO / WRI-TEXT '** :2OSC:$MARY.SYS.PDF DEFAULTP restored **' / SKIP .E0000002 / STEP / WRI-TEXT '** :2OSC:$MARY.SYS.PDF DEFAULTP restore *error* **' / SKIP .E0000002 / .E0000002 / / "*********************************************************" / "Guard Name Guard Type Error Status " / "---------- ---------- ----- ------ " / ":XXXX:$TSOS.DEFPATTR DEFPATTR generated " (alter Pfad) / ":XXXX:$TSOS.SYS.PDF DEFAULTP generated " (alter Pfad) / "........................................................." / ":XXXX:$LUZIFER.DEFPUID -undefined- DMS0AA8 referenced " (fehlt) / "---------------------------------------------------------" / "Generated Guards: 2 " / "Faulty Guards : 1 " / "*********************************************************" / / WRI-TEXT '*********************************************************' / WRI-TEXT ' *** End *** ' / "*********************************************************" / WRI-TEXT 'GUARDS-SAVE RESTORE-GUARDS' / WRI-TEXT 'Proc Generated by User TSOS at 2017-12-15/17:05:12' / WRI-TEXT '*********************************************************' / / STEP / ASSIGN-SYSLST TO=*PRIMARY / STEP / / END-PROCEDURE