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

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

Recent Posts

VsCode Extension: Bob Cozzi’s RPG IV to RPG Free Conversion

L’estensione “RPG IV to Free Format Conversion” sviluppata da Bob Cozzi (Cozzi Research) è pensata per semplificare la conversione di…

3 mesi ago

IBM i & SQL Tips #010 – Localizzare programmi nella Call Stack con STACK_INFO

Ciao a tutti, oggi voglio segnalarvi un altro interessante contributo di Massimo Duca, parte della sua ormai nota serie IBM…

3 mesi ago

Display file DDS Edit per VsCode, nuova preview.

Incuriosito da alcuni messaggi di Cristian Larsen su Linkedin (New Release - Display File DDS Edit v.0.10.1) ho voluto scaricare…

4 mesi ago

Project Bob: il nuovo strumento AI di IBM per sviluppo COBOL su IBM Z e RPG su IBM i

Ciao a tutti,oggi voglio segnalarvi un annuncio che potrebbe segnare una svolta per lo sviluppo applicativo su ambienti IBM: Project…

4 mesi ago

IBM i & SQL Tips #6: chiamare API REST e analizzare le risposte JSON con SQL

Voglio segnalarvi un nuovo articolo molto interessante di Massimo Duca nella serie IBM i & SQL Tips. In questo sesto…

5 mesi ago

Come funziona il passaggio di parametri a un programma IBM i (RPG / Cobol)

Ciao a tutti, voglio segnalarvi un post molto utile di Marco Riva sul suo sito Markonetools, in cui spiega in…

5 mesi ago