IBM i (AS/400)の ライブラリーリストって何ですか?
Question
システム担当としてIBM i (AS/400)を管理、使用することとなりました。バッチ処理をしようとプログラムを投入しましたが、エラーとなって処理ができませんでした。対話で実行すると、正常に完了します。先輩に「ライブラリーリストが悪いんじゃないの」と言われました。ライブラリーリストって何ですか、どのようなものになりますでしょうか。
Answer
簡単なようで、一言では言い表すことが難しいものかも知れません。 メーカーのナレッジセンターには以下のように解説されています。
ライブラリー・リスト https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/rbam6/ulibl.htm
「システムは、ライブラリー・リストを使用してオブジェクトを見つけます。」「ライブラリー・リストは、 次の 4 つの部分から成り立っています。」
・システム部分 ← システム値のQSYSLIBL(ライブラリー・リストのシステム部分)
・プロダクト(実行)ライブラリー ←プロダクト・ライブラリー (例えば、QRPG など) はシステムにより管理され、 必要に応じてライブラリーリスト内のプロダクト・ライブラリーとして確保されている位置に入れられます。
・現行ライブラリー
・ユーザ部分 ← システム値のQUSRLIBL(ライブラリー・リストのユーザー部分)
この表現から、処理を実行する時には必要とするオブジェクトはライブラリーリストの中の ライブラリーに存在していないとなりません。
対話で処理をしている時に自分自身のライブラリーリストがどのような状態かを確認するには DSPLIBL(ライブラリー・リスト表示)コマンドで可能です。
DSPLIBLをした時にSYSとあれば、先ほどの「システム部分」、PRDは「プロダクト」、 CURは「現行ライブラリー」、最後にUSRであれば、「ユーザ部分」となります。
該当のオブジェクトが存在するか、WRKOBJコマンドで確認してください。 このとき、ライブラリーを指定しない場合デフォルトが*LIBLになっていますので、ライブラリーリストに存在していないと表示されません。
*LIBL:現行スレッドのライブラリー・リスト内のすべてのライブラリーが表示されます。 もし、表示されない場合は、どのライブラリーにあるか、WRKOBJと入力し、F4でプロンプトを 出し、「ライブラリー」を「*LIBL」から「*ALL」に変更後、実行してどのライブラリーに存在しているかを 確認し、該当のライブラリーをライブラリーリストに追加する必要があります。
ライブラリー・リストの変更 https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/rbam6/chglibl.htm
上記のナレッジを読むと、「ジョブ投入 (SBMJOB) ・・・・」の解説も出ていますのでご参照ください。
今回のご質問の、対話では問題がなくバッチでは失敗すると言うところに関しては、 対話の時のいわゆるサインオンした時に、初期プログラム(または手動で変更)で、 ライブラリーリストを変更しているが、バッチの時にライブラリーリストを変更(追加)していないことが考えられます。
1日も早く、ライブラリーリストの概念や設定方法を勉強し、先輩に負けないように頑張ってください。
by けやきのじぃじ