付録B データベースと接続中にトラブルが発生したコネクションの特定
データベース関連のトラブルに対処するためには,どのコネクションを使用してデータベースと接続しているかを特定することが重要です。
ここでは,データベース(HiRDBまたはOracle)と接続中にトラブルが発生した場合に,アプリケーションサーバから出力される情報(性能解析トレースやログなど)とデータベースから出力される情報(トレース情報やpdlsコマンドの実行結果,動的パフォーマンスビューの内容など)を使用して,トラブルが発生したコネクションを特定する方法について説明します。
アプリケーションサーバでは,HiRDBおよびOracleとの接続に使用しているコネクションを一意に識別するための接続情報(コネクションID)を性能解析トレースに出力しています。J2EEサーバからデータベースに至るまで,およびデータベースからJ2EEサーバに処理結果が返却されるまでの一連の処理では,関連する構成ソフトウェアのログやトレース情報などにコネクションIDやデータベースサーバで割り振られるコネクト通番などが出力されます。これらの情報を突き合わせて確認することで,トラブルが発生したコネクションを特定できます。
HiRDBを使用する場合,およびOracleを使用する場合のコネクションIDの出力の概要,およびトラブルが発生したコネクションの特定に使用する情報を次に示します。
-
HiRDBを使用する場合
コネクションIDの出力の概要を次に示します。
図B‒1 コネクションIDの出力の概要(HiRDBの場合) トラブルが発生したコネクションの特定に使用する情報を次の表に示します。
表B‒1 トラブルが発生したコネクションの特定に使用する情報(HiRDBの場合) 項番
出力元
情報の種類
参照先
1
Component Container
性能解析トレースファイル
2
SQLException発生時の例外メッセージ
3
HiRDBクライアント
SQLトレースファイル
4
エラーログ情報
5
再接続トレース
6
HiRDBサーバ
pdlsコマンドの実行結果
コネクションIDには次に示す情報が含まれています。
-
サーバ名称
フロントエンドサーバ名(HiRDB/Parallel Server使用時)またはシングルサーバ名(HiRDB/Single Server使用時)が表示されます。
-
コネクト通番
サーバ名称に表示されたHiRDBサーバで割り振られるコネクト通番が表示されます。
-
サーバのプロセスID
サーバ名称に表示されたHiRDBサーバのプロセスIDが表示されます。
コネクションIDの出力形式と出力例を次に示します。
コネクションIDの出力形式(HiRDBの場合)
サーバ名称:コネクト通番:サーバのプロセスID
コネクションIDの出力例(HiRDBの場合)
fes01:15:2351
- 参考
-
グローバルトランザクションの処理中に,エラーが発生してコネクションが切断されると自動的に再接続されます。しかし,この再接続処理は再接続トレースには出力されません。この場合,再接続トレースに出力されるコネクションIDと実際の接続情報に不整合が生じます。ただし,基本的にグローバルトランザクションの処理中にコネクションが切断されることはありません。
-
-
Oracleを使用する場合
コネクションIDの出力の概要を次に示します。
図B‒2 コネクションIDの出力の概要(Oracleの場合) トラブルが発生したコネクションの特定に使用する情報を次の表に示します。
表B‒2 トラブルが発生したコネクションの特定に使用する情報(Oracleの場合) 項番
出力元
情報の種類
参照先
1
Component Container
性能解析トレースファイル
2
SQLException発生時の例外メッセージ
3
Oracleサーバ
アラートファイル
4
ユーザトレース
5
Netサーバトレース
6
動的パフォーマンスビュー
コネクションIDには次に示す情報が含まれています。
-
インスタンス名
Oracleサーバのインスタンス名が表示されます。
-
セッションID
Oracleサーバで割り振られるセッションIDが表示されます。
-
セッションシリアル番号
Oracleサーバで割り振られるセッションのシリアル番号が表示されます。
-
OSプロセスID
OSのプロセスIDが表示されます。
コネクションIDの出力形式(Oracleの場合)
インスタンス名:セッションID:セッションシリアル番号:OSプロセス名
コネクションIDの出力例(Oracleの場合)
ORCL:17:5:920
コネクションIDの生成にはOracleの動的パフォーマンスビューを使用するため,Oracleに接続するユーザが動的パフォーマンスビューの参照権を持っている必要があります。次のどちらかの方法でOracleに接続するユーザに参照権を設定してください。
-
「GRANT SELECT_CATALOG_ROLE TO <ユーザ名>;」を実行する。
-
「GRANT SELECT ON V_$INSTANCE TO <ユーザ名>;」,「GRANT SELECT ON V_$PROCESS TO <ユーザ名>;」,および「GRANT SELECT ON V_$SESSION TO <ユーザ名>;」を実行する。
また,Oracleを使用する場合,DB Connectorのプロパティ定義で,プロパティ項目「ConnectionIDUpdate」の値に「true」を設定すると,コネクションを取得するたびにコネクションIDを生成することができます。ただし,コネクションを取得するたびにコネクションID生成用のSQLが発行されるため,性能に影響を与える可能性があります。再接続が行われない環境では「false」を設定してください。DB Connectorのプロパティ定義の設定方法については,マニュアル「アプリケーションサーバ アプリケーション設定操作ガイド」の「4.2.2 DB Connectorのプロパティ定義」を参照してください。
- 注意事項
-
Oracleの透過的アプリケーションフェイルオーバーを使用している場合,PRFトレースに出力されるコネクションIDと実際に接続しているコネクションIDが異なることがあります。これはOracle内でコネクションが再接続されているためです。PRFトレースに出力されるコネクションIDと実際に接続しているコネクションIDが異なる場合,コネクションIDでOracleのトレース情報を追跡することはできません。
-