Skip to content

Instantly share code, notes, and snippets.

@buzzia2001
Created January 23, 2026 21:31
Show Gist options
  • Select an option

  • Save buzzia2001/0068b954471a37dc2af1d5575d704bf8 to your computer and use it in GitHub Desktop.

Select an option

Save buzzia2001/0068b954471a37dc2af1d5575d704bf8 to your computer and use it in GitHub Desktop.
Restore files without members using BRMS
-- Purpose: Getting information about a saved object (e.g. QGPL/QAPZCOVER)
-- Version: 1.0
-- Date 23/01/2026
-- Author: Andrea Buzzi
-- LPP Requirements: 577BR2
-- PTF Requirements: SJ06117 V7R6M0, SJ06116 V7R5M0, SJ06115 V7R4M0
-- Docs: https://fortradocs.atlassian.net/wiki/spaces/IWT/pages/3327361025/QUSRBRM.BACKUP_HISTORY_OBJECT+View
SELECT VOLUME_SERIAL,
DEVICE_NAMES,
FILE_SEQUENCE_NUMBER
FROM QUSRBRM.BACKUP_HISTORY_OBJECT
WHERE SAVED_ITEM = 'QGPL'
AND SAVED_OBJECT = 'QAPZCOVER'
ORDER BY SAVE_TIMESTAMP DESC;
stop;
-- Purpose: Getting information about a saved object (e.g. QGPL/QAPZCOVER) if you don't have 5770BR2
-- Version: 1.0
-- Date 23/01/2026
-- Author: Andrea Buzzi
SELECT OBVOL AS VOLUME_SERIAL,
OBHDEV AS DEVICE_NAMES,
OBHSEQ AS FILE_SEQUENCE_NUMBER
FROM QUSRBRM.QA1AOD
WHERE OBHLIB = 'QGPL'
AND OBHNAM = 'QAPZCOVER'
ORDER BY OBHDAT DESC;
stop;
-- Purpose: Restore objects without members using BRMS
-- Version: 1.0
-- Date 23/01/2026
-- Author: Andrea Buzzi
CREATE OR REPLACE PROCEDURE SQLTOOLS.RSTNOMBR (
IN OBJLIST VARCHAR(1000), --Object list
IN LIB VARCHAR(10), --Library
IN RSTLIB VARCHAR(10) DEFAULT '*SAVLIB' --Library in which I have to restore
)
LANGUAGE SQL
SPECIFIC SQLTOOLS.RSTNOMBR
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
SET OPTION ALWBLK = *ALLREAD,
ALWCPYDTA = *OPTIMIZE,
COMMIT = *NONE,
DECRESULT = (31,
31,
00),
DYNDFTCOL = *NO,
DYNUSRPRF = *USER,
SRTSEQ = *HEX
BEGIN
DECLARE CMD VARCHAR(10000);
--Creating command to be executed for the restore
SELECT 'RSTOBJ OBJ(' CONCAT TRIM(OBJLIST) CONCAT ') SAVLIB(' CONCAT TRIM(LIB) CONCAT ') DEV(' CONCAT TRIM(OBHDEV) CONCAT
') SEQNBR(' CONCAT OBHSEQ CONCAT ') VOL(' CONCAT TRIM(OBVOL) CONCAT
') ENDOPT(*UNLOAD) OBJTYPE(*ALL) OPTION(*ALL) MBROPT(*ALL) ALWOBJDIF(*COMPATIBLE) RSTLIB(' CONCAT TRIM(RSTLIB) CONCAT
') DFRID(Q1ARSTID) FILEMBR((*ALL *NONE))'
INTO CMD
FROM QUSRBRM.QA1AOD
WHERE OBHLIB = TRIM(LIB)
ORDER BY OBHDAT DESC
LIMIT 1;
CALL SYSTOOLS.LPRINTF(
TRIM(CMD)
);
CALL QSYS2.QCMDEXC(
TRIM(CMD)
);
END;
stop;
-- Purpose: This procedure allow you to restore objects without members using BRMS from another system in the same BRMS network
-- Version: 1.0
-- Date 23/01/2026
-- Author: Andrea Buzzi
CREATE PROCEDURE SQLTOOLS.RSTNOMBR2 (
IN OBJLIST VARCHAR(1000), --Object list
IN LIB VARCHAR(10), --Library
IN SYSTEM VARCHAR(10), --System name
IN RSTLIB VARCHAR(10) DEFAULT '*SAVLIB', --Library in which I have to restore
IN RSTASP VARCHAR(10) DEFAULT '*SAVASP', --ASP in which I have to restore
IN RSTASPDEV VARCHAR(10) DEFAULT '*SAVASPDEV' --ASPDEV in which I have to restore
)
LANGUAGE SQL
SPECIFIC SQLTOOLS.RSTNOMBR
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
SET OPTION ALWBLK = *ALLREAD,
ALWCPYDTA = *OPTIMIZE,
COMMIT = *NONE,
DECRESULT = (31,
31,
00),
DYNDFTCOL = *NO,
DYNUSRPRF = *USER,
SRTSEQ = *HEX
BEGIN
DECLARE CMD VARCHAR(10000);
--Creating command to be executed for the restore
SELECT 'RSTOBJ OBJ(' CONCAT TRIM(OBJLIST) CONCAT ') SAVLIB(' CONCAT TRIM(LIB) CONCAT ') DEV(' CONCAT TRIM(BKHDEV) CONCAT
') SEQNBR(' CONCAT BKHSEQ CONCAT ') VOL(' CONCAT TRIM(BKVOL) CONCAT
') ENDOPT(*UNLOAD) OBJTYPE(*ALL) OPTION(*ALL) MBROPT(*ALL) ALWOBJDIF(*COMPATIBLE) RSTLIB(' CONCAT TRIM(RSTLIB) CONCAT
') RSTASP(' CONCAT TRIM(RSTASP) CONCAT ') RSTASPDEV(' CONCAT TRIM(RSTASPDEV) CONCAT
') DFRID(Q1ARSTID) FILEMBR((*ALL *NONE))'
INTO CMD
FROM QUSRBRM.QA1AHS
WHERE BKHSYS = TRIM(SYSTEM)
AND BKHLIB = TRIM(LIB)
ORDER BY BKHSVT DESC
LIMIT 1;
CALL SYSTOOLS.LPRINTF(
TRIM(CMD)
);
CALL QSYS2.QCMDEXC(
TRIM(CMD)
);
END;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment