「あるファイルを使用しているユーザーを調べるにはどのようにすればよいですか?」という質問が
多いのは、バッチ更新の前などに使用の中断をユーザーに促したいケースが多いからでは
ないだろうか?
BACKUP や月次更新などを行う前に更新ファイルなどを使用しているユーザーがあれば、
などと警告メッセージを自動的に送出したい。
WRKOBJLCK
で使用中のユーザーを調べて手動で SNDMSG
してもよいが無人でこれらを
行うことができるコマンドを紹介する。
SNDLCKMSG
は使用中のユーザーがあるかどうかを調べて使用中のユーザーがあれば
指定したメッセージを、そのユーザーに送信することができる。
使用中のユーザーがあったかどうかも判断することができる。
運用面で定期的な処理の中に SNDLCKMSG
を組み込んでおくと処理はスムースで安全な
ものになるに違いない。
次の画面はライブラリーQTRFIL
のファイルSHOHIN
を更新としてオープンしているユーザーに
警告メッセージを送信するための画面の使用例を示している。
オブジェクト | : | ユーザーが使用しているかどうか調べたいオブジェクト(ファイル) |
ライブラリー | : | オブジェクトのライブラリー |
メンバー | : | ファイルのときに指定したいメンバーがあれば記入 |
オブジェクト・タイプ | : | *FILE, *LIB, .... などのオブジェクトのタイプ |
ロック状態 | : | オブジェクトのロック状態 |
メッセージ・テキスト | : | ユーザーに送出するメッセージ |
受け取りメッセージ 待ち行列 | : | 通常は *USER を指定 |
メッセージ・タイプ | : | 送出するメッセージのタイプ |
実際に SNDLCKMSG
を CLP の中で使用している例を紹介する。
この例では他のユーザーが使用できないように排他ロックを最初に試みて失敗すれば
SNDLCKMSG
コマンドを使ってユーザーに使用中止を促す。
その後、30秒間待って再び ALCOBJ
を試みる。
さらにまだユーザーが使用しているようであればSNDLCKMSG
を繰り返す。
このようにして完全に ALCOBJ
が成功するまで SNDLCKMSG
が繰り返される。
PGM /*---------------------------------------------------------*/ /* TESTLCKMSG : SNDLCKMSG のテスト */ /*---------------------------------------------------------*/ DCL VAR(&MSG) TYPE(*CHAR) LEN(80) ALCOBJ: ALCOBJ OBJ((QTRFIL/SHOHIN *FILE *EXCL)) WAIT(0) MONMSG MSGID(CPF1000) EXEC(DO) SNDLCKMSG OBJ(QTRFIL/SHOHIN) SRCMBR(SHOHIN) + MSG(' 商品マスターの使用を中止してください + 。 ') MSGQ(*USER) DLYJOB DLY(30) GOTO ALCOBJ ENDDO /*( ここから何かの更新処理 )*/ /*( 更新処理の終了 )*/ DLCOBJ OBJ((QTRFIL/SHOHIN *FILE *EXCL)) RETURN ENDPGM
コマンド SNDLCKMSG を導入して、
CRTCMD MYOBJLIB/SNDLCKMSG PGM(MYOBJLIB/SNDLCKMSGC) SRCFILE(MYSRCLIB/QCMDSRC) AUT(*ALL)
でコンパイル
CLP SNDLCKMSGC を導入して、
CRTCLPGM MYOBJLIB/SNDLCKMSGC SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
でコンパイル