3.12.CPYFでロックがかかる? |
有るプログラムで、何ヶ月かに一度、RPGで、エラーを起こすものがありました。それは、対話型のプログラムですが、RPGが暗黙の更新オープンをしているときに、xxODRMPというファイルの割り振りエラーなのです。そこでいろいろ調べているうちに、別のジョブで、全く同じ時間(まあ1秒くらいの差がありましたが)で、CPYFをしている事に気づきました。
CPYFをしているプログラムでは、エラーになっていません。これが原因かなぁ、でも変です。*REPLACEなら、メンバーのRMVMをするはずなので、ロックするのは分かります。でも、*ADDなのになぁ。そこで調べてみました。 まずは、アロック(割り振り)に関してのおさらいです。 CL(制御言語)プログラミングバージョン 3資料番号 SC88-5498-00
基本的に、OS400の上で何か作業をすれば、原則的に、参照されたオブジェクトは何かしらロックされると思った方がいいですね。大抵、*SHRRDです。これが一番弱いロックです。最強のロックは*EXCLです。*SHRRDは、*EXCL以外すべてで使えます。*SHRUPD同士、*SHRNUP同士はエラーになりません。*SHRNUPを有るジョブが取ると、*SHRUPD出来ないので、更新できない仕組みです。逆もそうですね。ま、早いもの勝ちです。これらのロック状態は、お互いにお互いの立場をわきまえるために存在しているだけです。すべてOKな*SHRRDなんて要らないじゃないか、と思うかもしれませんが、*EXCLがそれをはじき、*EXCLRDは、それを受け入れるので、*SHRRDの存在が必要なのですね。 次に、RPGが、更新オープンしたファイルのロックはどうなるのか調べました。 RPG/400 使用者の手引き 資料番号 SC88-5203-00
これで、更新の時に、エラーが起きるとすれば、相手は、*EXCLか、*EXCLRDか、*SHRNUPとなりますよね。 CPYFに関して調べてみました。 AS/400 アドバンスト・シリーズ データ管理バージョン 3 資料番号 SC88-5494-00
コピー・コマンドによるコピーが進行中のコピー先ファイルに対して使用してはならない機能の例、なんて皆さんご存知でしたか?コピー中はいつもWRKOBJLCKしてはいけないのだろうか?まあ、今回の調査目的は、コピー側のエラーではなくて、コピー先のファイルが、RPGの更新オープンでエラーになったわけで、関係ないですけど。 CL(制御言語)解説書 バージョン3 資料番号 SC88-5499-001.6.30 CPYF(ファイル・コピー)コマンド
多分、上と同じ事を言ってますね。BTW (By the way)、MBROPT(*UPDADD)って使ったこと無かった。 結論自分は正しいことをしていると思うのです。RPGの更新オープン=*SHRUPDで、CPYFの*ADDならば、同じく*SHRUPDです。この場合、エラーは起きないはずなのですが...2番目に出ていた、物理ファイルから別の物理ファイルにコピーするときは、次のようにより強力なロックをメンバーに施して、内部システム機能でコピーを実行することができるようにすることもあります 。ってどういう場合なのでしょう?論理ファイルなら良かったのでしょうか?結局、よく分からないまま、このページは終わりです。気分悪いなぁ。 以上 1999/8/28 |
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||