11.1.3 拡張SQLエラー情報出力機能
(1) 拡張SQLエラー情報出力機能とは
拡張SQLエラー情報出力機能とは,次の機能のことをいいます。
-
クライアントエラーログ機能の情報(JDBC4.0又はJDBC4.3のType4 JDBCドライバの場合は,Exceptionトレースログのログファイル)に,SQL文,及びパラメタ情報を出力する(クライアントエラーログ機能の情報に,SQL文,及びパラメタ情報を加えた情報をSQLエラー情報といいます)。
-
サーバ側にもSQLエラー情報を出力する(SQLエラー情報を出力するファイルをSQLエラーレポートファイルといいます)。
(2) 利点
-
SQLエラー情報の一元管理
SQLエラーとなった場合,クライアント側だけではなくサーバ側にもSQLエラー情報を出力します。複数のクライアントのSQLエラー情報を,1サーバのSQLエラーレポートファイルに出力するため,SQLエラー情報を一元管理できます。
-
SQL文及びパラメタ情報の出力
エラーとなったSQL文,及びパラメタ情報を出力します。これらの情報から,エラーとなったSQLを調査できます。
(3) 使用方法
拡張SQLエラー情報出力機能を使用する場合,次のシステム定義,又はクライアント環境定義を設定します。
-
拡張SQLエラー情報出力機能の使用有無
pd_uap_exerror_log_useオペランド,又はPDUAPEXERLOGUSEを設定します。HiRDB全体に対して指定する場合はpd_uap_exerror_log_useオペランドを,アプリケーションごとに指定する場合はPDUAPEXERLOGUSEを指定します。
-
SQLエラーレポートファイルの出力先ディレクトリと最大容量
SQLエラーレポートファイルの出力先ディレクトリは,pd_uap_exerror_log_dirオペランドで設定します。また,SQLエラーレポートファイルの最大容量はpd_uap_exerror_log_sizeオペランドで設定します。
-
クライアントエラーログファイル及びSQLエラーレポートファイルに出力するパラメタ情報の最大データ長
pd_uap_exerror_log_param_sizeオペランド,又はPDUAPEXERLOGPRMSZを設定します。HiRDB全体に対して指定する場合はpd_uap_exerror_log_param_sizeオペランドを,アプリケーションごとに指定する場合はPDUAPEXERLOGPRMSZを指定します。
(4) SQLエラー情報の見方
(a) SQLエラーレポートファイルの出力形式
SQLエラーレポートファイルの出力形式を次に示します。
[出力形式]
** UAP ERROR INFORMATION aa....aa bbbbbbbbbbbbbbbbbbbbbbbbbb ** [1] * UAP INFORMATION * [2] UAP_NAME(cc....cc) USERID(dd....dd) IPADDR(ee....ee) CLTPID(ff....ff) THRDID(gg....gg) START_TIME(hhhhhhhhhhhhhhhhhhh) * SERVER INFORMATION * [3] HOST(ii....ii) PORT(jj....jj) PLATFORM(kk....kk) SVRNAME(ll....ll) SVRPID(mm....mm) * SQL INFORMATION * [4] OPTIMIZE_LEVEL(nn....nn) ADDITIONAL_OPTIMIZE_LEVEL(oo....oo) ISOLATION_LEVEL(pp....pp) CNCTNO SQL- OP SEC SQL SQL OP ERROR COUNTER CODE NO CODE WARN TION COUNTER ---------- ---------- ---- ---- ----- ----- ---- ----- rrrrrrrrrr ssssssssss tttt uuuu vvvvv wwwww xxxx yyyyy START-TIME END-TIME EXEC-TIME --------------- --------------- ----------------- zzzzzzzzzzzzzzz AAAAAAAAAAAAAAA BB....BB * SQL MESSAGE * [5] "CC....CC" [DD....DD] * SQL STATEMENT * [6] "EE....EE" * PARAMETER * [7] *ELM NO= FFFFF* *GGGGG* NO=HHHHH COD=III XDIM=JJJJJ SYS=KKKKK LEN=LLLLLLLLLLL IND=MMMMMMMMMMM ARRAY NUM=NNNNN DATA=OO....OO
- [説明]
-
-
SQLエラーレポートファイルのタイトル
-
UAP情報
-
サーバ情報
-
SQL情報
-
SQLメッセージ
-
SQL文
-
パラメタ情報
- aa....aa:
-
HiRDBのバージョンを次の形式で出力します(出力文字数は最大8バイト)。
"vv-rr-zz"
-zzがない場合,-zzは出力されません。
- bbbbbbbbbbbbbbbbbbbbbbbbbb:
-
エラー情報を出力した日時を次の形式で出力します(出力文字数は最大26バイト)。
"YYYY/MM/DD hh:mm:ss.uuuuuu"
YYYY:年
MM:月
DD:日
hh:時
mm:分
ss:秒
uuuuuu:マイクロ秒※
- cc....cc:
-
クライアント環境定義PDCLTAPNAMEで指定したUAPの名称を出力します(出力文字数は最大30バイト)。
- dd....dd:
-
コネクトしたユーザの認可識別子を出力します(出力文字数は最大30バイト)。
- ee....ee:
-
UAPのIPアドレスを出力します(出力文字数は最大15バイト)。
- ff....ff:
-
UAPのプロセス番号を表示します(出力文字数は最大10バイト)。
正しいプロセス番号を取得できない場合,不正な数値が表示されることがあります(Windows版の場合)。
- gg....gg:
-
UAPがマルチスレッドで動作している場合,UAPのスレッド番号を表示します(出力文字数は最大11バイト)。マルチスレッドで動作していない場合は0を表示します。
正しいスレッド番号が取得できない場合,不正な数値が表示されることがあります。また,クライアントのバージョンが07-01以前の場合,"*"を出力します。
- hhhhhhhhhhhhhhhhhhh:
-
UAPを実行した時刻を次の形式で出力します(出力文字数は最大19バイト)。
"YYYY/MM/DD hh:mm:ss"
YYYY:年
MM:月
DD:日
hh:時
mm:分
ss:秒
- ii....ii:
-
サーバプロセスが動作しているホストの名称を出力します(出力文字数は最大30バイト)。
- jj....jj:
-
サーバプロセスの通信ポート番号を出力します(出力文字数は最大5バイト)。
- kk....kk:
-
クライアントライブラリが対応しているプラットフォームを出力します(出力文字数は最大6バイト)。
出力内容については,「SQLトレース情報の見方」のUAPが動作しているプラットフォームを参照してください。なお,クライアントのバージョンが07-01以前の場合,"*"を出力します。
- ll....ll:
-
シングルサーバ又はフロントエンドサーバのサーバ名を出力します(出力文字数は最大8バイト)。
- mm....mm:
-
サーバプロセスのプロセス番号を出力します(出力文字数は最大10バイト)。
- nn....nn:
-
SQL最適化オプションの値を10進数形式で出力します(出力文字数は最大10バイト)。
- oo....oo:
-
SQL拡張最適化オプションの値を10進数形式で出力します(出力文字数は最大10バイト)。
- pp....pp:
-
データ保証レベルの値を出力します(出力文字数は最大10バイト)。
- rrrrrrrrrr:
-
サーバがCONNECTを受け付けるごとに順次カウントするコネクト通番を出力します(出力文字数は最大10バイト)。コネクト通番は右詰めで出力し,余白には半角スペースが入ります。
- ssssssssss:
-
SQL文を受け付けるごとにカウントするSQLカウンタを出力します(出力文字数は最大10バイト)。SQLカウンタは右詰めで出力し,余白には半角スペースが入ります。
- tttt:
-
SQLに対応するオペレーションコードを出力します(出力文字数は最大4バイト)。
- uuuu:
-
SQLに対応するセクション番号を出力します(出力文字数は最大4バイト)。セクション番号は右詰めで出力し,余白には半角スペースが入ります。制御系SQL実行時にエラーが発生した場合,"****"を出力します。
- vvvvv:
-
SQLを実行した結果のSQLCODEを出力します(出力文字数は最大5バイト)。SQLCODEは右詰めで出力し,余白には半角スペースが入ります。
- wwwww:
-
警告情報を16進数形式で出力します(出力文字数は最大5バイト)。SQLWARN0〜SQLWARNFの警告情報に,それぞれ左から1ビットを割り当て,警告フラグが設定されているものは1,設定されていないものは0とします。これを4けたの16進数の値として出力します。一つ以上の警告フラグが設定されている場合は先頭に"W"を,設定された警告フラグがない場合は"-"を付けます。例を次に示します。
(例)
- xxxx:
-
システムが使用する情報を出力します(出力文字数は最大4バイト)。
1バイト目が"M"の場合,プロセス間メモリ通信機能を使用していることを示します。ほかの3バイトは,保守用の情報です。ただし,クライアントのバージョンが07-01以前の場合は,"****"を出力します。
- yyyyy:
-
クライアントエラーログファイルに出力する同じSQL文に対応するクライアントエラーログカウンタの値を出力します(出力文字数は最大5バイト)。
この値は右詰めで出力し,余白には半角スペースが入ります。
ただし,クライアントのバージョンが07-01以前の場合は,"*****"を出力します。
- zzzzzzzzzzzzzzz:
-
クライアントからSQL実行要求を受けた時刻を,次の形式で出力します(出力文字数は最大15バイト)。
"hh:mm:ss.uuuuuu"
hh:時
mm:分
ss:秒
uuuuuu:マイクロ秒
- AAAAAAAAAAAAAAA:
-
クライアントからの要求に対する処理が終了した時刻を,次の形式で出力します(出力文字数は最大15バイト)。
"hh:mm:ss.uuuuuu"
hh:時
mm:分
ss:秒
uuuuuu:マイクロ秒※
- BB....BB:
-
クライアントからの要求に対する処理時間を,次の形式で出力します(出力文字数は最大17バイト)。秒は右詰めで出力し,余白には半角スペースが入ります。
"ssssssssss.uuuuuu"
ssssssssss:秒
uuuuuu:マイクロ秒※
- CC....CC:
-
SQL実行中に発生したメッセージを出力します(出力文字数は最大254バイト)。
- DD....DD:
-
システムが使用する情報を出力します(出力文字数は最大21バイト)。
- EE....EE:
-
SQL文を出力します(出力文字数は最大2000000バイト)。
SQL文中に注釈(コメント)やSQL最適化指定を記述している場合,それらも含めて出力します。制御系SQL実行時にエラーとなった場合,"*"を出力します。注釈,及びSQL最適化指定については,マニュアル「HiRDB SQLリファレンス」を参照してください。
- FFFFF:
-
配列を使用したSQLでエラーが発生した場合,その要素の番号を出力します(出力文字数は最大5バイト)。
- GGGGG:
-
入力用パラメタ情報の場合はINPRM,出力用パラメタ情報の場合はOUTRMを出力します。また,入出力用パラメタ情報の場合,入力情報はINPRM,出力情報はOUTRMを出力します(出力文字数は最大5バイト)。
- HHHHH:
-
パラメタ番号を出力します(出力文字数は最大5バイト)。
- III:
-
データ型コードを出力します(出力文字数は最大3バイト)。
- JJJJJ:
-
配列要素数を出力します(出力文字数は最大5バイト)。
- KKKKK:
-
ギャップを含む1要素の領域の長さを出力します(出力文字数は最大5バイト)。
- LLLLLLLLLLL:
-
データの長さを出力します(出力文字数は最大11バイト)。
- MMMMMMMMMMM:
-
標識変数の値を出力します(出力文字数は最大11バイト)。
- NNNNN:
-
繰返し列を含む場合,繰返し列の要素数を出力します(出力文字数は最大5バイト)。繰返し列を含まない場合は出力されません。
- OO....OO:
-
パラメタ情報を出力します(出力文字数はpd_uap_exerror_log_param_sizeオペランドの指定値)。パラメタ情報には入力用パラメタ情報,出力用パラメタ情報,及び入出力用パラメタ情報があります。パラメタ情報についての規則を次に示します。
-
入力用パラメタがBLOB型の位置付け子,又はBINARY型の位置付け子の場合,BLOB型の位置付け子,又はBINARY型の位置付け子の値を出力します。
-
標識変数がマイナスの値の場合,"DATA="まで出力します。
-
パラメタ情報が複数ある場合,パラメタ情報の指定順に出力します。
-
同様のデータが2行以上続く場合,"--- SAME x LINES ---"(xが行数)を出力します。
-
パラメタ情報は,実データ長+データ領域長サイズ分出力します。
-
繰返し列の場合,ARRAY NUMに繰返し列の要素数を出力します。
-
繰返し列の場合,"DATA"の前に繰返し要素ごとの標識変数を出力します。
-
繰返し列の場合,"DATA"の後に括弧付きで繰返し列の要素番号を出力します。
-
- 注※
-
PDUAPEXERLOGUSEを省略し,pd_uap_exerror_log_useがAUTOの場合,「uuuuuu:マイクロ秒」を出力しません。
-
(b) クライアントエラーログファイルの出力形式
拡張SQLエラー情報出力機能を使用した場合の,クライアントエラーログファイルの出力形式を次に示します。
[出力形式]
> 8355 0 8393 9 2005/08/12 14:06:30 KFPZ03000-I Error information, type=CONNECT STATUS, inf=CLT=07-02(Aug 4 2005):WS SVR=07-02 US:WS LIBTYPE=UNIX_32 > 8355 0 8393 10 2005/08/12 14:06:30 KFPZ03000-I Error information, type=SQL STREAM, inf=insert into t1 values ( ? , ? ,? ) >> 8355 0 8393 11 2005/08/12 14:06:30 SQLCODE:-404 47(140630218) sqaexp0.c :2348 AUX KFPA11404-E Input data too long for column or assignment target in variable 3 UAP userprog1,hiuser01 [1] SVR host03,1146,sds,hp [2] SQLINF 1034,1,2,7,17,-0000,0000,14:06:30.216463,14:06:30.217765,0.001302 [3] SQL INSERT INTO T1 VALUES(?,?,?) [4] PRM [5] INPRM 1,f1,1,0,4,0 DATA=00 00 ff ff *.... * INPRM 2,c1,10,258,255,9 ARRAY NUM= 9 0 DATA( 0)=00 01 61 *..a * 0 DATA( 1)=00 02 61 62 *..ab * 0 DATA( 2)=00 03 61 62 63 *..abc * 0 DATA( 3)=00 04 61 62 63 64 *..abcd * 0 DATA( 4)=00 05 61 62 63 64 65 *..abcde * 0 DATA( 5)=00 06 61 62 63 64 65 66 *..abcdef * 0 DATA( 6)=00 07 61 62 63 64 65 66 67 *..abcdefg * 0 DATA( 7)=00 08 61 62 63 64 65 66 67 68 *..abcdefgh * -1 DATA( 8)= INPRM 3,93,1,0,32002,0 DATA=00 00 00 00 00 00 7d 02 41 41 41 41 41 41 41 41 *......}.AAAAAAAA* 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 *AAAAAAAAAAAAAAAA* --- SAME 14 LINES ---
- [説明]
-
1.UAP情報
- UAP名称:
-
クライアント環境定義PDCLTAPNAMEで指定したUAPの名称を出力します。
- 認可識別子:
-
コネクトしたユーザの認可識別子を出力します。
2.サーバ情報
- ホスト名:
-
サーバプロセスが動作しているホストの名称を出力します。
- ポート番号:
-
サーバプロセスの通信ポート番号を出力します。
- サーバ名:
-
シングルサーバ又はフロントエンドサーバのサーバ名を出力します。
- プラットフォーム:
-
クライアントライブラリが対応しているプラットフォームを出力します。
出力内容については,「SQLトレース情報の見方」のUAPが動作しているプラットフォームを参照してください。なお,クライアントのバージョンが07-01以前の場合,"*"を出力します。
3.SQL情報
- SQL最適化オプション:
-
SQL最適化オプションの値を10進数形式で出力します。
- SQL拡張最適化オプション:
-
SQL拡張最適化オプションの値を10進数形式で出力します。
- データ保証レベル:
-
データ保証レベルの値を出力します。
- コネクト通番:
-
サーバがCONNECTを受け付けるごとに順次カウントするコネクト通番を出力します。
- セクション番号:
-
SQLに対応するセクション番号を出力します。
- SQLWARN:
-
警告情報を16進数形式で出力します。SQLWARN0〜SQLWARNFの警告情報に,それぞれ左から1ビットを割り当て,警告フラグが設定されているものは1,設定されていないものは0とします。これを4けたの16進数の値として出力します。一つ以上の警告フラグが設定されている場合は先頭に"W"を,設定された警告フラグがない場合は"-"を付けます(例については,「SQLエラーレポートファイルの出力形式」のwwwwwを参照してください)。
- システム情報:
-
システムが使用する情報を出力します。
1バイト目が"M"の場合,プロセス間メモリ通信機能を使用していることを示します。ほかの3バイトは,保守用の情報です。ただし,クライアントのバージョンが07-01以前の場合は,"****"を出力します。
- SQL開始時刻:
-
クライアントからSQL実行要求を受けた時刻を,次の形式で出力します。
"hh:mm:ss.uuuuuu"
hh:時
mm:分
ss:秒
uuuuuu:マイクロ秒※
- SQL終了時刻:
-
クライアントからの要求に対する処理が終了した時刻を,次の形式で出力します。
"hh:mm:ss.uuuuuu"
hh:時
mm:分
ss:秒
uuuuuu:マイクロ秒※
- SQL実行時間:
-
クライアントからの要求に対する処理時間を,次の形式で出力します。秒は右詰めで出力し,余白には半角スペースが入ります。
"ssssssssss.uuuuuu"
ssssssssss:秒
uuuuuu:マイクロ秒※
4.SQL文
- SQL文:
-
SQL文を出力します。
SQL文中に注釈(コメント)やSQL最適化指定を記述している場合,それらも含めて出力します。出力するSQL文のサイズは,クライアント環境定義のPDSQLTEXTSIZEの指定値になります。
制御系SQL実行時にエラーとなった場合,SQL文は取得できません。この場合,"*"を出力します。
注釈,及びSQL最適化指定については,マニュアル「HiRDB SQLリファレンス」を参照してください。
5.パラメタ情報
- ELM NO:
-
配列を使用したSQLでエラーが発生した場合,その要素の番号を出力します。
- パラメタ情報種別:
-
入力用パラメタ情報の場合はINPRM,出力用パラメタ情報の場合はOUTRMを出力します。また,入出力用パラメタ情報の場合,入力情報はINPRM,出力情報はOUTRMを出力します。
- NO:
-
パラメタ番号を出力します。
- COD:
-
データ型コードを出力します。
- XDIM:
-
配列要素数を出力します。
- SYS:
-
ギャップを含む1要素の領域の長さを出力します。
- LEN:
-
データの長さを出力します。
- IND:
-
標識変数の値を出力します。
- ARRAY NUM:
-
繰返し列を含む場合,繰返し列の要素数を出力します。繰返し列を含まない場合は出力されません。
- DATA:
-
パラメタ情報を出力します。
パラメタ情報には入力用パラメタ情報,出力用パラメタ情報,及び入出力用パラメタ情報があります。
パラメタ情報についての規則を次に示します。
-
入力用パラメタがBLOB型の位置付け子,又はBINARY型の位置付け子の場合,BLOB型の位置付け子,又はBINARY型の位置付け子の値を出力します。
-
標識変数がマイナスの値の場合,"DATA="まで出力します。
-
パラメタ情報が複数ある場合,パラメタ情報の指定順に出力します。
-
同様のデータが2行以上続く場合,"--- SAME x LINES ---"(xが行数)を出力します。
-
パラメタ情報は,実データ長+データ領域長サイズ分出力します。
-
繰返し列の場合,ARRAY NUMに繰返し列の要素数を出力します。
-
繰返し列の場合,"DATA"の前に繰返し要素ごとの標識変数を出力します。
-
繰返し列の場合,"DATA"の後に括弧付きで繰返し列の要素番号を出力します。
-
- 注※
-
PDUAPEXERLOGUSEを省略し,pd_uap_exerror_log_useがAUTOの場合,「uuuuuu:マイクロ秒」を出力しません。
(5) SQLエラーレポートファイルについての規則
SQLエラーレポートファイルについての規則を次に示します。なお,SQLエラーレポートファイルを参照する場合は,テキストエディタなどを使用してください。
-
SQLを実行し,エラーの発生を検知するたびにSQLエラーレポートファイルのオープン,SQLエラー情報の書き込み,クローズをします。SQLエラーレポートファイルの最終位置から追加書き込みをするため,SQLエラー情報はファイル内で時系列順に蓄積されます。
-
SQLエラーレポートファイルは二つ作成されます(pduaperrlog1及びpduaperrlog2)。現在書き込んでいるファイルのサイズが,システム定義のpd_uap_exerror_log_sizeオペランドの指定値を超えた場合に,もう一方のファイルに出力先を切り替えます。切り替わったファイルでも,これを繰り返しながら二つのファイルを交互に使用します(切り替え先の古い内容は削除されます)。HiRDB開始後は,ファイルの最終更新日付の新しい方が出力先となります。
-
SQL終了後は,SQLエラーレポートファイルはクローズしているため,SQLが実行されていないときにOSのコマンドを利用してバックアップを取得したり,ファイルを参照したりできます。また,SQL実行中であっても出力先でないもう一方のファイルはバックアップ取得やファイルの参照ができます。
-
現在使用中のSQLエラーレポートファイルは,OSのdirコマンド(UNIXの場合はls -lコマンド)でファイルの最終更新日付を調べることで知ることができます。このとき,最終更新日時の新しい方が現在使用中のSQLエラーレポートファイルとなります。
(6) 注意事項
-
PDUAPEXERLOGUSE,又はpd_uap_exerror_log_useにYESを指定して拡張SQLエラー情報出力機能を使用すると,SQLエラー情報を出力しない場合でも,SQLの開始時間と実行時間を採取するためにシステムコールを実行する時間が必要になります。性能への影響を最小限にしたい場合は,PDUAPEXERLOGUSEを省略し,pd_uap_exerror_log_useをAUTOにしてください。
-
クライアントエラーログファイル又はSQLエラーレポートファイルへの出力時にOSがエラーを検知した場合(ファイルシステム障害,ファイルの書き込み権限がないなど),クライアントエラーログファイル又はSQLエラーレポートファイルにSQLエラー情報は出力されません。
-
拡張SQLエラー情報出力機能を使用すると,パラメタ情報を出力するためのメモリが必要になります。