General Page
The Toolkit can handle concurrent BRMS control groups. There are multiple ways to start them:
- From the CSEDTA Backup Commands (use the SBMJOB command, or the SBMJOB parameter on STRBKUBRM).
- Place them in a CL program, and then call the CL program from the CSEDTA Backup Commands parameter
- Start from STRBKUBRM *EXITs (making sure to use SBMJOB(*YES))
Keep in mind that QBATCH is not started by the toolkit and probably shouldn't be started on the Flashcopy LPAR. Use the job description QLPARJOBD to submit to subsytem QSYSWRK.
But where do you put the call to ENDFSFLASH ? If a control group always runs longer than the others, simply place ENDFSFLASH at the final *EXIT in that control group.
If there is some ambiguity regarding which one will be the final control group, then a better option is to use a semaphore to ensure that all the control groups check in before issing ENDFSFLASH.
First, create this CL program on the source LPAR (modify for your environment):
PGM
DCL VAR(&ALIBS) TYPE(*CHAR) LEN(1) VALUE('N')
DCL VAR(&BLIBS) TYPE(*CHAR) LEN(1) VALUE('N')
DCL VAR(&CLIBS) TYPE(*CHAR) LEN(1) VALUE('N')
DCL VAR(&IFS) TYPE(*CHAR) LEN(1) VALUE('N')
DLTDTAARA DTAARA(QGPL/ALIBS)
MONMSG MSGID(CPF0000)
DLTDTAARA DTAARA(QGPL/BLIBS)
MONMSG MSGID(CPF0000)
DLTDTAARA DTAARA(QGPL/CLIBS)
MONMSG MSGID(CPF0000)
DLTDTAARA DTAARA(QGPL/JUSTIFS)
MONMSG MSGID(CPF0000)
STRBKUBRM CTLGRP(ALIBS) SBMJOB(*YES) JOBD(QLPARJOBD)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
STRBKUBRM CTLGRP(BLIBS) SBMJOB(*YES) JOBD(QLPARJOBD)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
STRBKUBRM CTLGRP(CLIBS) SBMJOB(*YES) JOBD(QLPARJOBD)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
STRBKUBRM CTLGRP(JUSTIFS) SBMJOB(*YES) JOBD(QLPARJOBD)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
WAIT:
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA('Waiting...')
DLYJOB DLY(60)
CHKOBJ OBJ(QGPL/ALIBS) OBJTYPE(*DTAARA)
MONMSG MSGID(CPF9801) EXEC(GOTO CMDLBL(WAIT))
IF COND(&ALIBS *EQ 'N') THEN(DO)
CHGVAR VAR(&ALIBS) VALUE('Y')
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('ALIBS +
has finished.')
ENDDO
CHKOBJ OBJ(QGPL/BLIBS) OBJTYPE(*DTAARA)
MONMSG MSGID(CPF9801) EXEC(GOTO CMDLBL(WAIT))
IF COND(&BLIBS *EQ 'N') THEN(DO)
CHGVAR VAR(&BLIBS) VALUE('Y')
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('BLIBS +
has finished.')
ENDDO
CHKOBJ OBJ(QGPL/CLIBS) OBJTYPE(*DTAARA)
MONMSG MSGID(CPF9801) EXEC(GOTO CMDLBL(WAIT))
IF COND(&CLIBS *EQ 'N') THEN(DO)
CHGVAR VAR(&CLIBS) VALUE('Y')
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('CLIBS +
has finished.')
ENDDO
CHKOBJ OBJ(QGPL/IFS) OBJTYPE(*DTAARA)
MONMSG MSGID(CPF9801) EXEC(GOTO CMDLBL(WAIT))
IF COND(&IFS *EQ 'N') THEN(DO)
CHGVAR VAR(&IFS) VALUE('Y')
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('IFS has +
finished.')
ENDDO
SAVMEDIBRM DEV(TAPMLB03) MEDPCY(ULTRIUM3) OPTION(*OBJ)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('All +
backups are successfull, calling +
ENDFSFLASH.')
QZRDHASM/ENDFSFLASH ACTION(*NORMAL)
GOTO CMDLBL(DONE)
ERROR:
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('Error +
encountered. ENDFSFLASH not called.') +
TOMSGQ(*SYSOPR) MSGTYPE(*ESCAPE)
DONE:
ENDPGM
Then, in each control group, create the correct data area in the final *EXIT, and don't save the BRMS media information (because the program above does it).
On the controller, use CHGCSEDTA to submit the above program to JOBD(QLPAR) and run the flashcopy.
Was this topic helpful?
Document Information
Modified date:
18 December 2019
UID
ibm11138198