QUERYやSQLの挙動が変わるQAQQINIとは?
Question
弊社で利用しているIBM i (AS/400)には区画がいくつかあり、本番環境で運用している照会プログラムを開発環境でテストしようと実行しました。
しかし開発環境での実行時にQUSRSYS に INI ファイルが入っていないため、INI ファイルがない旨のメッセージを受け取り、プログラムが途中終了してしまいました。
本番環境にはこのファイルは存在しているようなのですが、開発環境にコピーできるものでしょうか。
そもそもQAQQINIとはなんでしょうか。
Answer
まずはQAQQINIについてご案内させていただきます。
厳密には異なりますが、QAQQINIは照会オプション・ファイルと呼ばれ、QUERYの最適化を目的とした"索引の方針"が書かれているファイルとお考えください。
このファイルに記述する紹介オプションは下記を参考にしてください。
参考:(QAQQINI 照会オプション)
https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzajq/qryopt.htm
例えば、アプリケーション・サーバー上でSQL ステートメント・テキストをジョブの CCSID に従って変換するかどうかを指定出来ます。
パラメーターとしては、SQL_TRANSLATE_ASCII_ TO_JOBになります。
¥や/の取り扱い方がオープン技術と異なる箇所があるIBM i (AS/400)では、記述の仕方がIBM i (AS/400)に寄っているときにCCSIDが思わぬ障害になる、ということもあるかもしれません。
さて、ではQAQQINIについて他の環境からコピーできるのか、という点から言えば、可能です。
ただし内部に記述されているオプションが、あくまで"索引の方針"であるとはいえ、各環境によって適切な"索引の方針"がございますので、一概に本番環境でご利用いただいているQAQQINIを、開発環境にコピーしたとしても同様の挙動になる、とは言えません。
環境毎にQAQQINIを用意するのが良いと考えられます。
QUSRSYSにQAQQINIが見当たらないときの対応は下記を参照ください。
参考:(QAQQINI 照会オプション・ファイルの作成)
https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_74/rzajq/createqaqqini.htm
このQAQQINI の元となるファイルはQSYSに存在しています。
ユーザー利用の場合、そのオブジェクトを
CRTDUPOBJ OBJ(QAQQINI)
FROMLIB(QSYS)
OBJTYPE(*FILE)
TOLIB(MYLIB)
DATA(*YES)
にて、QUSRSYSあるいはユーザーライブラリーにコピーするという記述が見受けられます。
ただし明らかに改善が認められるオプションの指定であれば問題有りませんが、索引オプションを指定するのは比較的リスキーな操作になります。
ファイルだけ作成して様子見する所から始める、というのが無難ではないでしょうか。
by 大熊猫橋