ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     WebLogic JTA プログラマーズ ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

トランザクションのトラブルシューティング

 

この章では、トランザクション失敗の原因を突き止めたり、問題修正の手段を決定したりするためのトラブルシューティング ツールおよびタスクについて説明します。

 


トランザクションのトラブルシューティングの概要

WebLogic Server では、実行中のトランザクションをモニタし、ヒューリスティックな終了のケースで適切な情報を確実に取り込むことができます。また、データベース クエリ、トランザクション要求、および Bean メソッドのパフォーマンスをモニタすることもできます。

 


トラブルシューティング ツール

WebLogic Server では、トランザクションのトラブルシューティングで以下の支援を利用できます。

例外

WebLogic JTA では、すべての標準の JTA 例外がサポートされています。標準の JTA 例外の詳細については、javax.transaction および javax.transaction.xa パッケージ API の Javadoc を参照してください。

標準の JTA 例外に加えて、WebLogic Server では weblogic.transaction.RollbackException クラスが提供されます。このクラスは javax.transaction.RollbackException を拡張し、ロールバックの元々の理由を保持します。トランザクションをロールバックする前、つまり rollbackonly に設定する前に、アプリケーションではそのロールバックの理由を提供できます。トランザクション サービスの中で発生したすべてのロールバックではその理由が設定されます。たとえば、タイムアウト、XA エラー、beforeCompletion での非検査例外、あるいはトランザクション マネージャへのアクセス不能などです。一度設定された理由は上書きできません。

トランザクション識別子

トランザクション サービスでは、各トランザクションにトランザクション識別子(Xid)が割り当てられます。この ID は、ログ ファイル内で特定トランザクションの情報を他と区別するために使用できます。トランザクション識別子は、weblogic.transaction.Transaction インタフェースの getXID メソッドを使用して取り出すことができます。トランザクション識別子を取得するメソッドの詳細については、weblogic.transaction.Transaction の Javadoc を参照してください。

トランザクションの名前とプロパティ

WebLogic JTA では、トランザクションの命名とユーザ定義プロパティをサポートする javax.transaction.Transaction の拡張機能が提供されます。それらの拡張機能は、weblogic.transaction.Transaction インタフェースに含まれています。

トランザクション名は、トランザクションの種類(送金やチケット購入など)を示します。したがって、サーバ上のユニークなトランザクションを識別するトランザクション ID とは混同しないでください。トランザクション名を利用すると、例外やログ ファイルでトランザクションの種類を簡単に識別できます。

ユーザ定義のプロパティはキーと値の組み合わせです。この場合のキーはプロパティを識別する文字列であり、値はプロパティに割り当てられた現在の値です。トランザクション プロパティの値は、Serializable インタフェースを実装するオブジェクトでなければなりません。アプリケーションでは、weblogic.transaction.Transaction インタフェースで定義されている set メソッドと get メソッドを使用してプロパティを管理します。一度設定されたプロパティは、有効期間が終わるまでトランザクションと共に存在し、トランザクションがシステムを移動するときにはマシン間で受け渡しされます。プロパティはトランザクション ログに保存され、クラッシュの回復処理で復元されます。トランザクション プロパティが複数回にわたって設定された場合は、最新の値が維持されます。

トランザクション名とトランザクション プロパティを設定および取得するメソッドの詳細については、weblogic.transaction.Transaction の Javadoc を参照してください。

トランザクション ステータス

Java Transaction API では、javax.transaction.Status クラスを使用してトランザクションのステータス コードが提供されます。weblogic.transaction.TransactiongetStatusAsString メソッドを使用すると、トランザクションのステータスを文字列として返すことができます。文字列には、javax.transaction.Status で指定されているメジャー ステートと、補足的なマイナー ステート(loggingpre-preparing など)が含まれます。

トランザクションの統計

トランザクションの統計は、サーバ上のトランザクション マネージャで処理されるすべてのトランザクションについて提供されます。それらの統計には、トランザクションの総数、特定の結果(コミット、ロールバック、ヒューリスティックな終了など)を持つトランザクションの数、ロールバックされたトランザクションの理由別の数、およびトランザクションがアクティブな状態を維持した合計時間が含まれます。トランザクションの統計の詳細については、Administration Console のオンライン ヘルプを参照してください。

トランザクションのモニタ

進行中のトランザクションは、WebLogic Console を使用してモニタできます。 トランザクションの統計で説明されている統計に加えて、以下の情報を表示できます。

トランザクション ログ

各サーバには、システムでのトランザクションの伝播に関する情報を記録するトランザクション ログがあります。トランザクション ログは、永続ストレージに書き込まれ、システムのクラッシュやネットワークの障害からサーバが復旧するのを支援します。トランザクション ログには、直接にはアクセスできません。トランザクション ログのファイルはバイナリ フォーマットです。

トランザクション ログは、複数のファイルで構成されます。各ファイルはガベージ コレクションの影響を受けます。したがって、トランザクション ログ ファイルに必要な記録がない場合は、システムによってファイルが削除され、そのディスク スペースがファイル システムに返されます。また、トランザクション ログ ファイルのサイズが大きくなりすぎた場合は、システムによって新しいログ ファイルが作成されます。

トランザクション ログ ファイルには、パス名プレフィックス、サーバ名、4 桁の数値サフィックス、およびファイル拡張子で構成されたユニークな名前が付けられます。WebLogic Console を使用して TransactionLogFilePrefix サーバ属性の値を指定すれば、パス名プレフィックスを設定できます。トランザクション ログ ファイルを RAID デバイスなどの可用性の高いファイル システムで作成する場合は、必ず TransactionLogFilePrefix 属性を設定します。

websvr というサーバ名の UNIX システムでは、以下のような名前でログ ファイルが作成されます。

/usr7/applog1/websvr0000.tlog
/usr7/applog1/websvr0001.tlog
/usr7/applog1/websvr0002.tlog

同様に、Windows NT システムでは以下のような名前でログ ファイルが作成されます。

C:\weblogic\logA\websvr0000.tlog
C:\weblogic\logA\websvr0001.tlog
C:\weblogic\logA\websvr0002.tlog

システムで大量のトランザクション ログ ファイルが作成されている場合は、完了していない長時間のトランザクションが 1 つまたは複数存在している可能性があります。その原因としては、リソース マネージャの障害や、トランザクションのタイムアウト値が著しく大きいことが考えられます。

トランザクション ログを格納するファイル システムでスペースが不足すると、commit() によって SystemException が送出され、トランザクション マネージャによってメッセージがシステム エラー ログに配置されます。利用可能なスペースが増えるまで、トランザクションはコミットされません。

サーバを別のマシンに移動するときには、すべてのトランザクション ログ ファイルも一緒にまとめて移動してください。

ヒューリスティック ログ ファイル

外部のトランザクション マネージャから WebLogic Server にトランザクションをインポートすると、WebLogic Server のトランザクション マネージャは、外部のトランザクション マネージャによって調整される XA リソースとして機能します。トランザクション破棄タイムアウトが経過した後や、WebLogic Server によってインポートされたトランザクションに参加する XA リソースがヒューリスティックな例外を送出する場合のような、まれに発生する致命的状況では、WebLogic Server のトランザクション マネージャはヒューリスティックな決定を行います。つまり、WebLogic Server のトランザクション マネージャは、外部のトランザクション マネージャからの入力を利用しないで、トランザクションをコミットまたはロールバックすることを決定します。ヒューリスティックな決定を行った WebLogic Server のトランザクション マネージャは、外部のトランザクション マネージャからトランザクションの無視を指示する通知を受け取るまで、ヒューリスティックな決定についての情報をヒューリスティック ログ ファイルに格納します。

ヒューリスティック ログ ファイルは、トランザクション ログ ファイルと共に格納され、.tlog 拡張子の前に .heur の付いたトランザクション ログ ファイルと同様の名前が与えられます。ヒューリスティック ログ ファイルのフォーマットは次のとおりです。

<TLOG_file_prefix>/<server_name><4-digit number>.heur.tlog

websvr というサーバ名の UNIX システムでは、次のようなヒューリスティック ログ ファイルが作成されます。

/usr7/applog1/websvr0000.heur.tlog
/usr7/applog1/websvr0001.heur.tlog
/usr7/applog1/websvr0002.heur.tlog

同様に、Windows システムでは、次のようなヒューリスティック ログ ファイルが作成されます。

C:/weblogic/logA/websvr0000.heur.tlog
C:/weblogic/logA/websvr0001.heur.tlog
C:/weblogic/logA/websvr0002.heur.tlog

 


デバッグのヒント

トランザクションの命名プロパティを使用すると、問題のあるトランザクションを分離および識別できます。

トランザクションをデバッグするときには、WebLogic JTA と関与しているリソースの間で障害を分離する必要があります。

 


ヒューリスティックな終了の処理

ヒューリスティックな終了(ヒューリスティックな決定)は、更新をコミットするかロールバックする分散トランザクションの終了段階でリソースが一方だけの決定を行ったときに発生します。これにより、分散されたデータは不確定な状態のままになります。ヒューリスティックな終了の原因としては、ネットワークの障害またはトランザクションのタイムアウトが考えられます。ヒューリスティックな終了が発生すると、以下のヒューリスティックな結果例外のいずれかが送出されます。

ヒューリスティックな終了が発生すると、サーバ ログにメッセージが書き込まれます。ヒューリスティックな終了を解決する方法については、データベース ベンダが提供するドキュメントを参照してください。

一部のリソース マネージャでは、ヒューリスティックな終了のコンテキスト情報が保存されます。この情報は、リソース マネージャのデータの矛盾を解決するときに便利です。WebLogic Console の JTA パネルで ForgetHeuristics 属性が true に設定されている場合、この情報はヒューリスティックな終了の後で削除されます。コンテキスト情報を保存するリソース マネージャを使用するときには、ForgetHeuristics 属性を false に設定することをお勧めします。

 


トランザクション システムの回復処理

WebLogic Server のトランザクション マネージャは、ユーザによる最低限の介入でシステムのクラッシュから回復するように設計されています。準備されたトランザクションは、たとえ複数のクラッシュの後であっても、トランザクション マネージャからコミットまたはロールバックが行われることなくリソース マネージャで未解決のまま残ることはありません。

指定した時間が過ぎた後にトランザクションを破棄することもできます。AbandonTimeoutSeconds 属性を使用すると、トランザクション コーディネータがトランザクションの完了を試みる最大限の時間を秒単位で設定できます。デフォルト値は 86,400 秒、つまり 24 時間です。この時間を過ぎると、利用できないリソースや、トランザクションの結果を承認できないリソースが関わるトランザクションでそれ以上の解決は試行されません。

システムがクラッシュした後、トランザクション マネージャには以下の責任があります。

 

back to top previous page next page