http://www-01.ibm.com/support/docview.wss?uid=std36cc3a83530481f00492574890006c57d 概要 |
---|
002F03EC【DBRMモジュールを作成したデータセット(仮にDBRMAとする)に対してBIND PLANを実行した場合は正常終了するのですが、作成したDBRMモジュールを別のデータセットにIEBCOPYでコピーしてからコピー先のデータセット(仮にDBRMBとする)に対してBIND PLANを実行するとSQLCODE-818で異常終了しました。】 |
内容/目次 |
<<< QUESTION >>> 2008/06/19 17:48:31
z/OS V1.4, DB2 V7の環境です。
DBRMモジュールを新たに作成し、作成されたPLANに対してBIND PLANを実行しています。
DBRMモジュールを作成したデータセット(仮にDBRMAとする)に対してBIND PLANを実行した場合は正常終了するのですが、作成したDBRMモジュールを別のデータセットにIEBCOPYでコピーしてからコピー先のデータセット(仮にDBRMBとする)に対してBIND PLANを実行するとSQLCODE-818で異常終了しました。
SQLCODE-818はタイムスタンプのエラーで、当初作成したDBRMモジュールを別データセットにコピーしたことでタイムスタンプに不整合が起こったのではと推測していますが実際の仕様を確認させてください。
DB2がDBRMモジュールの場所を認識しているため、別データセットにコピーした場合はBIND PLANを実行できないのでしょうか?
<<< ANSWER >>> 2008/06/20 13:25:38
SQLCODE:-818で言っているTimestampとは、DB2 PrecompilerがDBRM内に書き出したTimestampを指します。
コピー時のファイルなどに対するTimestampは参照していません。
ロードモジュールを作成した時に作成されたDBRMを使用してBINDする必要があります。
DB2 Precompilerの出力結果のプログラム・ソースから作成されたロード・モジュールと同じタイミングで作成されたDBRMからBINDされたPLAN/PACKAGEを使用しないと実行することはできません。
別のデータセットにコピーしてBINDすることは可能です。
REBIND時などのためにBIND時に保管場所はDB2 Catalog内にも保管されていますが、BIND時はデータセットが入力(但し、COPYオプション指定時など例外もあります)となる為、保管場所は任意となります。
<<< QUESTION >>> 2008/06/23 10:19:51
概ねは理解しましたが、回答内のコメントについて確認させてください。
Q1)
2行目の『コピー時のファイルなどに対するタイムスタンプは参照していません。』は、コピー時にファイルに直接タイムスタンプを書き込んでいるのではなく、コピー時にPDSのディレクトリーに書き込まれたタイムスタンプは参照していないということを言っているのでしょうか?
Q2)
最後の行の『REBIND時などのためにBIND時に保管場所はDB2 Catalog内にも保管されています』は、 DB2プリコンパイラーがプログラムのロード・モジュール内に書き出したタイムスタンプとDBRM内に書き出したタイムスタンプに加えて、BIND時にはDB2カタログ内にもタイムスタンプを保管しているため、 REBIND時はロード・モジュールやDBRMを別のデータセットに移動(コピー)してREBINDすることはできないということを言っているのでしょうか?
Q3)
また、最後の『BIND時はデータセットが入力となる為、保管場所は任意となります。』とは具体的にどのようなことを言っているのでしょうか?
<<< ANSWER >>> 2008/06/23 11:26:18
A1)
はい、その認識で問題ありません。
DB2が参照しているのはDB2 Precompilerが(プログラム・ソースとDBRMに対して)書き込んでいるTimestampです。
A2)
いいえ
「REBINDコマンド」は、Packageを参照しています。例えば、(プログラムには変更がないが)索引を追加した時や権限を変更した時に内容をPackageに反映したい場合などに使用します。
プログラムの変更が必要で、DBRMを入力にするのであれば、「REBINDコマンド」ではなく「BINDコマンド」を使用します。この場合は、DBRM(データセット・メンバー)が入力となります。「BINDコマンド」は、LIBRARYオプションで入力とするデータセットを入力します(MEMBERオプションでメンバー名を指定)
A3)
(繰り返しになりますが)前回回答のBINDとREBINDはそれぞれコマンドを指しており、異なるものと認識ください。
基本的にはBINDはDBRMを入力にして実行します。コマンドのLIBARYオプション(もしくはJCLのDBRMLIB DD)に指定されたライブラリを参照していますので、移動しても問題ありません。
以上
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21018850/viewspace-1021473/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21018850/viewspace-1021473/