ライブラリー : QRPLOBJ とはプログラムを再コンパイルして上書きで置換えたり
RSTLIB や RSTOBJ でオブジェクトを上書きした場合に上書きされた元の
オブジェクトをシステム ( i5/OS ) が BACKUP して保管してくれるライブラリーである。
このライブラリーは IPL のときにクリーン・アップされる。
もし 24時間 365日 IPL を行わないで IBM i を点けっぱなしの状態であると
QRPLOBJ には古いオブジェクトが山のように溜まりっぱなしとなる。
DSPLIB QRPLOBJ + [実行]
で御社のライブラリー : QRPLOBJ を覗いてみればよい。
数千個のオブジェクトが存在しているとなると、HDD占有デスクを圧迫して
IBM i のパフォーマンスを低下させていることになる。
そこで STRPDM などで QRPLOBJ 内部の不要なオブジェクトを削除することに
なるが元より数千個のオブジェクトがあるわけであるから
手作業での削除では莫大な労力が必要となる。
そこでここに紹介するのが QRPLOBJ をクリヤーしてくれるコマンド:
CLRRPLOBJ : QRPLOBJ のクリヤー
である。
CLRRPLOBJ は、QRPLOBJ 内部のすべてのオブジェクトをクリヤーするわけではなく
必要なオブジェクトは削除しない。
(これはソースを見て解析して御社の事情に合うように修正してほしい)
0001.00 CMD PROMPT('QRPLOBJ のクリヤー ') 0002.00 PARM KWD(CLEAR) TYPE(*CHAR) LEN(4) RSTD(*YES) + 0003.00 DFT(*NO) VALUES(*NO *YES) + 0004.00 PROMPT('QRPLOBJ のクリヤー ')
CRTCMD CMD(QGPL/CLRRPLOBJ) PGM(QGPL/CLRRPLOBJC) SRCFILE(MYSRCLIB/QCMDSRC) AUT(*ALL)
CLRRPLOBJ + F4キーで実行すると
のようにして省略値は *NO であり、うかつには実行されないようになっている。
実行のときは *YES にして実行する必要がある。
0001.00 PGM PARM(&CLEAR) 0002.00 /*-------------------------------------------------------------------*/ 0003.00 /* CLRRPLOBJC : QRPLOBJ のクリヤー */ 0004.00 /* */ 0005.00 /* 2018/06/30 作成 */ 0006.00 /*-------------------------------------------------------------------*/ 0007.00 DCL VAR(&CLEAR) TYPE(*CHAR) LEN(4) 0008.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0009.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0010.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) 0011.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) 0012.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0013.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0014.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) 0015.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + 0016.00 VALUE('*ESCAPE ') 0017.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + 0018.00 VALUE(X'000074') /* 2 進数 */ 0019.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + 0020.00 VALUE(X'00000000') 0021.00 /*( QUSRTVUS 用の変数 )*/ 0022.00 DCL VAR(&STRPOS) TYPE(*CHAR) LEN(4) + 0023.00 VALUE(X'0000007D') /* 2 進数開始位置 : + 0024.00 125 */ 0025.00 DCL VAR(&LENDTA) TYPE(*CHAR) LEN(4) + 0026.00 VALUE(X'00000010') /* 2 進数受取長さ : 16 */ 0027.00 DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(16) + 0028.00 VALUE(X'0000000000000000') 0029.00 DCL VAR(&OFFSET) TYPE(*CHAR) LEN(4) /* + 0030.00 2 進数 dハl q */ 0031.00 DCL VAR(&NOENTR) TYPE(*CHAR) LEN(4) /* + 0032.00 2 進数項目数 */ 0033.00 DCL VAR(&LSTSIZ) TYPE(*CHAR) LEN(4) /* + 0034.00 2 進数リストサイズ */ 0035.00 DCL VAR(&DEC08) TYPE(*DEC) LEN(8 0) /* WORK */ 0036.00 DCL VAR(&ADDLEN) TYPE(*DEC) LEN(8 0) /* WORK */ 0037.00 DCL VAR(&NOENT) TYPE(*DEC) LEN(8 0) /* WORK */ 0038.00 DCL VAR(&N) TYPE(*DEC) LEN(8 0) VALUE(1) /* WORK */ 0039.00 DCL VAR(&RCVDTA) TYPE(*CHAR) LEN(256) /* + 0040.00 受取データ */ 0041.00 DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00') 0042.00 /*( 項目の変数 )*/ 0043.00 DCL VAR(&OBJ) TYPE(*CHAR) LEN(10) 0044.00 DCL VAR(&OBJTYPE) TYPE(*CHAR) LEN(10) 0045.00 DCL VAR(&OBJATTR) TYPE(*CHAR) LEN(10) 0046.00 DCL VAR(&STSMSG) TYPE(*CHAR) LEN(128) 0047.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0048.00 0049.00 /*( 環境の取得 )*/ 0050.00 RTVJOBA TYPE(&TYPE) 0051.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0052.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') 0053.00 ENDDO /* バッチ */ 0054.00 ELSE CMD(DO) /* 対話式 */ 0055.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') 0056.00 ENDDO /* 対話式 */ 0057.00 0058.00 /*( パラメータの取得 )*/ 0059.00 IF COND(&CLEAR *EQ '*NO ') THEN(DO) 0060.00 RETURN 0061.00 ENDDO 0062.00 0063.00 /*( ユーザー・スペースの作成 )*/ 0064.00 CALL PGM(QUSCRTUS) PARM('QUSLOBJ QTEMP ' + 0065.00 'PF ' 32767 ' ' '*ALL ' + 0066.00 'QUSLOBJ 用ユーザー空間 ' '*YES ' + 0067.00 &APIERR) 0068.00 MONMSG CPF9870 0069.00 CALL PGM(QUSLOBJ) PARM('QUSLOBJ QTEMP ' + 0070.00 'OBJL0100' '*ALL QRPLOBJ ' + 0071.00 '*ALL ' &APIERR) 0072.00 IF COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(DO) 0073.00 SNDPGMMSG + 0074.00 MSG('API: QUSLOBJ の実行で次のエラーが発生 + 0075.00 しました。 ') MSGTYPE(*DIAG) 0076.00 GOTO APIERR 0077.00 ENDDO 0078.00 /*( リストAPIで作成されたユーザー空間の検索 )*/ 0079.00 CHGVAR VAR(&STSMSG) + 0080.00 VALUE('QRPLOBJ をクリヤー中です。 ') 0081.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&STSMSG) + 0082.00 TOPGMQ(*EXT) MSGTYPE(*STATUS) 0083.00 /*( リストデータセクションのオフセットを検索 )*/ 0084.00 CALL PGM(QUSRTVUS) PARM('QUSLOBJ QTEMP ' + 0085.00 &STRPOS &LENDTA &RCVVAR) 0086.00 CHGVAR VAR(&OFFSET) VALUE(%SST(&RCVVAR 1 4)) 0087.00 CHGVAR VAR(&NOENTR) VALUE(%SST(&RCVVAR 9 4)) 0088.00 CHGVAR VAR(&LSTSIZ) VALUE(%SST(&RCVVAR 13 4)) 0089.00 0090.00 /*( RCVVAR によって OFFSET,LSTSIZ を受取った )*/ 0091.00 CHGVAR VAR(&STRPOS) VALUE(&OFFSET) 0092.00 CHGVAR VAR(&DEC08) VALUE(%BIN(&STRPOS)) 0093.00 CHGVAR VAR(&DEC08) VALUE(&DEC08 + 1) 0094.00 CHGVAR VAR(%BIN(&STRPOS)) VALUE(&DEC08) 0095.00 CHGVAR VAR(&LENDTA) VALUE(&LSTSIZ) 0096.00 CHGVAR VAR(&ADDLEN) VALUE(%BIN(&LENDTA)) 0097.00 CHGVAR VAR(&NOENT) VALUE(%BIN(&NOENTR)) 0098.00 NXTRTV: 0099.00 CALL PGM(QUSRTVUS) PARM('QUSLOBJ QTEMP ' + 0100.00 &STRPOS &LENDTA &RCVDTA) 0101.00 /*( 処理の開始 )*/ 0102.00 CHGVAR VAR(&OBJ) VALUE(%SST(&RCVDTA 1 10)) 0103.00 CHGVAR VAR(&OBJTYPE) VALUE(%SST(&RCVDTA 21 10)) 0104.00 IF COND(&OBJ *EQ 'AURORA_EGN') THEN(GOTO + 0105.00 CMDLBL(PASS)) 0106.00 IF COND(&OBJ *EQ 'AUTORA_EGN') THEN(GOTO + 0107.00 CMDLBL(PASS)) 0108.00 IF COND(&OBJ *EQ 'AURORA_ACC') THEN(GOTO + 0109.00 CMDLBL(PASS)) 0110.00 IF COND(&OBJ *EQ 'AURORA_ERR') THEN(GOTO + 0111.00 CMDLBL(PASS)) 0112.00 IF COND(&OBJ *EQ 'RECYCLED ') THEN(GOTO + 0113.00 CMDLBL(PASS)) 0114.00 /*( *PGM )*/ 0115.00 IF COND(&OBJTYPE *EQ '*PGM ') THEN(DO) 0116.00 DLTPGM PGM(QRPLOBJ/&OBJ) 0117.00 ENDDO 0118.00 /*( *SRVPGM )*/ 0119.00 IF COND(&OBJTYPE *EQ '*SRVPGM ') THEN(DO) 0120.00 DLTSRVPGM SRVPGM(QRPLOBJ/&OBJ) 0121.00 ENDDO 0122.00 /*( *MODULE )*/ 0123.00 IF COND(&OBJTYPE *EQ '*MODULE ') THEN(DO) 0124.00 DLTMOD MODULE(QRPLOBJ/&OBJ) 0125.00 ENDDO 0126.00 /*( *USRQ )*/ 0127.00 IF COND(&OBJTYPE *EQ '*USRQ ') THEN(DO) 0128.00 DLTUSRQ USRQ(QRPLOBJ/&OBJ) 0129.00 ENDDO 0130.00 /*( *FILE )*/ 0131.00 IF COND(&OBJTYPE *EQ '*FILE ') THEN(DO) 0132.00 DLTF FILE(QRPLOBJ/&OBJ) 0133.00 ENDDO 0134.00 /*( *CMD )*/ 0135.00 IF COND(&OBJTYPE *EQ '*CMD ') THEN(DO) 0136.00 DLTCMD CMD(QRPLOBJ/&OBJ) 0137.00 ENDDO 0138.00 /*( *MENU )*/ 0139.00 IF COND(&OBJTYPE *EQ '*MENU ') THEN(DO) 0140.00 DLTMNU MENU(QRPLOBJ/&OBJ) 0141.00 ENDDO 0142.00 /*( *USRSPC )*/ 0143.00 IF COND(&OBJTYPE *EQ '*USRSPC ') THEN(DO) 0144.00 DLTUSRSPC USRSPC(QRPLOBJ/&OBJ) 0145.00 ENDDO 0146.00 /*( 処理の終了 )*/ 0126.00 /*( *USRQ )*/ 0127.00 IF COND(&OBJTYPE *EQ '*USRQ ') THEN(DO) 0128.00 DLTUSRQ USRQ(QRPLOBJ/&OBJ) 0129.00 ENDDO 0130.00 /*( *FILE )*/ 0131.00 IF COND(&OBJTYPE *EQ '*FILE ') THEN(DO) 0132.00 DLTF FILE(QRPLOBJ/&OBJ) 0133.00 ENDDO 0134.00 /*( *CMD )*/ 0135.00 IF COND(&OBJTYPE *EQ '*CMD ') THEN(DO) 0136.00 DLTCMD CMD(QRPLOBJ/&OBJ) 0137.00 ENDDO 0138.00 /*( *MENU )*/ 0139.00 IF COND(&OBJTYPE *EQ '*MENU ') THEN(DO) 0140.00 DLTMNU MENU(QRPLOBJ/&OBJ) 0141.00 ENDDO 0142.00 /*( *USRSPC )*/ 0143.00 IF COND(&OBJTYPE *EQ '*USRSPC ') THEN(DO) 0144.00 DLTUSRSPC USRSPC(QRPLOBJ/&OBJ) 0145.00 ENDDO 0146.00 /*( 処理の終了 )*/ 0147.00 PASS: IF COND(&N < &NOENT) THEN(DO) 0148.00 CHGVAR VAR(&N) VALUE(&N + 1) 0149.00 CHGVAR VAR(&DEC08) VALUE(%BIN(&STRPOS)) 0150.00 CHGVAR VAR(&DEC08) VALUE(&DEC08 + &ADDLEN) 0151.00 CHGVAR VAR(%BIN(&STRPOS)) VALUE(&DEC08) 0152.00 GOTO NXTRTV 0153.00 ENDDO 0154.00 SNDPGMMSG MSG('QRPLOBJ のクリヤーが完了しました。 ') + 0155.00 MSGTYPE(*DIAG) 0156.00 RETURN 0157.00 0158.00 APIERR: 0159.00 CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) 0160.00 CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) 0161.00 CHGVAR VAR(&MSGF) VALUE('QCPFMSG ') 0162.00 CHGVAR VAR(&MSGFLIB) VALUE('QSYS ') 0163.00 GOTO SNDMSG 0164.00 0165.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + 0166.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 0167.00 MSGFLIB(&MSGFLIB) 0168.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) 0169.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0170.00 TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE) 0171.00 MONMSG MSGID(CPF2400) EXEC(RETURN) 0172.00 ENDDO 0173.00 ELSE CMD(DO) 0174.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 0175.00 MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + 0176.00 MSGTYPE(&MSGTYPE) 0177.00 MONMSG MSGID(CPF2400) EXEC(RETURN) 0178.00 ENDDO 0179.00 ENDPGM
CRTCLPGM PGM(QGPL/CLRRPLOBJC) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
0104.00 IF COND(&OBJ *EQ 'AURORA_EGN') THEN(GOTO + 0105.00 CMDLBL(PASS))
のように削除したくないオブジェクトがあればオミットしておく。