サポートチーム便り2011.02.23
ロック・オブジェクト上でSAVを使用する
Question
毎晩保存するデータの中に、IFS 中のあるディレクトリーがあります。次のような SAV コマンドを使用しています。
SAV DEV ('/QSYS.LIB/TAP01.DEVD') + OBJ(('/CREATE!FORM2/*') ('/HTTP/*') + ('/WWW/*') ('/NETDATA/*') ('/INFOR/*') + ('/ETC/*') ('/HOME/*') ('/CREATE!SEND/*') + ('/QIBM/USERDATA/*')) SAVACT(*YES) + ENDOPT(*LEAVE)
SAVACT(*YES) を指定して強制的にアクティブ・オブジェクトを保存する代わりに、SAV コマンドでジョブがハングし、ジョブを終了しなければならない夜があります。ジョブを強制終了する直前に、ジョブ・ログに「Object in use (オブジェクトが使用中です)」というエラー・メッセージが出されます。使用中のオブジェクトは保存できるのか、できないのかどちらでしょうか。
Answer
SAVACT *YES の指定には、いまだにオブジェクトの保存にロックが必要なため、常にロックされていると、保存できません。SAVACT *YES を指定すると、SAV コマンドがアクティブなオブジェクトがアンロックされるのを待機するだけです。解放された時点でオブジェクトをロックし、保存して、またアンロックします。ほとんどのオブジェクトは、常にロックされた状態の間を言ったり来たりするため、SAV プロセスは一定期間ハングし、SAVACT *YES を使用する場合にロックされるのを待ちます。SAVACT *YES を指定しない場合、SAV コマンドはロックを待機しません。オブジェクトがロックされていることが検出されるとすぐに、あきらめて次のオブジェクトに進みます。これは *USRSPC オブジェクトや常に使用中の他の IFS オブジェクトで頻繁に発生します。日常の保存からはこれらのオブジェクトを省き、システム全体の保存時 (制限あり) に保存するのがよいでしょう。