ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JTAのプログラミング
12cリリース1 (12.1.1)
B65896-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

4 トランザクションの管理

この章では、トランザクションの管理に使用される管理タスクに関する情報を提供します。これらのタスクには、トランザクションの監視、ヒューリスティックな終了の処理、トランザクションの破棄方法、処理中のトランザクションの解決、およびトランザクションのリカバリが含まれます。

統計およびモニターの機能を使用して、サーバー上のトランザクションをモニターできます。管理コンソールでは、それらの機能を構成したり、結果出力を表示したりできます。

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

管理コンソールで、ドメイン内の各サーバーのトランザクションをモニターできます。トランザクションの統計は、ドメイン全体ではなく、特定のサーバーについて表示されます。

手順については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプにある次のページを参照してください。

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

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

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

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

サーバーの移動

サーバー・インスタンスは、そのURL (IPアドレスまたはDNS名にリスニング・ポートの番号を付加したもの)によって特定されます。サーバーを新しいマシンに移動したり、同じマシン上でサーバーのリスニング・ポートを変更したりした結果URLが変わると、サーバーを移動したことになり、トランザクション・ログに保持されている情報ではサーバーを特定できなくなる場合があります。

移植性を向上させるため、サーバー・インスタンスにはIPアドレスではなくDNS名を使用することをお薦めします。

サーバーを新しいマシンに移動する必要がある場合は、「クラスタリングされていないサーバーで障害が発生した場合のトランザクションのリカバリ」を参照してください。

トランザクションの破棄

指定した時間の経過後に未完了のトランザクションを破棄することもできます。分散トランザクションの2フェーズ・コミット・プロセスでは、トランザクション・マネージャはトランザクションに参加するすべてのリソース・マネージャを調整します。すべてのリソース・マネージャがコミットまたはロールバックを支持すると、トランザクション・マネージャはリソース・マネージャに、変更に対してコミットまたはロールバックのいずれかの動作を行うよう通知します。2フェーズ・コミット・プロセスにおける、この第2フェーズでは、トランザクション・マネージャはすべてのリソース・マネージャでトランザクションの終了が示されるまで、トランザクションを終了しようとし続けます。AbandonTimeoutSeconds属性を使用すると、トランザクション・マネージャがコミット・プロトコルの第2フェーズでトランザクションの終了を試み続ける最長時間を秒単位で設定できます。デフォルト値は86400秒、つまり24時間です。この時間を過ぎると、利用できないリソースや、トランザクションの結果を承認できないリソースが関わるトランザクションでそれ以上の解決は行われません。破棄される前にトランザクションの準備が完了していた場合、トランザクション・マネージャは破棄されるトランザクションにかわってトランザクションをロールバックし、ロックを解放してから、サーバー・ログにヒューリスティック・エラーを書き込みます。

以下の関連情報を参考にできます。

トランザクション処理のチューニング

2フェーズ・コミット・プロトコルの最初のフェーズは準備フェーズと呼ばれます。要求される更新がトランザクション・ログ・ファイルに記録され、リソースは、リソース・マネージャを通じて変更の準備ができていることを表明する必要があります。リソースは、更新をコミットするのか、または前の状態にロールバックするのかを意思表示できます。第2フェーズまたはコミット・フェーズで何が行われるかは、リソースの意思表示によって決まります。すべてのリソースがコミットを支持すると、トランザクションに関わっているすべてのリソースが更新されます。1つまたは複数のリソースがロールバックを支持した場合は、トランザクションに関わっているすべてのリソースが前の状態にロールバックされます。WebLogic Serverには、トランザクションの処理にかかる時間を調整する次のパラメータがあります。

  • トランザクションの開始から、トランザクションの最初のフェーズの終わりまでの処理にかかる最大時間は、transaction-timeout属性の値を設定して制御します。

  • トランザクションの第2フェーズの処理にかかる最大時間は、completion-timeout-seconds属性の値を設定して制御します。

WebLogic Server 10.3.3以前では、第2フェーズの処理の最大所要時間は、デフォルトのtransaction-timeoutの値(最大値120秒、調整不可能)の約2倍でした。ほとんどの環境の場合、第2フェーズの完了に割り当てられる時間は十分なものです。ただし、システムの負荷が高い環境やネットワークの待機時間が長い環境では、コミット・フェーズの完了に使用可能な最大時間を超える可能性があり、トランザクション・マネージャはSystemExceptionをスローします。SystemExceptionは、トランザクションの結果に対して決定的ではないため、アプリケーション環境では、この場合の特別な例外処理を用意する必要があります。この例外処理には、トランザクション・アクティビティやトランザクションに関連するリソースの状態を手動で解析する処理も含まれる場合があります。アプリケーション・スタックは、より複雑になるため、トランザクションの結果の解決はさらに難しくなります。completion-timeout-seconds属性では、コミット・フェーズにより長い処理時間を割り当てることで、多くの場合、成功するか決定的な完了になります。

completion-timeout-secondsの値が、abandon-timeout-secondsに設定された値を超えると、abandon-timeout-secondsは、completion-timeout-secondsの値をオーバーライドします。トランザクションを破棄する場合、SystemExceptionがスローされます。一般に、transaction-completion-seconds属性に大きな値が必要なトランザクションは、システムのチューニングが必要になります。


注意:

abandon-timeout-seconds値が60秒未満に設定されている場合は、デフォルトのcompletion-timeout-seconds設定によって無効にされるので注意してください。また、トランザクション・サービスが起動してから最初の600秒(10分)以内に、abandon-timeout-seconds設定は完全に無効になります。

構成情報の詳細は次のトピックを参照してください。

  • Oracle WebLogic Serverの管理コンソール・オンライン・ヘルプの高度なドメインJTAオプションの構成に関する項

  • Oracle WebLogic Server MBeanリファレンスのCompletionTimeoutSecondsに関する項


注意:

completion-timeout-seconds属性は、JCAトランザクションなどのインポート済トランザクションや、リカバリ・トランザクションには適用されません。

現在(処理中)のトランザクションの手動での解決

場合によってはトランザクションが完了しないことがあります。通常は、システムまたはネットワークの障害が原因です。このような状況では、保留中のトランザクションのためにロックが保持され、他のトランザクションの進捗を妨げている可能性があります。「破棄タイムアウト」の期間が経過すると、WebLogic Serverトランザクション・マネージャが内部データ構造からトランザクションを削除し、サーバー・ログにヒューリスティック・エラーを書き込みます。「行き詰まった」トランザクションを手動で解決することもできます。

トランザクションを手動で解決するには、「サーバー」→「監視」→「JTA」タブで、現在(処理中)のトランザクションを確認します(Oracle WebLogic Server管理コンソール・ヘルプの「現在のトランザクションの表示」を参照)。その後、トランザクションIDをクリックして特定のトランザクションの詳細を表示します。トランザクションのステータスに応じて、コミットまたはロールバックを強制できます。


注意:

トランザクションのステータスはサーバーごとに異なることがあります。たとえば、調整を行うサーバーではトランザクションがコミットされていても、リモートの参加者がコミットの指示を受け取っていない場合があります。

次の表は、トランザクションのステータスと解決のオプションに関する情報を示します。

表4-1 トランザクション・ステータスの定義と手動解決のオプション

ステータス 定義 強制コミット 強制ロールバック

アクティブ

アプリケーションがトランザクションを処理しています。トランザクションは、まだ2フェーズ・コミット処理には到達していません。


準備中

トランザクション・マネージャが2PCプロトコルの最初のフェーズでjavax.transaction.Synchronization beforeCompletion()コールバック処理を開始してから、すべての参加者がコミット可能と応答するまでの間隔に対応します。


準備完了

すべての参加者がコミット・ポイント(コミット・ログ・レコードがディスクにフラッシュされる)に備えるように反応してから、ロールバック処理開始までの間隔です。

コミット中

コミットの決定が行われてから、すべての参加者に結果が通知されて、javax.transaction.Synchronization afterCompletion()コールバックの処理が完了するまでの期間。


コミット完了

トランザクションがコミットされました。ヒューリスティックが存在する可能性が高いです。あるいは、トランザクションが完了していて、現在のトランザクションのリストに表示されません。


ロールバック中

この状態になるのは、ロールバック処理が開始されてから、すべての参加者がロールバックを指示されて、javax.transaction.Synchronization afterCompletion()コールバックの処理が完了するまでの期間です。


ロールバック済

トランザクションがロールバックされました。ヒューリスティックが存在する可能性が高いです。あるいは、トランザクションが破棄されていて、現在のトランザクションのリストに表示されません。


マーク済ロールバック

トランザクションがロールバックに関してマークされました。おそらく、setRollbackOnly操作の結果です。


トランザクションなし




不明

現在のステータスを判別できません。


手動でのコミットとロールバックのオプション

トランザクションを手動で解決するときは次に示すオプションから選択できます。オプションの制約は、表4-1「トランザクション・ステータスの定義と手動解決のオプション」で説明しています。

  • ローカル・コミットの強制: サーバーに登録されている各参加リソースに、指定したトランザクションのコミット操作が発行されます。トランザクションは、ローカル・トランザクション・マネージャのデータ構造から削除されます。ローカル・サーバーがトランザクションのコーディネータである場合、コミット・レコードは解放されます。Oracle WebLogic Server管理コンソール・ヘルプの「ローカル・コミットの強制」を参照してください。

  • グローバル・コミットの強制: 各参加サーバーで、指定したトランザクションのローカル・コミット操作が試行されます。調整を行うサーバー以外でこのオプションが呼び出されると、操作を処理するようにコーディネータが指示されます。調整を行うサーバーは、各参加サーバーに非同期リクエストを発行します。Oracle WebLogic Server管理コンソール・ヘルプの「グローバル・コミットの強制」を参照してください。

  • ローカル・ロールバックの強制: ローカル・サーバーに登録されている各参加リソースに、指定したトランザクションのロールバック操作が発行されます。トランザクションがローカル・トランザクション・マネージャのデータ構造から削除されます。Oracle WebLogic Server管理コンソール・ヘルプの「ローカル・ロールバックの強制」を参照してください。

  • グローバル・ロールバックの強制: 各参加サーバーで、指定したトランザクションのローカル・ロールバック操作が試行されます。調整を行うサーバー以外でこのオプションが呼び出されると、操作を処理するようにコーディネータが指示されます。調整を行うサーバーは、各参加サーバーに非同期リクエストを発行します。Oracle WebLogic Server管理コンソール・ヘルプの「グローバル・ロールバックの強制」を参照してください。


    注意:

    これらのオプションからどれを選択しても、WebLogic Serverによってサーバー・ログにエントリが書き込まれます。

ローカル・オプションとグローバル・オプションの違いは、ローカル・オプションが、現在のサーバー・リソース(管理コンソールの左側のペインにあるナビゲーション・ツリーで選択したサーバーのリソース)だけに作動するのに対して、グローバル・オプションはすべての参加サーバーで操作を実行しようとすることです。グローバル操作が、ローカル・サーバーによって調整されていないトランザクションに対して起動されると、そのトランザクションのコーディネータが操作を実行するように指示されます。コーディネータと通信できない場合、操作はjavax.transaction.SystemExceptionで失敗します。

このケースでは、調整を行うサーバーではトランザクションがコミットされている(コミット済ステータス)ときに、リモートの参加者がコミットの指示を受け取っていません(準備完了ステータス)。リモート参加者でローカル・コミットを強制すると、このトランザクションを完了できます。このケースでは、トランザクションの状態は準備完了のままであるため、リモート参加者でロールバックを強制することもできます。ただし、トランザクションはヒューリスティックに完了します。グローバル・ロールバックの強制を試行すると、コーディネータの状態がコミット中であるため、操作が失敗します。コミット中のステータスではトランザクションをロールバックできません。

サーバーに障害が発生した後のトランザクションのリカバリ

WebLogic Serverのトランザクション・マネージャは、ユーザーによる最低限の介入でシステムのクラッシュからリカバリするように設計されています。トランザクション・マネージャは、クラッシュが何度も発生した後や、クラッシュのリカバリ中であっても、リソース・マネージャによって準備されたトランザクション・ブランチをコミットまたはロールバックによって解決するために、あらゆる努力を払います。

クラッシュ後のリカバリを容易にするため、WebLogic Serverではトランザクション・リカバリ・サービスを提供しています。このサービスでは、システムの起動時にトランザクションの回復が自動的に行われます。「クラッシュ後のトランザクション・リカバリ・サービスのアクション」で説明するように、トランザクション・リカバリ・サービスは、起動時にすべてのトランザクション・ログ・レコードを解析して未完了のトランザクションを見つけ、そのトランザクションを終了させます。

トランザクション・リカバリ・サービスは、クラッシュ後にトランザクションのリカバリを正常に処理するよう設計されているため、サーバーがクラッシュした場合は再起動し、トランザクション・リカバリ・サービスによって未完了のトランザクションを処理することをお薦めします。

サーバーがクラッシュして、適切な時間内に再起動できそうにない場合は、ユーザーによる処理が必要になることがあります。サーバーの障害発生後にトランザクションをリカバリする手順は、WebLogic Serverの環境によって異なります。クラスタリングされていないサーバーの場合は、手動でサーバー(およびデフォルト永続ストアのDATファイル)を別のシステム(マシン)に移動することでトランザクションをリカバリできます。詳細は、「クラスタリングされていないサーバーで障害が発生した場合のトランザクションのリカバリ」を参照してください。クラスタ内のサーバーについては、同じクラスタ内の別のサーバーに、サーバー全体またはトランザクション・リカバリ・サービスを手動で移行できます。トランザクション・リカバリ・サービスの移行には、トランザクションをリカバリするためのトランザクション・ログにアクセスできるサーバーを選択し、次に管理コンソールまたはWebLogicコマンドライン・インタフェースを使用してサービスを移行することが必要です。


注意:

クラスタリングされていないサーバーの場合は、サーバー全体を新しいシステムに移動することしかできません。クラスタリングされたサーバーの場合は、サーバー全体を移行することも、トランザクション・リカバリ・サービスを一時的に移行することも可能です。

トランザクション・リカバリ・サービスの移行に関する詳細は、「クラスタリングされたサーバーで障害が発生した場合のトランザクションのリカバリ」を参照してください。クラスタの詳細は、『Oracle WebLogic Serverクラスタの使い方』を参照してください。

次の項では、障害発生後にトランザクションをリカバリする方法について説明します。

クラッシュ後のトランザクション・リカバリ・サービスのアクション

クラッシュ後にサーバーを再起動したり、トランザクション・リカバリ・サービスを別の(バックアップ)サーバーに移行したりすると、トランザクション・リカバリ・サービスは以下の処理を行います。

  • 2フェーズ・コミットの第2フェーズの準備が整っているトランザクションを終了します。

    コミットの決定が行われたが2フェーズ・コミット・プロセスの第2フェーズが終了していないトランザクション(トランザクション・ログに記録されているトランザクション)については、トランザクション・リカバリ・サービスがコミット・プロセスを終了させます。

  • 準備されたトランザクションを解決します。

    トランザクション・マネージャによってリソース・マネージャとの準備が整っているトランザクション(2フェーズ・コミット・プロセスの第1フェーズのトランザクション)の場合、トランザクション・リカバリ・サービスはクラッシュ・リカバリ中に、各リソース・マネージャに対してXAResource.recover()を呼び出す必要があります。次に、commit()rollback()、またはforget()メソッドを呼び出すことで、recover()によって返されたすべてのトランザクションIDを最終的に解決します。

  • ヒューリスティックな終了を報告します。

    リソース・マネージャによってヒューリスティックな例外が報告されると、トランザクション・リカバリ・サービスはそのヒューリスティックな例外をサーバー・ログに記録し、「ヒューリスティックを無視」構成属性が有効になっている場合は、forget()を呼び出します。「ヒューリスティックを無視」構成属性が有効になっていない場合は、データベース・ベンダーのドキュメントでヒューリスティックな終了の解決に関する情報を参照してください。詳細については、「ヒューリスティックな終了の処理」を参照してください。

トランザクション・リカバリ・サービスには、次のような利点があります。

  • 複数のリソースにわたって一貫性を維持します。

    トランザクション・リカバリ・サービスは、一貫した予測しやすい方法でトランザクション・リカバリ処理を行います。クラッシュ前にコミットが決定されたがまだ行われておらず、XAResource.recover()からトランザクションIDが返されるトランザクションの場合、トランザクション・リカバリ・サービスは一貫してXAResource.commit()を呼び出します。クラッシュ前にコミットが決定しておらず、XAResource.recover()からトランザクションIDが返されるトランザクションの場合、トランザクション・リカバリ・サービスは一貫してXAResource.rollback()を呼び出します。トランザクションのリカバリが一貫性のある予測しやすいものであるため、トランザクション・マネージャがクラッシュしても、一部のブランチがコミットされ一部がロールバックされるという混合ヒューリスティックの終了は発生しません。

  • トランザクションの解決に固執します。

    リソース・マネージャがクラッシュすると、トランザクション・リカバリ・サービスでは準備されている各トランザクションについてcommit()またはrollback()を呼び出さなければなりません。commit()またはrollback()の呼出しは成功するまで続けられます。トランザクション解決の試行は、AbandonTimeoutSeconds構成属性を設定することで制限できます。詳細については、「トランザクションの破棄」を参照してください。

WebLogicプロキシ・プラグインを備えたApacheを使用する際のクラスタリング・フェイルオーバー

WebLogicプロキシ・プラグインを備えたApacheをクラスタのフロントエンドとして使用する際、プラグインは複数の構成パラメータを使用して、WebLogic Serverホストへの接続を待機する時間や、接続の確立後は、プラグインがレスポンスを待機する時間を判断します。

  • Apacheのidempotentフラグの設定を検証します。idempotentがONに設定されているときに、指定したWLIOTimeoutSecs値内でサーバーが応答しない場合は、プラグインがフェイルオーバーします。idempotentがONに設定され、サーバーがREAD_ERROR_FROM_SERVERなどのエラーで応答する場合にもプラグインはフェイルオーバーします。OFFに設定されている場合、プラグインはフェイルオーバーしません。詳細は、『Oracle WebLogic ServerにおけるWebサーバー1.1プラグインの使い方』のWebサーバー・プラグインのパラメータに関する項を参照してください。

  • WebLogicプロキシ・プラグインの再試行メカニズムの設定を確認します; たとえば、許可される再試行の最大回数が、ConnectTimeoutSecs値をConnectRetrySecs値で除算した値と等しいかどうかなどを確認します。詳細は、『Oracle WebLogic ServerにおけるWebサーバー1.1プラグインの使い方』のフェイルオーバー、Cookie、およびHTTPセッションに関する項を参照してください。

クラスタリングされていないサーバーで障害が発生した場合のトランザクションのリカバリ

障害が発生したサーバーでトランザクションをリカバリするには、次の手順に従います。

  1. すべてのトランザクション・ログ・レコードが含まれる永続ストアDATファイルを、障害が発生したサーバーから新しいサーバーへ移動します(新しいサーバーで利用できるようにします)。

  2. デフォルト永続ストアへのパスを、データ・ファイルへのパスと共に設定します。「デフォルト永続ストアへのパスの設定」を参照してください。

  3. 新しいサーバーを起動します。「クラッシュ後のトランザクション・リカバリ・サービスのアクション」で説明するように、トランザクション・リカバリ・サービスは、すべてのトランザクション・ログ・ファイルを解析して未完了のトランザクションを見つけ、そのトランザクションを終了させます。

サーバーに障害が発生した後でトランザクション・ログ・レコードを移動する場合は、すべてのトランザクション・ログ・レコードを新しいマシンで使用可能にしてから、そのマシンでサーバーを起動します。そうしないと、クラッシュ時にコミット中だったトランザクションが適切に解決できず、その結果、アプリケーション・データに矛盾が発生する場合があります。このような移行は、両方のマシンで使用可能なデュアル・ポート・ディスクに永続ストアのデータ・ファイルを格納することで実現できます。計画的な移行の場合は、新しいマシンでパス名が異なるときに、デフォルトのファイル・ストアのdirectory属性を新しいパス名で更新してからサーバーを起動します。


注意:

トランザクション・リカバリ・サービスは、クラッシュ後にトランザクションのリカバリを正常に行うために設計されたものです。サーバーがクラッシュした場合は、新しいマシンにサーバーを移動するよりも、サーバーを再起動し、トランザクション・リカバリ・サービスによって未完了のトランザクションを処理することをお薦めします。

クラスタリングされたサーバーで障害が発生した場合のトランザクションのリカバリ

クラスタリングされたサーバーで障害が発生した場合、以下のいずれかの方法でトランザクションをリカバリできます。

サーバーの移行

クラスタリングされたサーバーの場合、WebLogic Serverでは、トランザクション・リカバリ・サービスを含めて、障害が発生したサーバーを新しいマシンに移行できます。サーバーを別のマシンに移行する場合、トランザクションを完了またはリカバリするには、サーバーがトランザクション・ログ・レコードを見つけられるようにする必要があります。トランザクション・ログ・レコードは、サーバーのデフォルト永続ストアに格納されています。障害が発生したときに、クラスタリングされたサーバーを移行する計画がある場合は、障害が発生した移行可能なサーバーの移行先となり得る任意のマシンにアクセスできる、共有ストレージ・システムにレコードを格納するよう、デフォルト永続ストアを設定する必要があります。高い信頼性を実現するために、ストレージ・エリア・ネットワーク(SAN)などの、高可用性の備わっている共有ストレージ・ソリューションを使用してください。

サーバーの移行に関する詳細は、『Oracle WebLogic Serverクラスタの使い方』の「サーバー全体の移行」を参照してください。

デフォルト永続ストア・オプションの設定の詳細は、以下を参照してください。

トランザクション・リカバリ・サービスの手動移行

クラスタリングされたサーバーがクラッシュした場合は、管理コンソールまたはコマンドライン・インタフェースを使用して、同じクラスタ内でクラッシュしたサーバーから別のサーバーへ、トランザクション・リカバリ・サービスを手動で移行できます。管理コンソールを使用してトランザクション・リカバリ・サービスを手動で移行する手順については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプトランザクション・リカバリ・サービスの手動移行に関する項を参照してください。

シングルトン・サービスのWebLogic Serverヘルス監視を使用して、トランザクション・リカバリ・サービスが正常な候補サーバーに自動的に移行されるように構成することも可能です。「トランザクション・リカバリ・サービスの自動移行」を参照してください。

トランザクション・リカバリ・サービスの移行の仕組み

手動または自動のサービス移行が実施されると、以下のイベントが発生します。

  1. トランザクション・ログの所有権がクラッシュしたサーバーからバックアップ・サーバーのトランザクション・リカバリ・サービスに移ります。

  2. 「クラッシュ後のトランザクション・リカバリ・サービスのアクション」で説明するように、トランザクション・リカバリ・サービスは、障害が発生したサーバーからのすべてのトランザクション・ログ・レコードを解析して未完了のトランザクションを見つけ、そのトランザクションを終了させます。

  3. バックアップ・サーバーのトランザクション・リカバリ・サービスにより、障害が発生したサーバーで未完了のトランザクションがすべて正常に終了すると、サーバーでは障害が発生したサーバーのトランザクション・リカバリ・サービスに対する所有権が解放され、障害が発生したサーバーが再起動時にその所有権を再び要求できるようになります。

サーバーでは、障害が発生した複数のサーバーに対してトランザクション・リカバリを行うことができます。他のサーバーのトランザクションを回復している間に、バックアップ・サーバーは自身のトランザクションの処理および回復を続けます。リカバリ中にバックアップ・サーバーで障害が発生した場合は、さらに別のサーバーにトランザクション・リカバリ・サービスを移行できます。この別のサーバーで、トランザクション・リカバリは続行されます。また、管理コンソールまたはコマンドライン・インタフェースを使用して、トランザクション・リカバリ・サービスを元の障害が発生したサーバーに手動で移行して戻すこともできます。詳細は、「トランザクション・リカバリ・サービスの元のサーバーへの手動による移行」を参照してください。

サーバーのトランザクション・リカバリがバックアップ・サーバーで完了すると、バックアップ・サーバーではトランザクション・リカバリ・サービスの所有権が、障害が発生したサーバーに解放されます。障害が発生したサーバーを再起動すると、このサーバーはトランザクション・リカバリ・サービスの所有権を再び要求しようとします。障害が発生したサーバーを再起動したときに、バックアップ・サーバーがトランザクション・リカバリ処理中だった場合、バックアップ・サーバーはトランザクションのリカバリを中止し、内部クリーンアップを行い、トランザクション・リカバリ・サービスの所有権を解放して、障害が発生したサーバーがそれを再び要求して正しく起動できるようにします。その後、障害が発生したサーバーでは、自身のトランザクション・リカバリを完了します。

障害が発生したサーバーのトランザクション・リカバリ・サービスがまだバックアップ・サーバーで所有されており、障害が発生したサーバーを再起動しようとしたときにバックアップ・サーバーが非アクティブだった場合、バックアップ・サーバーがトランザクション・リカバリ・サービスの所有権を解放できないため、障害が発生したサーバーは起動しません。これは、フェイルバック・メカニズムが失敗した場合や、バックアップ・サーバーが管理サーバーと通信できない場合にも当てはまります。トランザクション・リカバリの移行は、管理コンソールまたはコマンドライン・インタフェースを使用して手動で行えます。

トランザクション・リカバリ・サービスの自動移行

サーバー・ヘルス監視サービスを使用することで、トランザクション・リカバリ・サービスを異常のあるサーバー・インスタンスから正常なサーバー・インスタンスに自動的に移行できます。これにより、障害が発生したサーバーのトランザクション処理をバックアップ・サーバーで完了できます。『Oracle WebLogic Serverクラスタの使い方』の「JTAトランザクション・リカバリ・サービスの自動移行を構成するロードマップ」を参照してください。

管理対象サーバーの独立性

WebLogic Server 10.0より前のリリースでは、クラスタのプライマリ管理対象サーバーの起動時に管理サーバーにアクセスできない場合(ほとんどの場合は管理サーバーがまだ起動していないことが原因)、プライマリ管理対象サーバーは自動的に管理対象サーバー独立(MSI)モードに移行し、ローカルの構成情報を使用して起動を続行していました。この状況では、トランザクション・リカバリ・サービスを手動で移行している間、プライマリ管理対象サーバーのかわりにバックアップ・サーバーでまだTLOGデータをリカバリ中である可能性があり、これらのサーバーがTLOGに同時にアクセスしてTLOGが破損するリスクがありました。

このTLOG破損のリスクを回避するためのプロパティが、JTAMigratableTargetMBeanのstrictOwnershipCheckです。このプロパティを使用することで、プライマリ管理対象サーバーの起動中に管理サーバー(JTA手動移行ポリシーの場合)またはシングルトン・マスター(JTA自動移行ポリシーの場合)に接続できないことが判明すると、次に示すようにstrictOwnershipCheckの値に従って管理対象サーバーの独立性が検証されるようになりました。

  • True - これが推奨設定です。プライマリ管理対象サーバーは、例外をスローして起動に失敗します。

  • False - プライマリ管理対象サーバーは、トランザクション・リカバリ・サービスのフェイルバックをスキップして正常に起動します。この場合は、WebLogic Server 9.2以前と同じようにTLOGが破損するリスクがあります。

トランザクション・リカバリ・サービスの移行に対する制限

トランザクション・リカバリ・サービスを自動または手動で移行する場合は、以下の制限があります。

  • トランザクション・リカバリ・サービスを、実行中のサーバーからバックアップ・サーバーへ移行することはできません。トランザクション・リカバリ・サービスを移行する前に、サーバーを停止する必要があります。

  • バックアップ・サーバーでは、障害が発生したサーバーに対する新しいトランザクション処理は受け付けません。終了していないトランザクションを処理するだけです。

  • バックアップ・サーバーでは、ヒューリスティック・ログ・ファイルは処理しません。

  • バックアップ・サーバーは、WebLogic Serverによって書き込まれたログ・レコードのみを処理します。WebLogic Tuxedoコネクタなどのゲートウェイ実装によって書き込まれたログ・レコードの処理は行いません。

以上の制限に加え、WebLogic Server 10.0以降でトランザクション・リカバリ・サービスが自動的に移行されるように構成する場合は以下のルールも適用されます。

  • 以前のWebLogic Serverリリースのサーバーがクラスタに含まれている場合でも、プライマリ・サーバーとバックアップ・サーバーはWebLogic Server 10.0以降にする必要があります。自動移行が有効になっている場合にこのルールが強制的に適用されるようにするため、管理コンソールの候補サーバーの「使用可能」リストにはWebLogic Server 10.0以降のサーバーのみが表示されるようになっています。

  • リリース9.2以前のサーバーとリリース10.0以降のサーバーの間の手動サービス移行は、移行スクリプトを使用していない場合にのみサポートされます。

トランザクション・リカバリ・サービスの移行準備

クラスタ内の障害が発生したサーバーから同じクラスタ内の別のサーバー(バックアップ・サーバー)にトランザクション・リカバリ・サービスを移行するには、障害が発生したサーバーのトランザクション・ログ・レコードにバックアップ・サーバーがアクセスできる必要があります。したがって、クラスタ内のすべての潜在的なバックアップ・サーバーにとって使用可能な永続ストレージ上に、デフォルト永続ストア・データ・ファイルを格納する必要があります。次の点を考慮してください。

  • ストレージ・エリア・ネットワーク(SAN)が推奨されます。

  • NFSファイル・システムを使用する場合、ディスク書込みがキャッシュされないようにNFSサーバーを構成します。

  • ストレージ・ソリューションにかかわらず、フェイルオーバーと移行をテストします。

    一部のストレージ・ソリューション、特に一部のバージョンのNFSでは、ファイルのロックが問題になる可能性があります。ファイル・ロックを効率的に処理するようにストレージ・サーバーを構成するか、WebLogicファイル・ストアのファイル・ロックを停止する必要があります。


    重要:

    NFS記憶域は、同期書込みリクエストが揮発性メモリーに警告なしでバッファされるように構成されているので、トランザクション・データを完全に保護しない場合があります。ファイル・ストアのディレクトリがNFSマウントに存在して、ファイル・ストアの同期書込みポリシーがDisabled以外である場合、NFS実装と構成をチェックして、同期の書込みがサポートされるように構成されていることを確認します。Disabledの同期書込みポリシーを使用すると、同期書込みが行われていないので、一般的にはトランザクションで安全ではありません。記憶域デバイスの物理機能を超える最大数の永続メッセージまたはトランザクション・スループットを表示すると、同期書込みリクエストの不要なバッファリングが発生する可能性があります。NFSサーバーで、ファイル・ストアをホストするエクスポート済のNFSディレクトリの同期書込み設定をチェックします。SANベースのファイル・ストアまたはJDBCストアでは、安全な集中型の記憶域を提供する簡単な方法が用意されている場合があります。『Oracle WebLogic Serverパフォーマンスおよびチューニング』のファイル・ロックとNFSに関する項を参照してください。

トランザクション・リカバリ・サービスを自動または手動で移行する際は、永続ストアに関する以下のルールが適用されます。

  • デフォルト永続ストアを、JTAを始めとする移行可能サービスの間で共有することはできません。移行可能ターゲットにターゲット指定されている他の移行可能サービス(たとえばJMSサービス)では、別途カスタム・ストアを使用する必要があります。

  • デフォルト・ストアのマウントやアンマウントを実行する移行前/移行後スクリプトを指定する場合は、候補マシンごとにノード・マネージャを構成して実行する必要があります。

プライマリ・サーバーが起動、フェイルオーバー、またはフェイルバックする際には、管理サーバーがアクセス可能な状態になっている必要があります。これは、トランザクション・リカバリ・サービスが、そのTLOGの排他的な所有権を競合なく適切に取得できるようにするためです。プライマリ・サーバーの起動時には、トランザクション・リカバリ・サービスが管理サーバーに接続し、JTAに関する最新の情報を取得します。フェイルオーバーやフェイルバックが発生した場合は、トランザクション・リカバリ・サービスがその最新情報を管理サーバーに保存します。

トランザクション・リカバリ・サービスをサーバーから移行するときには、実際に移行を行う前に障害が発生している、または障害が発生したサーバーを停止する必要があります。元のサーバーがまだ実行中の場合は、そこからトランザクション・リカバリ・サービスを移行することはできません。

移行に参加するサーバーはすべて、構成においてリスニング・アドレスが指定されている必要があります。Oracle WebLogic Server管理コンソール・オンライン・ヘルプリスニング・アドレスの構成に関する項を参照してください。

トランザクション・リカバリ・サービスの移行先になるサーバーの制限

クラスタ内のサーバーに対してトランザクション・リカバリ・サービスのバックアップ・サーバーとして使用するサーバーの選択肢を制限することもできます。たとえば、クラスタ内のすべてのサーバーがサーバーのトランザクション・ログ・レコードにアクセスできるとは限りません。管理コンソールの「サーバー」→「構成」→「移行」ページでは、使用可能な宛先サーバーを制限できます。手順については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプトランザクション・リカバリ・サービスの移行先とする候補サーバーの構成に関する項を参照してください。


注意:

必要に応じてトランザクション・リカバリ・サービスを手動で移行して元のサーバーに戻せるように、「選択済み」リストに移行元のサーバーを含めておく必要があります。管理コンソールでは、この規則に従わなくてはなりません。

トランザクション・リカバリ・サービスの現在のオーナーの表示

トランザクション・リカバリ・サービスをクラスタ内の別のサーバーに移行した場合、そのトランザクション・リカバリ・サービスの所有権は、未完了のトランザクションがすべて完了するまでバックアップ・サーバーに割り当てられます。トランザクションの完了後、バックアップ・サーバーはトランザクション・リカバリ・サービスの所有権を解放し、元のサーバーは所有権の返還を要求できます。現在のオーナーは、Oracle WebLogic Server管理コンソール・オンライン・ヘルプ「サーバー: 制御: 移行」ページで確認できます。次の手順に従います。

  1. 管理コンソールの「ドメイン構造」ツリーで、「環境」を展開して「サーバー」をクリックします。

  2. トランザクション・リカバリ・サービスの移行元のサーバーを選択し、さらに「制御」>「移行」タブを選択します。

  3. 「詳細設定」をクリックします。「JTA移行」オプションの下の「ホスト・サーバー」に、トランザクション・リカバリ・サービスの現在のオーナーが表示されます。

トランザクション・リカバリ・サービスの元のサーバーへの手動による移行

バックアップ・サーバーは、障害が発生したサーバーのトランザクションのリカバリが完了すると、トランザクション・リカバリ・サービスの所有権を解放します。そのため、元のサーバーは再起動時にその所有権の返還を要求できます。トランザクションのリカバリが完了する前になんらかの理由でバックアップ・サーバーが停止(クラッシュ)すると、元のサーバーはトランザクション・リカバリ・サービスの所有権の返還を要求できなくなり、起動しません。

また、移行先サーバーとして元のサーバーを選択すると、トランザクション・リカバリ・サービスを手動で移行して元のサーバーに戻すことができます。元のサーバーにトランザクション・リカバリ・サービスを手動で移行して返還するときには、バックアップ・サーバーが稼動していてはいけません。次の手順に従います。


注意:

以下の点に注意してください。
  • トランザクション・リカバリ・アクションの完了前にバックアップ・サーバーで障害が発生した場合、プライマリ・サーバーは、トランザクション・リカバリ・サービスの所有権を要求できず、サーバーの再起動後にリカバリは再試行されません。そのため、トランザクション・リカバリ・サービスを別のバックアップ・サーバーに手動で再移行する必要があります。

  • バックアップ・サーバーによるトランザクションのリカバリ中に元のサーバーを再起動した場合は、バックアップ・サーバーが正常にトランザクション・リカバリ・サービスの所有権を解放します。バックアップ・サーバーを停止する必要はありません。「クラスタリングされたサーバーで障害が発生した場合のトランザクションのリカバリ」を参照してください。


管理コンソールを使用してトランザクション・リカバリ・サービスを手動で移行する手順については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプトランザクション・リカバリ・サービスの手動移行に関する項を参照してください。

トランザクション・レコードの削除方法

TLOGを削除する前に、できるだけ多くのトランザクションを完了できるようにWebLogic Serverインスタンスを正常に停止する必要があります。


注意:

TLOGを削除する必要があるのは極端な場合のみです。TLOGを削除すると、トランザクション・レコードが削除されるため、ヒューリスティック障害が発生します。たとえば、「サーバーの移行」を参照してください。

TLOGの場所は、デフォルトのストアとJDBC TLOGストアのどちらを使用しているか、またLLRがトランザクションの参加リソースであるかどうかによって異なります。

LLRデータベースでのTLOGの削除方法

LLR表のデフォルト名はWL_LLR_SERVERNAMEで、SERVERNAMEは、サーバー・インスタンスの名前です。Oracle WebLogic Server管理コンソール・オンライン・ヘルプの「サーバー: 構成: 全般」の「JDBC LLR表名」を参照してください。データベースに保持されているLLR TLOGを削除するには、drop table WL_LLR_SERVERNAMEを発行して、表からすべてのレコードを削除します。

デフォルト・ストアからのTLOGファイルの削除方法

デフォルト・ストアのTLOGを削除するには、次のパターンのファイルをすべて削除します。

$DOMAIN_HOME/servers/servername/data/store/default/_WLS_SERVERNAMExxxxxx.DAT

ここで、xxxxxxは、0から9の整数です。


注意:

構成済のJMSファイル・ストアがデフォルト・ストアに含まれる場合、TLOGを削除すると、JMSファイル・ストアも削除されます。この場合、TLOGファイルを削除する前に、JMSメッセージを別の場所にエクスポートします。その後、TLOGファイルを安全に削除して、JMSメッセージを元のストアにインポートすることができます。『Oracle Fusion Middleware Oracle WebLogic Server JMSの構成と管理』のJMSメッセージの管理に関する項を参照してください。

JDBC TLOGストアからのTLOGの削除方法

JDBC TLOGストアの名前は、JDBC TLOGストアをホストするサーバー名の前に接頭辞名、最後に「_」を付けたものです。たとえば、デフォルトの接頭辞名を使用した有効なJDBC TLOGストア名はTLOG_MyServer_です。この場合、TLOG_が接頭辞名、MyServerがJDBC TLOGストアをホストするサーバーの名前です。データベース管理者が既存のTLOG情報をJDBC TLOGストアから削除できます。