04 - System Administration04b - Backup04g - Varie sistemistica

Evitare l’avvio automatico del sottosistema di controllo al termine del salvataggio dell’intero sistema sui sistemi operativi più vecchi di IBM i V7R4

Last Updated on 24 Settembre 2021 by Roberto De Pedrini

In IBM i V7R4, i menu SAVE e RESTORE sono stati migliorati con la nuova opzione Start controlling subsystem. In precedenza, il sottosistema di controllo si avviava sempre in automatico al termine dell’operazione di salvataggio o di ripristino. In IBM i V7R4, è ora possibile lasciare il sistema in stato limitato dopo l’operazione di salvataggio o ripristino, non avviando il sottosistema di controllo. Questo può essere utile se si desidera installare PTF, eseguire la manutenzione del sistema o l’IPL del sistema.

In questo post vedremo come poter fare altrettanto sulle precedenti versioni di sistema operativo (io uso questo metodo da i5/OS V5R4) focalizzandoci sul salvataggio dell’intero sistema, opzione 21 del menu SAVE.


Target operating system: da i5/OS V5R4 aIBM i V7R3.


Iniziamo creando un’area dati chiamata STRCTLSBS, dove scriveremo l’informazione se avviare (*YES) o meno (*NO) il sottosistema di controllo al termine del salvataggio dell’intero sistema:

CRTDTAARA DTAARA(library/STRCTLSBS) TYPE(*CHAR) LEN(4) AUT(*USE)

Modifichiamo il contenuto dell’area dati STRCTLSBS in questo modo:

  • se vogliamo che il sistema resti in modalità limitata al termine del salvataggio:
CHGDTAARA DTAARA(library/STRCTLSBS *ALL) VALUE('*NO')
  • se vogliamo che il sistema vada in modalità normale al temine del salvataggio (comportamento di default di IBM):
CHGDTAARA DTAARA(library/STRCTLSBS *ALL) VALUE('*YES')

Creiamo un file sorgente che supporti i caratteri a doppio byte (DBCS) dove memorizzare i sorgenti delle varie versioni dei programmi QMNSRBND:

CRTSRCPF FILE(srclib/QCLSRCDBCS) CCSID(937)

Nota. E’ necessario utilizzare un file sorgente che supporti i caratteri a doppio byte perché per creare il programma CL QMNSRBND è stato usato un file di quel tipo (diversamente il comando termina con il messaggio d’errore CPF0565). Nella mia esperienza, il CCSID 937, che combina un set di caratteri EBCDIC a byte singolo con un set di caratteri multibyte cinese tradizionale, sembra andare bene.

Estraiamo il sorgente del programma CL QMNSRBND nel membro QMNSRBND del file sorgente appena creato:

RTVCLSRC PGM(QSYS/QMNSRBND) SRCFILE(srclib/QCLSRCDBCS) SRCMBR(*PGM)

Facciamo una copia di sicurezza del membro QMNSRBND nel membro QMNSRBND_I:

CPYSRCF FROMFILE(srclib/QCLSRCDBCS) TOFILE(srclib/QCLSRCDBCS) FROMMBR(QMNSRBND) TOMBR(QMNSRBND_I)

Modifichiamo il sorgente del programma CL QMNSRBND in modo da utilizzare l’informazione contenuta nell’area dati STRCTLSBS (vedi gli statement in rosso nell’estratto del sorgente qui sotto):

  • inseriamo la dichiarazione della variabile &STRCTLSBS che memorizzerà il contenuto dell’area dati STRCTLSBS immediatamente dopo la dichiarazione della variabile &CPYR;
  • inseriamo le istruzioni per leggere l’area dati STRCTLSBS, per definire un valore di default per la variabile &STRCTLSBS in caso di anomalia nella lettura dell’area dati stessa ed un’istruzione IF che condizioni l’avvio del sottosistema di controllo in base al valore della variabile &STRCTLSBS.
STRSEU SRCFILE(srclib/QCLSRCDBCS) SRCMBR(QMNSRBND) TYPE(CLP) OPTION(2) TEXT('My QMNSRBND')
[...]
     DCL VAR(&CPYR) TYPE(*CHAR) LEN(90) VALUE('5761-SS1 (C) COPYRIGHT-
 IBM CORP 1980, 2007. LICENSED MATERIAL - PROGRAM PROPERTY OF IBM')   
     DCL VAR(&STRCTLSBS) TYPE(*CHAR) LEN(4)
[...]
END:
[...]
     IF COND(&CANCEL *EQ N) THEN(DO)              
     RTVDTAARA DTAARA(library/STRCTLSBS *ALL) RTNVAR(&STRCTLSBS)
     MONMSG MSGID(CPF0000) EXEC(CHGVAR VAR(&STRCTLSBS) VALUE('*YES'))
     IF COND(&STRCTLSBS *NE '*NO') THEN(DO)
     IF COND(&PROMPT *EQ 'Y') THEN(DO)
     ? *SYSTEM/STRSBS SBSD(&CTLSBSLIB/&CTLSBSD)
[...]
     ENDDO
     ELSE CMD(DO)
     *SYSTEM/STRSBS SBSD(&CTLSBSLIB/&CTLSBSD)
[...]
     ENDDO
     ENDDO
     ENDDO
[...]

Rinominiamo il programma CL originale IBM per conservarlo:

RNMOBJ OBJ(QMNSRBND) OBJTYPE(*PGM) NEWOBJ(QMNSRBND_I)

Infine, creiamo il programma CL:

CRTCLPGM PGM(QSYS/QMNSRBND) SRCFILE(objlib/QCLSRCDBCS) SRCMBR(*PGM)

Abbiamo finito! Ora, impostando la data area a *NO, possiamo finalmente eseguire il backup dell’intero sistema e poi installare le PTF o spegnere il sistema senza dover riportare il sistema in modalità limitata al temine del salvataggio.


Importante. Dopo ogni installazione di PTF (soprattutto in caso di installazione di un cumulativo) occorre verificare se il programma QMNSRBND è stato sostituito. In caso di sostituzione, è necessario estrarre il nuovo sorgente CL (per non perdere eventuali variazioni introdotte), modificarlo, come appena descritto e ricompilarlo. Prima, però, rimuoviamo il backup della precedente versione del programma:

DLTPGM PGM(QSYS/QMNSRBND_I)
Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

About author

Amministratore sistemi IBM i

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *