データベース関連のトラブルに対処するためには,どのコネクションを使用してデータベースと接続しているかを特定することが重要です。
ここでは,データベース(HiRDBまたはOracle)と接続中にトラブルが発生した場合に,アプリケーションサーバから出力される情報(性能解析トレースやログなど)とデータベースから出力される情報(トレース情報やpdlsコマンドの実行結果,動的パフォーマンスビューの内容など)を使用して,トラブルが発生したコネクションを特定する方法について説明します。
アプリケーションサーバでは,HiRDBおよびOracleとの接続に使用しているコネクションを一意に識別するための接続情報(コネクションID)を性能解析トレースに出力しています。J2EEサーバからデータベースに至るまで,およびデータベースからJ2EEサーバに処理結果が返却されるまでの一連の処理では,関連する構成ソフトウェアのログやトレース情報などにコネクションIDやデータベースサーバで割り振られるコネクト通番などが出力されます。これらの情報を突き合わせて確認することで,トラブルが発生したコネクションを特定できます。
HiRDBを使用する場合,およびOracleを使用する場合のコネクションIDの出力の概要,およびトラブルが発生したコネクションの特定に使用する情報を次に示します。
- HiRDBを使用する場合
コネクションIDの出力の概要を次に示します。
図B-1 コネクションIDの出力の概要(HiRDBの場合)
![[図データ]](figure/zu0b0100.gif)
トラブルが発生したコネクションの特定に使用する情報を次の表に示します。
表B-1 トラブルが発生したコネクションの特定に使用する情報(HiRDBの場合)
項番 | 出力元 | 情報の種類 | 参照先 |
---|
1 | Cosminexus Component Container | 性能解析トレースファイル | 付録B.1 |
2 | SQLException発生時の例外メッセージ |
3 | Cosminexus DABroker Library | 拡張データベースアクセストレース | 付録B.2 |
4 | HiRDBクライアント | SQLトレースファイル | 付録B.3 |
5 | エラーログ情報 |
6 | 再接続トレース |
7 | HiRDBサーバ | pdlsコマンドの実行結果 | 付録B.4 |
コネクションIDには次に示す情報が含まれています。
- サーバ名称
フロントエンドサーバ名(HiRDB/Parallel Server使用時)またはシングルサーバ名(HiRDB/Single Server使用時)が表示されます。
- コネクト通番
サーバ名称に表示されたHiRDBサーバで割り振られるコネクト通番が表示されます。
- サーバのプロセスID
サーバ名称に表示されたHiRDBサーバのプロセスIDが表示されます。
コネクションIDの出力形式と出力例を次に示します。
- コネクションIDの出力形式(HiRDBの場合)
- コネクションIDの出力例(HiRDBの場合)
- 注意
- 07-01以前のバージョンのHiRDBに接続していて,グローバルトランザクションとローカルトランザクションが混在している場合,性能解析トレースに出力されるコネクションIDと実際の接続状態に不整合が生じます。
- 例えば,コネクションの障害検知機能を無効にして,次のようなグローバルトランザクションとローカルトランザクションが混在している処理を実行する場合,6.~8.および9.~13.の処理で性能解析トレースに出力される情報と実際の接続状態に不整合が生じます。
![[図データ]](figure/zu0b0200.gif)
- 6.~8.の処理では,ローカルトランザクションのコネクションIDは出力されずに,グローバルトランザクションのコネクションIDが出力されます。
- 9.~13.の処理では,グローバルトランザクションのコネクションIDは出力されずに,ローカルトランザクションのコネクションIDが出力されます。
- このように,ローカルトランザクションのコネクションIDや,ローカルトランザクション実行後のグローバルトランザクションのコネクションIDを追跡することはできません。なお,7.のローカルトランザクションの処理で,コネクションが切り替わりますが,アプリケーションサーバには通知されません。
- グローバルトランザクションとローカルトランザクションの混在は,使用するDBConnectorのトランザクションサポートレベルがXATransactionの場合に,トランザクションを開始する前にコネクションを取得してSQLを実行したときにも発生します。
- 参考
- グローバルトランザクションの処理中に,エラーが発生してコネクションが切断されると自動的に再接続されます。しかし,この再接続処理は再接続トレースには出力されません。この場合,再接続トレースに出力されるコネクションIDと実際の接続情報に不整合が生じます。ただし,基本的にグローバルトランザクションの処理中にコネクションが切断されることはありません。
- Oracleを使用する場合
コネクションIDの出力の概要を次に示します。
図B-2 コネクションIDの出力の概要(Oracleの場合)
![[図データ]](figure/zu0b0300.gif)
トラブルが発生したコネクションの特定に使用する情報を次の表に示します。
表B-2 トラブルが発生したコネクションの特定に使用する情報(Oracleの場合)
項番 | 出力元 | 情報の種類 | 参照先 |
---|
1 | Cosminexus Component Container | 性能解析トレースファイル | 付録B.1 |
2 | SQLException発生時の例外メッセージ |
3 | Cosminexus DABroker Library | 拡張データベースアクセストレース | 付録B.2 |
4 | Oracleクライアント | Netクライアントトレース | 付録B.5 |
5 | Oracleサーバ | アラートファイル | 付録B.6 |
6 | ユーザトレース |
7 | Netサーバトレース |
8 | 動的パフォーマンスビュー |
コネクションIDには次に示す情報が含まれています。
- インスタンス名
Oracleサーバのインスタンス名が表示されます。
- セッションID
Oracleサーバで割り振られるセッションIDが表示されます。
- セッションシリアル番号
Oracleサーバで割り振られるセッションのシリアル番号が表示されます。
- OSプロセスID
OSのプロセスIDが表示されます。
- コネクションIDの出力形式(Oracleの場合)
インスタンス名:セッションID:セッションシリアル番号:OSプロセス名 |
- コネクションIDの出力例(Oracleの場合)
コネクション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のプロパティ定義の設定方法については,マニュアル「Cosminexus アプリケーションサーバ アプリケーション設定操作ガイド」の「4.2.2 DB Connectorのプロパティ定義」を参照してください。
- 注意
- Oracleの透過的アプリケーションフェイルオーバーを使用している場合,PRFトレースに出力されるコネクションIDと実際に接続しているコネクションIDが異なることがあります。これはOracle内でコネクションが再接続されているためです。PRFトレースに出力されるコネクションIDと実際に接続しているコネクションIDが異なる場合,コネクションIDでOracleのトレース情報を追跡することはできません。
- <この節の構成>
- 付録B.1 Cosminexus Component Container
- 付録B.2 Cosminexus DABroker Library
- 付録B.3 HiRDBクライアント
- 付録B.4 HiRDBサーバ
- 付録B.5 Oracleクライアント
- 付録B.6 Oracleサーバ