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

ACS Access Client Solution 1.1.9.5

I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…

1 giorno ago

Tim Rowe and Scott Forstie – Promo video for CEC 2024 – Milan

Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…

1 giorno ago

Code for IBM i 2.10.0 – Debug IBM i con Visual Studio Code

Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…

4 giorni ago

ObjectConnect over TCP/IP

A distanza di due anni e mezzo dal mio post Trasferire oggetti con ObjectConnect ed Enterprise Extender, sono finalmente riuscito…

4 giorni ago

SQL: SELECT con i “superpoteri”

Con un piccolo trucco anche una semplice istruzione SELECT può eseguire qualsiasi comando di sistema ! Vediamo come...

5 mesi ago

NetServer per tutti – parte 5

Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer

1 anno ago