Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiele

&pagelevel(4)&pagelevel

Ändern von Katalogeinträgen

Das nachfolgende Beispiel zeigt den strukturellen Aufbau eines Assembler-Hauptprogramms. Die Makroaufrufe zur strukturierten Programmierung mit ASSEMBH (z.B. @IF) werden von ASSEMBH-BC nicht unterstützt (siehe Handbuch „ASSEMBH“ [2]).

Das Beispielprogramm soll erreichen, dass alle reservierten Bänder, deren Archivnummern im Bereich von ABC001 bis ABC099 liegen, uneingeschränkt mehrbenutzbar (USER-ACCESS=ALL-USERS) werden.

Struktureller Aufbau des Assembler-Hauptprogramms


         :
         @CYCLE
MODIFY   DS    0H
         :
         @PASS EXTNAME=MAREN1PS,PAR=PAR1PS Aufruf MARENADM
         @CAS2 RETFLAG,COMP=CLI          CHECK RETURN FLAG
         @OF   RETFLAGA                  RETURN FLAG 'A' = OK
         MVC   ANWVSN,ARCHIVNR           SET VSN IN STATEMENT
         @IF   EQ                        SET NEXT FSEQ IN STATEMENT
         CLC   FSEQ,=C'*001'             SUPPRESSED VOLUME?
         @THEN
         MVC   ANWFSEQ,=C'0001'          IF YES - NEXT FSEQ = '0001'
         @ELSE
         PACK  DOWO,FSEQ                 OTHERWISE ADD 1 TO FSEQ
         AP    DOWO,=PL1'1'
         UNPK  ANWFSEQ,DOWO+5(3)
         OI    ANWFSEQ+3,X'F0'
         @BEND
         @OF   RETFLAGE                  RETFLAG 'E' = NO MORE ENTRIES
         :
         @OFRE                           ERROR EXIT
         :
@BEND
         @BEND
         :
DOWO     DS    D                         WORKAREA
STMT     DC    Y(STMTEND-STMT)         AREA FOR MARENADM STATEMENT
         DC    CL2' '
         DC    C'//MOD-VOL-ATTR VOL=*INT(FROM='
ANWVSN   DC    CL6'ABC001'
         DC    C',FROM-FSEQ='
ANWFSEQ  DC    CL4'0001'
         DC    C',TO=ABC099),'
         DC    C'SELECT=*RES,PROT=PAR(USER-ACCESS='
         DC    C'*ALL-USERS)'
STMTEND  EQU   *
         : 
         DS    OF
PAR1PS   DS    OF
         DC    A(STMT)
         DC    A(MARENA)
         DC    A(MARENP)
         : 
         MARENA MF=L,LAYOUT=V8           AREA FOR MAREN CATALOG ENTRY 
         MARENP MF=L                     AREA FOR MAREN PARAMETER RECORD
         :


Zyklische Verlagerung von Bändern

In diesem Beispiel wird eine komplexere Anwendung der MARENADM-Programmschnittstelle aufgezeigt.

Problemstellung

In einem Data Center sollen bestimmte Bänder in gewissen Zeitabständen an einen jeweils anderen Lagerort gebracht werden. Beispielsweise sollen Bänder aus einer Sicherung noch einige Tage nach deren Erstellung am jeweiligen System verbleiben (um etwa Benutzern die Möglichkeit zu bieten, daraus noch Dateien zu rekonstruieren), und erst danach in einen Brandschutzkeller transportiert werden.
Da es in MAREN keine gesonderte Anweisung für einen derartigen zeitabhängigen Bandtransfer gibt, soll dieses Problem mit einer Anwendung der MARENADM-Programmschnittstelle gelöst werden.

Lösungsansätze

Die Informationen über den Verlagerungs-Zyklus sollen in einem Katalogeintragsfeld hinterlegt und dort später abgefragt werden.

Das Hinterlegen kann dabei mittels eines MAREN-Exits (siehe Kapitel „MAREN-Exits“) vorgenommen werden. Sinnvollerweise nimmt man dazu einen Exit, der zu einem Zeitpunkt aufgerufen wird, an dem das Beschreiben des Bandes bereits erfolgt ist, also nicht z.B. den Reserve-Request-Exit, bei dessen Aufruf noch nicht sicher ist, ob das Band auch tatsächlich verwendet werden kann.

In diesem Zusammenhang bietet sich der Modify-Request-Exit an. Wird dieser im Rahmen der DMS-Close-Verarbeitung (LAFUNKNM=MAREN0C1) oder bei einem Spulenwechsel (LAFUNKNM=MAREN0E1) aufgerufen, so ist das Beschreiben des Bandes abgeschlossen. Man kann dann anhand selbstgewählter Kriterien im Katalogeintrag prüfen, ob das soeben erstellten Band bis zu seiner Freigabe nacheinander an verschiedenen Lagerorten aufbewahrt werden soll.

Mögliche Kriterien dafür wären (in Klammern die entsprechenden Katalogeintragsfelder):

  • Benutzerkennung, unter der das Band erstellt wurde (CRUSERID, falls system-spezifischer Parameter CID-UID gesetzt, sonst auch LAUSERID)

  • Name des Erstellungs-Jobs (CRJOB)

  • Dateiname (FILENM41)

  • Name des ARCHIVE-Directories, mit dem die Sicherung durchgeführt wurde (DIRNAME)

Die Modalitäten der Bandverlagerung können u.U. viel Platz beanspruchen. Daher sollte ein möglichst großes Katalogeintragsfeld zur Aufnahme dieser Informationen ausgewählt werden. Außerdem muss es sich um ein Katalogeintragsfeld handeln, das nicht bei irgendwelchen DVS-Zugriffen auf das Band wieder von MAREN aktualisiert wird, da sonst die zur Verlagerung benötigten Informationen verloren gehen würden.

Das in diesem Zusammenhang am besten geeignete Katalogeintragsfeld ist das eigentlich zur Aufnahme von benutzerspezifischen Daten vorgesehene Katalogeintragsfeld USER-FIELD. Dieses kann auch bei mehreren MAREN- bzw. MARENADM-Anweisungen durch den des Operanden USER-FIELD modifiziert werden, wobei jedoch MAREN-Anwender immer nur die Änderungen an Katalogeinträgen der eigenen Benutzerkennung vornehmen können (dies gilt auch für uneingeschränkt mehrbenutzbare Bänder).
Da der Wertebereich für den Operanden USER-FIELD dem Datentyp „c-string“ entspricht, dürfen darin nur abdruckbare Zeichen vorkommen. Sonst werden bei der Bildschirmmaske zu SHOW-VOL-ATTR VOL=<vsn> Schmierzeichen ausgegeben.

Vorgeschlagene Lösung

Das 54 Bytes lange Katalogeintragsfeld USERFELD im Katalogeintrag wird folgendermaßen untergliedert:

6 Bytes:

C'CYCLE' als Kennzeichen dafür, dass es sich um ein zyklisch zu verlagerndes Band handelt.

48 Bytes:

4 je 12 Bytes umfassende Verlagerungsanweisungen.

Diese wiederum sind unterteilt in:

4 Bytes:Anzahl Tage nach Erstellungsdatum (CRDATE), an dem die nächste Verlagerung stattfinden soll.
8 Bytes:Lagerort, an den das Band bei der nächsten Verlagerung gebracht werden soll.


Beispiel

USERFELD=CL54'CYCLE 0028CENTRAL 0090TRESOR 0365DVBUNKER'

Das Band soll - jeweils ab Erstellungsdatum gerechnet -

  • nach 28 Tagen in das Zentralarchiv gebracht werden

  • nach 90 Tagen in einem Spezialtresor hinterlegt werden

  • nach 365 Tagen in einem speziell gesicherten, unterirdischen Raum gelagert werden

Ein vierter Lagerort ist nicht mehr vorgesehen. Nach der Freigabe wird das Band wieder an den bei FREE-LOCATION eingetragenen Lagerort zurückgebracht.

Programmtechnische Realisierung

Mithilfe eines die MARENADM-Programmschnittstelle aufrufenden Hauptprogramms werden sequenziell alle MAREN-Katalogeinträge gelesen und darin das Katalogeintragsfeld USERFELD ausgewertet. Finden sich dort die zuvor beschriebenen Verlagerungseinträge, so wird überprüft, ob auf Grund der seit der Dateierstellung verstrichenen Zeit nun eine Verlagerung ansteht. Ist dies der Fall, so wird mit der MARENADM-Anweisung MODIFY-VOLUME-ATTRIBUTES das Katalogeintragsfeld HOME-LOCATION auf den im ersten Verlagerungseintrag befindlichen Lagerort geändert. Dies hat zur Folge, dass beim nächsten Aufräumlauf des MAREN-Administrators (MARENADM-Anweisung RETURN-VOLUMES) für dieses Band eine Verlagerungsaufforderung ausgegeben wird.

Nach jeder erfolgten Modifikation wird, durch ein Verschieben der restlichen Verlagerungseinträge nach vorne, der soeben abgearbeitete Verlagerungseintrag gelöscht (dient der Programmvereinfachung).

Läßt man dieses Programm täglich oder zumindest vor jedem Aufräumlauf des MAREN-Administrators ablaufen, so hat man die Gewähr, dass die gewünschten Bandtransfers auch tatsächlich durchgeführt werden (sofern die zuständigen Operator den Verlagerungsaufforderungen Folge leisten).

Struktureller Aufbau des Assembler-Hauptprogramms


PSCYCLE CSECT
          :
         @CYCLE
READCAT  DS    0H    Read volume catalog sequentially 
*
         MVC   STMTAREA,BLANKS
         MVC   STMTAREA,SHOWSTMT           Set statement area
         @PASS EXTNAME=MAREN1PS,PAR=STMTAREA  Call MARENADM
         @WHEN NE                          Query return code
         CLI   RETFLAG,RETFLAGA             Everything OK?
         @BREA                             Error occurred or
*                                          end-of-file reached
*
*
CHECKUF  DS    0H    Check USERFELD (CYCLE)
*
*              Do the first 6 bytes of USERFELD contain the
*                    character string C'CYCLE '?
*              No: Position to the next archive entry ( -> POSIT)
*              Position to the first relocation entry
*
*
CHECKUF2 DS    0H    Check USERFELD (relocation entries)
*
*              Do the first 4 bytes contain a numeric value?
*              No: Position to next archive entry (->POSIT)
*              Do the next 8 bytes contain a possible location,
*                    i.e. are we dealing with a character string
*                    of type <alphanumeric>, possibly filled
*                    to the right with blanks?
*              No: Position to the next archive entry (->POSIT)
*              Does USERFELD contain another entry, i.e.
*                    neither end of USERFELD reached nor the
*                    next 12 bytes all blanks?
*              Yes : Position to the next relocation entry;
*                    repeat CHECKUF2
*
*
CHECKDAT DS    0H   Check the relocation date
*
*              Add number from relocation entry to  CRDATE
*              Calculated number >= current date?
*              No: Position to next archive entry (->POSIT)
*
*
MODIFY   DS    0H   Modify the archive entry
*
         MVC   MODVSN,ARCHIVNR             VSN from archive entry
         MVC   MODFSEQ,FSEQ                FSEQ from archive entry
         MVC   MODHOMEL,USERFELD+10        Location from USERFELD
         MVC   STMTAREA,BLANKS
         MVC   STMTAREA,MODSTMT            Set statement area
         @PASS EXTNAME=MAREN1PS,PAR=STMTAREA  Call MARENADM
         @WHEN NE                          Query return code
         CLI   RETFLAG,RETFLAGA             Everything OK?
         @BREA                             Error exit
*
*
SHIFT    DS    0H   Update USERFELD
*
         MVC   SAVELOC,USERFELD+6          Save relocation statements
         MVC   USERFELD+6(48),BLANKS       Delete old contents
         MVC   USERFELD+6(36),SAVELOC+12    Undo last relocation statement
*                                          executed
*
*
POSIT    DS    0H   Position to next archive entry
*
         MVC   SHOWFROM,ARCHIVNR           VSN from archive entry
         IF    EQ
         CLC   FSEQ,=CL4'*001'             Migrated volume?
         @THEN
         MVC   SHOWFRFS,=CL4'0001'
         @ELSE
         PACK  DOWO,FSEQ
         AP    DOWO,=PL1'1'                Increment FSEQ by 1
         UNPK  SHOWFRFS,DOWO+5(3)
         OI    SHOWFRFS+3,X'F0'
         @BEND
         @BEND                             Run through loop again
         .
         .
         .
*               Constant area
         .
         .
         .
         MARENA MF=L,LAYOUT=V8             Area for archive entry
         MARENP MF=L                       Area for MAREN parameters
          .
          .
          .
STMTAREA DS    CL80                        Area for MARENADM statement
*
SHOWSTMT DC    Y(SHOWENDE-SHOWSTMT)        Statement for reading
         DC    CL2' '
         DC    C'//SHOW-VOL-ATTR VOL=*INT(FROM='
SHOWFROM DC    CL6'*FIRST'
         DC    C',FROM-FSEQ='
SHOWFRFS DC    CL4'0001'
         DC    C')'
SHOWENDE EQU   *
*
MODSTMT  DC    Y(MODENDE-MODSTMT)          Statement for modifying 
         DC    CL2' '
         DC    C'//MOD-VOL-ATTR VOL='
MODVSN   DS    CL6
         DC    C',F-SEQ='
MODFSEQ  DS    CL4
         DC    C',LOCATION=*PAR(HOME-LOC='
MODHOMEL DS    CL8
         DC    C')'
MODENDE  EQU   *
*
DOWO     DS    D
SAVELOC  DS    4*CL12                     Save area for relocation entry
BLANKS   DC    CL80' '
          :
         END