db2の試用版Express-Cの9.7を主にExplainをしたいがために自宅PCにインストール。
インスタンスオーナ、常用ドメインユーザでExplainしようにもエラーばっかり。
とにかく常用ドメインユーザでExplainしてみたかったんです。
あきらめてから、気がついたら1年経過してました。
ちくしょー!
今回それをなんとか解消したので経緯などを。
【事前情報】
OS:windowsXP
ユーザ:インスタンスオーナ、常用windowsドメインユーザの2種類
【DB構成方法】
サンプルDB作成後、テスト用スキーマを生成。
インスタンスオーナ名のスキーマで、Explain.DDLを実行。
テスト用スキーマでも、Explain.DDLを実行。
常用windowsドメインユーザにDB2ADM権限を付与。
【実施したコマンド】
db2 connect to sample
db2 set current schema testschema
db2 set current explain mode explain
db2 -tf selectForExplain.sql
db2 set current explain mode no
db2exfmt -d sample -e testschema -g -# 0 -n %% -s %% -w -1 -o explainResult.log
db2 set current schema testschema
db2 set current explain mode explain
db2 -tf selectForExplain.sql
db2 set current explain mode no
db2exfmt -d sample -e testschema -g -# 0 -n %% -s %% -w -1 -o explainResult.log
【症状】
(1)インスタンスオーナではExplainコマンドは実行できるが、テスト用のスキーマに作ったExplain表からdb2exfmtで結果を取得しようとした場合、下記のメッセージが表示される。
・メッセージ
No Explain instances (plans) were found for database , source
pattern: %.% for explain table schema DB2.
pattern: %.% for explain table schema DB2.
(2)windowsのドメインユーザで「コマンド行ツール」->「コマンドウィンドウ」でプロンプトを立ち上げて、該当のDBにコネクト。その後Explainコマンドを実施すると、「SQL0219N」が発生し、Explain表ありませんと言われてしまう。
【原因】
(1)各スキーマに作成されたExplain_Instanceテーブルを確認した結果、インスタンスオーナ用スキーマにはExplain結果が入っているが、テスト用スキーマには全く結果が入っていないという状況だった。
(2)そもそも[ドメインユーザ.Explain_Instance]がないのが原因。ドメインユーザのスキーマもない状態なので当たり前。
【勘違いしてたこと】
db2 set current schema testschema のターゲットスキーマのExplain_InstanceにExplain結果が保存されると思っていたが、実はユーザ名スキーマのExplain_Instanceに結果が保存される。
だから、db2exfmtでスキーマをtestschemaとしてしまっていたり、ドメインユーザのExplainで[ドメインユーザ.Explain_Instance]がありませんと言われても、「???」な状態だった。
まぁ。。。マニュアル読めよって話です。
設定で変えられるのかな・・・?このあたりは未確認。
【解消方法】
(1)db2exfmtのスキーマ指定「-e testschema」を「-e [インスタンスオーナ名]」とした所、正常に結果が取得できた。
db2exfmt -d sample -e [インスタンスオーナ名] -g -# 0 -n %% -s %% -w -1 -o explainResult.log
(2)そもそもExplain表が存在しないエラーが発生していたので、改めてこのユーザでプロンプトを立ち上げ、Explain.DDLを実行した所、ドメインユーザ名のスキーマが作成され、Explain表が生成された。この後はExplainコマンドでエラーは発生しなくなり、下記コマンドで取得が可能になった。
db2exfmt -d sample -e [ドメインユーザ名] -g -# 0 -n %% -s %% -w -1 -o explainResult.log
【雑感】
なんだかな。
自分の知識不足を露呈していますが、
誰かしら助かるならいっかと( ´∀`)
【補足】
DB2使うたびにいちいちログオフして、いちいちインスタンスオーナにユーザを切り替えるのが面倒くさー。
という人のために常用ドメインで実行するコマンドを用意いたしました。
この一行を書いたテキストを.batファイルとして作成しておけばOKです。
runas /u:[インスタンスオーナ名] db2cw.bat
Explain表を作成する DB2逆引き
0 件のコメント:
コメントを投稿