目次 前 次 PDF


TuxedoをOracle Real Application Clusters (RAC)と共に使用

TuxedoをOracle Real Application Clusters (RAC)と共に使用
この章の内容は次のとおりです。
このリリースでは、以前のリリースで追加された次のRAC機能もサポートされています。
インスタンス認識
Oracle Databaseに関連するサーバーの場合、Tuxedoはカスタマイズされたコールバックを使用して、Oracle Databaseのインスタンス情報を取得します。
Tuxedoは、カスタマイズされたコールバックを使用して、XAサーバーの静的コールバック登録でOracle Databaseのインスタンス情報を取得します。
Tuxedoは、カスタマイズされたコールバックを使用して、非XAサーバーの動的コールバック登録でOracle Databaseのインスタンス情報を取得します。この場合、次の要件が適用されます。
$TUXDIR/lib/tuxociucb.so.1.0パッケージが$ORACLE_HOME/libにデプロイされている必要があります。
ORA_OCI_UCBPKG環境変数にパッケージ名が含まれている必要があります。
インスタンス認識が必要な非XAサーバーを実行する前に、$ORACLE_HOME/libにパッケージをデプロイする必要があります。そうしないと、動的コールバック登録を使用するサーバーが失敗します。
非XAサーバーは、起動時に、環境変数ORA_OCI_UCBPKGの自動設定を試みます。サーバーの処理が失敗すると、ULOGにエラー・メッセージが表示され、サーバーにおけるインスタンス認識が無効になります。
XAアフィニティでのTuxedoの使用
この項の内容は次のとおりです。
概要
Oracle RAC環境では、データベースとインスタンスの間に1対多の関係があります。Oracle RACで実行されているサーバーまたはTuxedoアプリケーションのグループは、異なるインスタンスに接続する可能性があります。
可能な場合、すべてのデータベース操作を同じRACインスタンスに接続し(該当の操作が1つのグローバル・トランザクション・ブランチで行われるのか、または1つのグローバル・トランザクション内の異なるブランチで行われるかは関係ない)、TuxedoドメインとWebLogic Server間でWebLogic Tuxedo Connector (WTC)を介してアフィニティ情報を自動的に交換するのが、XAアフィニティの役割です。
XAアフィニティの優先度
次に、Tuxedoサーバーの選択ルールを優先度が高い順から低い順に示します。
GWTDOMAINトランザクション・ルーティング
XAアフィニティが有効な場合、環境変数TUXRACGROUPSで指定されたOracle RACルーティング・ルールは無効になります。
注意:
XAアフィニティ・ポリシー
Tuxedoは同じインスタンス名、DB名およびサービス名に関連付けられたサーバーを選択します。これが失敗した場合、Tuxedoは次のポリシーに従ってサーバーを見つけます。
注意:
前提条件
ソフトウェア要件
この機能は、Microsoft Windowsプラットフォーム上のOracle Tuxedo 32ビットを除く、Oracle Tuxedoでサポートされるすべてのプラットフォームで実行できます。
特定のプラットフォームのソフトウェア要件の詳細は、『Oracle Tuxedo 12cリリース2 (12.2.2)プラットフォーム・データ・シート』を参照してください。
インストールに関する注意
Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。
構成
UBBCONFIG *RESOURCESセクションのOPTIONSにオプションXPPが指定されているかぎり、XAアフィニティ機能はデフォルトで有効です。
注意:
Oracle ExalogicおよびOracle SPARC SuperClusterプラットフォームでは、OPTIONSパラメータはEECSに設定される必要があります。
XAアフィニティを明示的に無効にする新しいオプションNO_XAAFFINITYが、UBBCONFIG *RESOURCESセクションのRMOPTIONSに導入されています。
RMOPTIONS {[...|NO_XAAFFINITY],*}
リスト6-1に、EECSの構成例を示します。リスト6-2に、XAアフィニティを明示的に無効にする例を示します。
リスト6-1 EECSの構成例
* RESOURCES
OPTIONS EECS
 
リスト6-2 XAアフィニティを明示的に無効にする例
* RESOURCES
OPTIONS EECS
RMOPTIONS NO_XAAFFINITY
 
tuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意:
XAアフィニティでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
制限事項
共通XIDでのTuxedoの使用
この項の内容は次のとおりです。
概要
一般的に、グローバル・トランザクションでは、参加している各グループにはそれぞれのトランザクション・ブランチがあり、特別なトランザクション・ブランチ識別子(XID)で各ブランチが識別されます。グローバル・トランザクションに複数のグループが関与する場合、Oracle Tuxedoは各ブランチで2フェーズ・コミットを採用し、最初の参加グループをコーディネータとして使用します。
ただし、このリリースの共通XID機能により、コーディネータ・グループのトランザクション・ブランチが、同じトランザクション内の他のすべてのグループと共有されます。同じサービスを介して同じOracle Databaseインスタンスに接続するグループは、コーディネータ・ブランチを直接使用します。このようなグループの場合、XAコミット処理は不要であり、保存されます。
グローバル・トランザクション内のすべてのグループがコーディネータ・ブランチを直接使用するという最も極端なケースでは、Oracle Tuxedoは、2フェーズ・コミットではなく1フェーズ・コミットを採用します。TLOGは作成されません。
一般的なシナリオ
Tuxedoアプリケーション・ドメインDOM1に、GRP1およびGRP2という2つのグループがあるとします。サーバーSERV1GRP1に属し、サービスSVC1を提供します。これに対し、サーバーSERV2GRP2に属し、サービスSVC2を提供します。SERV1SERV2は、両方とも同じインスタンスに接続します。
ネイティブ・クライアントがグローバル・トランザクションを開始して、最初にSVC1を、次にSVC2を呼び出し、トランザクションをコミットします。
前述のケースで共通XID機能が有効な場合、Tuxedoはトランザクションで1フェーズ・コミットを呼び出し、TLOGは作成されません。それ以外の場合は、2フェーズ・コミットが呼び出されます。
ユーザーはTMTRACEを介して前述の動作をトレースできます。詳細は、TMTRACEに関する項を参照してください。
前提条件
ソフトウェア要件
この機能は、Microsoft Windowsプラットフォーム上のOracle Tuxedo 32ビットを除く、Oracle Tuxedoでサポートされるすべてのプラットフォームで実行できます。
特定のプラットフォームのソフトウェア要件の詳細は、『Oracle Tuxedo 12cリリース2 (12.2.2)プラットフォーム・データ・シート』を参照してください。
インストールに関する注意
Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。
構成
UBBCONFIG *RESOURCESセクションのOPTIONSにオプションEECSが指定されているかぎり、共通XID機能はデフォルトで有効です。共通XIDを明示的に無効にする新しいオプションNO_COMMONXIDが、UBBCONFIG *RESOURCESセクションのRMOPTIONSに導入されています。
RMOPTIONS {[...|NO_COMMONXID],*}
6‑4ページのリスト6‑1「?$paratext>,?」に、EECSを構成する例を示します。リスト6‑3に、共通XIDを明示的に無効にする例を示します。
リスト6-3 共通XIDを明示的に無効にする例
* RESOURCES
OPTIONS EECS
RMOPTIONS NO_COMMONXID
 
tuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意:
共通XIDでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
制限事項
マルチスレッド・サーバーは、MIBを介してインスタンス情報を提供しません。しかし、共通XIDは、サーバーによってディスパッチされたスレッドではそのまま適切に機能します。
2フェーズ・コミットのシナリオでは、GWTDOMAINが準備やコミットの実行に常に関与しています。
GWTDOMAINが配置されているグループがコーディネータ・グループの場合、共通XIDは機能しません。
Single Group Multiple Branches (SGMB)でのTuxedoの使用
この項の内容は次のとおりです。
概要
以前のリリースでは、同一の参加グループのサーバーはグローバル・トランザクション内の同一トランザクション・ブランチを使用しています。ただし、これらのサーバーがRACの異なるインスタンスに接続する場合は、トランザクション・ブランチは失敗します。1つのブランチが複数のインスタンスを経由できないことを示す、XAエラーXAER_AFFINITYが報告されます。このため、Tuxedoグループが使用するRACサービスは、シングルトンRACサービスである必要があります。DTPサービス(DTPオプションであるsrvctl modify service内の-xが指定されている場合)または1つのインスタンスのみで提供されるサービスを、シングルトンRACサービスに指定することができます。
このリリースでは、単一グループ内の異なるインスタンス上の異なるトランザクション・ブランチを使用することで、問題が解決されます。Tuxedoグループは非シングルトン・サービスを使用できるため、ロード・バランスなどの利点を活用できます。
前提条件
ソフトウェア要件
この機能は、Microsoft Windowsプラットフォーム上のOracle Tuxedo 32ビットを除く、Oracle Tuxedoでサポートされるすべてのプラットフォームで実行できます。
特定のプラットフォームのソフトウェア要件の詳細は、『Oracle Tuxedo 12cリリース2 (12.2.2)プラットフォーム・データ・シート』を参照してください。
インストールに関する注意
Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。
構成
UBBCONFIG *RESOURCESセクションのOPTIONSにオプションEECSが指定されているかぎり、SGMB機能はデフォルトで有効です。SGMBを明示的に無効にする新しいオプションSINGLETONが、UBBCONFIG *RESOURCESセクションのRMOPTIONSに導入されています。
RMOPTIONS {[...|SINGLETON],*}
このオプションは、ドメイン内で使用されるすべてのRACサービスがシングルトンであることを指定します。したがって、SGMB機能は必要ありません。
6‑4ページのリスト6‑1「?$paratext>,?」に、EECSを構成する例を示します。リスト6‑4に、SGMBを明示的に無効にする例を示します。
リスト6-4 SGMBを明示的に無効にする例
* RESOURCES
OPTIONS EECS
RMOPTIONS SINGLETON
 
tuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意:
SGMBでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
制限事項
優先予約グループがマルチブランチ・グループの場合、XAに対する読取り専用の最適化はトランザクションで機能しません。GWTDOMAINがコーディネータでない場合は、優先予約グループがコーディネータ・グループです。それ以外の場合、優先予約グループは、コーディネータ・ドメイン内で次に登場する参加グループです。
マルチスレッド・サーバーは、MIBを介してインスタンス情報を提供しません。しかし、SGMBは、サーバーによってディスパッチされたスレッドではそのまま適切に機能します。
Fast Application Notification (FAN)でのTuxedoの使用
この項の内容は次のとおりです。
概要
Tuxedoは、次の目的でFast Application Notification (FAN)を使用します。
前提条件
ソフトウェア要件
この機能は、Microsoft Windowsプラットフォーム上のOracle Tuxedo 32ビットを除く、Oracle Tuxedoでサポートされるすべてのプラットフォームで実行できます。
特定のプラットフォームのソフトウェア要件の詳細は、『Oracle Tuxedo 12cリリース2 (12.2.2)プラットフォーム・データ・シート』を参照してください。
インストールに関する注意
Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。
構成
DBにおける構成
DB構成の内容は次のとおりです。
ONS
Oracleサーバー側で、ONSデーモンを有効にする必要があります。
Tuxedoがネイティブ・クライアントとみなされる場合は、クライアント側のONSデーモンも有効にする必要があります。ONSデーモン構成ファイルは、$ORACLE_HOME/opmn/conf/ons.configにあります。ONSの構成後、ONSデーモンをonsctl startコマンドで開始します。ONSデーモンが常に実行されていることを確認してください。
Tuxedoがリモート・クライアントとみなされる場合は、クライアント側のONSデーモンは使用されません。これが優先モードです。
注意:
ロード・バランシング・アドバイザ(LBA)
サービスにロード・バランシング・アドバイザの目標がある場合、ONSはサービスに関するLBAを公開することがあります。サービスの作成時または変更時に、-Bオプションを使用して(srvctlを介して)目標を指定できます。
TAF
TAFが有効な場合、すべてのTuxedoサーバーはTAFによる再接続を自動的に実行できます。それ以外の場合、XAサーバーのみが再接続を自動的に実行できます。
再接続は、ユーザー・コードの次の要件を使用してTAFによって終了されます。
OPENINFOthreads=tを含める必要があります。
特定の非XAアプリケーション・サーバーに関連するインスタンスのFANイベントをモニターするには、$ORACLE_HOME/lib$TUXDIR/lib/tuxociucb.so.1.0をデプロイして、このバイナリの名前をORA_OCI_UCBPKG環境変数で指定する必要があります。
非XAサーバーに対してservoptsの-Lオプションを使用して、このサーバーがOracle Databaseに接続することを指定する必要があります。-Lを指定するとECIDが有効になるため、ECIDをクローズする新しいオプション-Fがservoptsに導入されています。F noECIDの形式で使用します。次に例を示します。
*SERVERS
server1
SRVGRP=GRP1 SRVID=1 ClOPT="-L libclntsh.so -F noECID"
TAFサポートでは、OCI環境をOCI_THREADEDモードで作成する必要があります。
Pro*Cユーザーは、最初の実行可能な埋込みSQL文を作成する前に、threads=yesでプリコンパイルして、次の埋込みSQL文を使用できる必要があります。そうしないと、再接続できるのはXAサーバーのみになります。
EXEC SQL ENABLE THREADS;
Tuxedoにおける構成
UBBCONFIG *SERVERSセクションでTMFANサーバーを構成し、UBBCONFIG *RESOURCESセクションのOPTIONSでオプションEECSを構成する必要があります。FANを明示的に無効にする新しいオプションNO_FANが、UBBCONFIG *RESOURCESセクションのRMOPTIONSに導入されています。
RMOPTIONS {[...|NO_FAN],*}
6‑4ページのリスト6‑1「?$paratext>,?」に、EECSを構成する例を示します。リスト6‑5に、FANを明示的に無効にする例を示します。
リスト6-5 FANを明示的に無効にする例
* RESOURCES
OPTIONS EECS
RMOPTIONS NO_FAN
 
tuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意:
FANでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
制限事項
TuxedoをOracle Real Application Clusters (RAC)と共に使用
この項の内容は次のとおりです。
概要
Oracle Real Application Clusters (RAC)は、レプリケートされたOracleデータベース・サービスを使用して同一のOracleデータベースにアクセスするマシンのクラスタリングをサポートします。Oracle RACを使用すると、物理的に異なるOracleサーバー・マシン上に存在する複数のインスタンスから同一のOracleデータベースに同時アクセスできます。また、失敗したデータベース・インスタンスを別の場所にフェイルオーバーすることが可能です。
ただし、XAトランザクション環境でこれらのレプリケーションやフェイルオーバーの機能を利用したり、最適なRACパフォーマンスを実現するには、トランザクション・モニター側にOracle RAC用の特殊サポートが必要になります。これはOracle 10gでは、同一XAトランザクション内の複数のRACインスタンスから同一データベースにアクセスすることは許可されないためです。
注意:
さらにOracle 10gR1では、RACインスタンス間のトランザクション・フェイルオーバーの準備に、トランザクション・モニターが必要です。
Tuxedoは、異なるRACインスタンスに関連付けられたグループのリストを管理者が指定できるようにすることで、Oracle RACに対するトランザクション・モニターのサポートを提供しています。これにより、同じRACデータベースの異なるインスタンスに関連付けられたグループが同一トランザクションに参加しないことが確実になります。TuxedoのOracle RAC用サポートには、Oracle 10gR1の使用時に必要な、RACフェイルオーバー・イベントをTuxedoトランザクション・マネージャ・サーバー(TMS)プロセスに通知する機能も含まれています。
このため、TMSはRACフェイルオーバー・リカバリの必要に応じて、Oracle 10gR1の準備されたトランザクションのリストをOracleから再取得できます。
注意:
Oracle 10gR2を使用する場合、管理者はOracle <b>DTPサービス</b>を使用してOracle RACシステムにアクセスする必要があります。このDTPサービス名は、関連付けられているTuxedoグループのOPENINFO文字列で指定する必要があります。Oracle 10gR2はサービス名を検証し、必要に応じて別のインスタンスに移行します。
Oracle 12c以降のリリースを使用する場合、サービス名は透過的になり、特定の構成をしなくても必要に応じて自動的に代替インスタンスに移行されます。
制限事項
注意:
Oracle 10gR2の場合は、https://metalink.oracle.com/metalink/plsql/f?p=130:14:3193163745563425327::::p14_database_idで説明されているbugに対応するために、10.2.0.2以降のパッチ・セットが必須です。
Oracle 12cの場合は、11.1.0.6以降のパッチ・セットをお薦めします。RACに関して多くの点が改良されているため、Oracle 12cの使用をお薦めします。
場合によっては、Dynamic XAスイッチを有効にしてOracle RACを使用すると、コア・ダンプが生成され、システム・クラッシュの原因となることがあります。この問題が発生した場合はOracleサポートに直接連絡し、次の情報を提供してください。
ソフトウェア要件
特定のプラットフォームのソフトウェア要件の詳細は、『Oracle Tuxedo 12cリリース2 (12.2.2)プラットフォーム・データ・シート』を参照してください。
Oracle RACを使用するためのTuxedoの構成
TuxedoでOracle RACをサポートするためには、次の2つの作業が必要です。
以下のコマンドおよび環境変数は、TuxedoのOracle RACサポートの構成でのみ使用されます。
TUXRACGROUPS (Oracle 10gR1および10gR2では必須、Oracle 11g以降では任意)
XARETRYDURATIONSECONDS (Oracle 10gR1でのみ必須)
XARETRYINTERVAL (Oracle 10gR1でのみ必須)
TMS_rac_refresh(1) (Oracle 10gR1でのみ必須)
トランザクション伝播の構成
Oracle 10gR1では、同一XAトランザクション内の複数のRACインスタンスから同一データベースにアクセスすることは許可されません。さらにOracle 10gR1では、RACインスタンス間のトランザクション・フェイルオーバーの準備に、トランザクション・モニターが必要です。
Oracle 10gR2では、複数の異なるRACインスタンスがRAC内の異なるトランザクション・ブランチで動作できますが、トランザクション・ブランチが異なるインスタンス上にある場合は、それらのブランチは疎結合され、ロックを共有しません。最適なコミット・パフォーマンスを実現するには、所定のXAトランザクション内では単一のRACインスタンスのみを使用することが重要です。
このため、XAトランザクションを単一のRACインスタンスに関連付けることは、Oracle 10gR2でも引き続き重要になります。Oracle XAでのRACの使用の詳細は、『Oracle Databaseアプリケーション開発者ガイド-基礎編』の「Oracle XAを使用したアプリケーションの開発」を参照してください。
TUXRACGROUPS環境変数は、TuxedoグループをOracle RAC構成の特定のインスタンスと関連付けます。これにより、同一RAC構成の異なるインスタンスに含まれるグループが、同一XAトランザクション内に混在するのを防止できます。
注意:
Oracle 10gを使用する場合は、単一のトランザクションが複数のOracle RACインスタンスにまたがらないようにします。特定のトランザクションに参加するグループは、そのトランザクションの開始時に決定されます。個々のトランザクションは、各RAC構成の1つの特定のインスタンスに割り当てられます。この割当てでは、特定のRAC構成の各インスタンスに含まれるグループが、それぞれ等しい数のトランザクションに割り当てられます。
Oracle 12cでは、複数の異なるRACインスタンスがRAC内の異なるトランザクション・ブランチで動作でき、トランザクション・ブランチが異なるインスタンス上にある場合は、それらのブランチは密結合され、ロックとリソースを共有します。そのため、Oracle 12cの使用時にはTUXRACGROUPS環境変数は必要ありません。この環境変数はOracle 12cでも機能するため、これを使用してTuxedoグループをOracle RAC構成の特定のインスタンスに関連付けることができます。
TUXRACGROUPS
TUXRACGROUPS環境変数により特定のRAC構成に関連付けられるグループが指定され、同一トランザクション内のサービス呼出しが同一RAC構成の異なるインスタンスとして識別される複数のグループに送信されるのを防止します。
警告:
TUXRACGROUPS環境変数を使用する場合は、この環境変数を構成内のすべてのマシン上で設定する必要があり、すべてのマシン上で同じグループ・セットを同じ順番で指定する必要があります
この制限事項を守らないと、一貫性のないグループ・セットがトランザクション内に含まれるおそれがあります。この不整合はコミット時に調整グループによって検出され、トランザクションがロールバックされて、エラー・メッセージがuserlogに送られます。
TUXRACGROUPSの構文
TUXRACGROUPS環境変数は、Oracle RACグループ構成の定義に使用します。構文は次のとおりです。
TUXRACGROUPS="G1,G2,…,Gm;H1,H2,…,Hn[;…]:I1,I2,…,Io;J1,J2,…,Jp[;…][:…]"
カンマ(,)区切りのリスト
Oracle RAC構成の同一インスタンスに含まれるグループを指定します。カンマ区切りのリスト内に指定した複数のグループは、同一トランザクション内でともに使用できます。
注意:
セミコロン(;)区切りのリスト
Oracle RAC構成の異なるインスタンスに含まれるグループ・セットを指定します。同一RACデータベース構成の異なるRACインスタンスに含まれるグループは、同一トランザクション内でともに使用することはできません。
TUXRACGROUPS環境変数は、Oracle RAC構成の異なるインスタンスに関連付けられたグループを指定するための変数です。そのため、TUXRACGROUPS環境変数を使用するすべてのアプリケーションで、環境変数の値に少なくとも1つのセミコロンが必要です。
コロン(:)区切りのリスト
任意のOracle RAC構成に関する情報と、別のOracle RAC構成に関する情報を区別するために使用します。コロンで区切られた個々のOracle RACデータベース構成は、相互に完全に独立しています。
注意:
TUXRACGROUPSの例
この項では、4つの異なるOracle RACグループ構成の定義例を示します。
例1: 単純な構成
TUXRACGROUPS="G1;G2"
図6-1に、単純なOracle RAC構成の例を示します。
この例では、1つのOracleデータベース(ORA1)に対して2つのOracle RACインスタンスが存在し、各インスタンスにそれぞれ1つのグループが含まれています。
この場合、同じトランザクション・リクエストをGROUP1GROUP2の両方に送信することはできません。これは、各グループが同一のOracle RACデータベース構成にマップされた異なるインスタンスを介してデータベース・サービスにアクセスするためです。
図6-1 (ORA1)簡単な構成
例2 : 1つのOracle RACインスタンスに複数のグループ(ファイル内に複数あり)
TUXRACGROUPS="GROUP1;GROUP2:GROUP3;GROUP4,GROUP5"
図6-2に、複数のグループを1つのインスタンスに追加する場合の例を示します。
この例では、2つのOracleデータベースORA1ORA2が存在しています。ORA1はマシン固有のサービスORA1SITE1ORA1SITE2を、ORA2はマシン固有のサービスORA2SITE1ORA2SITE2を提供します。この構成は、Oracle RAC構成の各インスタンスに関連付けられたグループに、ほぼ同数のトランザクションを割り当て、同じサービスを構成することを目的としています。
この場合、同じトランザクション・リクエストをGROUP1GROUP2の両方に送信することはできません。これは、各グループが同一のOracle RACデータベース構成にマップされた異なるインスタンスを介してデータベース・サービスにアクセスするためです。GROUP3GROUP4、またはGROUP3GROUP5についても同様で、同じトランザクションをこれらのグループの両方に送信することはできません。
GROUP4GROUP5は、どちらも同じOracle RACデータベース構成の同じデータベース・サービスにアクセスするため、これらのグループはまとめて許可されます。GROUP1GROUP4は、異なるRACデータベース構成にアクセスするため、まとめて許可されます。この構成にGROUP6もある場合、GROUP6はOracle RACグループではないため、他のグループとともに許可されます。
注意:
図6-2 (ORA2) 1つのOracle RACインスタンス内に複数のグループが存在
この構成のUBBCONFIGファイルの*GROUPSおよび*SERVERSセクションは、リスト6-6のようになります。
リスト6-6 UBBCONFIGファイルの*GROUPSセクションと*SERVERSセクションの例
*GROUPS
DEFAULT: TMSNAME=TMS_ORA TMSCOUNT=2
GROUP1 LMID=SITE1 GRPNO=1
OPENINFO="ORACLE_XA:Oracle_XA+Acc=P/scott/tiger+SqlNet=ORA1SITE1+SesTm=100+LogDir=.+MaxCur=5"
GROUP2 LMID=SITE2 GRPNO=2
OPENINFO="ORACLE_XA:Oracle_XA+Acc=P/scott/tiger+SqlNet=ORA1SITE2+SesTm=100+LogDir=.+MaxCur=5"
GROUP3 LMID=SITE1 GRPNO=3
OPENINFO="ORACLE_XA:Oracle_XA+Acc=P/scott/tiger+SqlNet=ORA2SITE1+SesTm=100+LogDir=.+MaxCur=5"
GROUP4 LMID=SITE2 GRPNO=4
OPENINFO="ORACLE_XA:Oracle_XA+Acc=P/scott/tiger+SqlNet=ORA2SITE2+SesTm=100+LogDir=.+MaxCur=5"
GROUP5 LMID=SITE2 GRPNO=5
OPENINFO="ORACLE_XA:Oracle_XA+Acc=P/scott/tiger+SqlNet=ORA2SITE2+SesTm=100+LogDir=.+MaxCur=5"
GROUP6 LMID=SITE1 GRPNO=6 TMSNAME=TMS_QM
OPENINFO="TUXEDO/QM:/home/myapplication/QUE:QSPACE"
*SERVERS
DEFAULT: RESTART=Y MAXGEN=5 REPLYQ=Y CLOPT="-A"
EMPLOYEE_SVR SRVGRP=GROUP1 SRVID=1
EMPLOYEE_SVR SRVGRP=GROUP2 SRVID=2
BANKING_SVR SRVGRP=GROUP3 SRVID=3
BANKING_SVR SRVGRP=GROUP4 SRVID=4
BANKING_SVR SRVGRP=GROUP5 SRVID=5
 
注意:
GROUP4GROUP5には同じOPENINFO文字列が指定されています。これは、どちらのグループも同じデータベースが提供する同じデータベース・サービスを使用することを意味しています。
Oracleグループ用のOPENINFO文字列を*GROUPSセクションに指定する方法は、RACなしでOracleを使用する場合と変わりません。Oracleグループ用のOPENINFO文字列を指定する方法の詳細は、『Oracle Databaseアプリケーション開発者ガイド-基礎編』Oracle XAを使用したアプリケーションの開発に関する章を参照してください。
例3 :複数のOracle RACインスタンスに複数のグループ(ファイル内に複数あり)
TUXRACGROUPS="GROUP11,GROUP12,GROUP13;GROUP21,GROUP22:GROUP3;GROUP4, GROUP5"
図6-3に、複数のインスタンスに複数のグループを追加する例を示します。
この例は、1つ前で説明した例と似ていますが、GROUP11GROUP12およびGROUP13はいずれも1番目のRAC構成の1番目のRACインスタンスに、GROUP21GROUP22は2番目のRACインスタンスに関連付けられています。
この構成で、トランザクション内の最初のサービス呼出しがGROUP12に渡された場合、このトランザクション内のその他のサービス呼出しはGROUP11GROUP12またはGROUP13には送信できますが、GROUP21またはGROUP22に送信することはできません。
許可されたグループ内では通知されていないが、1つまたは複数の禁止されたグループ内で使用可能なサービスに対して、トランザクション型のサービス呼出しが実行された場合は、以下のいずれかの結果になります。
tperrnoTPENOENTが設定されます
tperrordetailに新しい値TPED_GROUP_FORBIDDENが設定されます
図6-3 複数のOracle RACインスタンス内に複数のグループが存在
TUXRACGROUPS環境変数に定義されている各RAC構成について、Tuxedoでは、トランザクションの開始時に、その構成内のどのRACグループをトランザクションに参加させるかが決定します。
TUXRACGROUPSを使用したトランザクション作成の特徴
トランザクションは、存在する間はOracle RACインスタンスに固定されます。このことは、このようなトランザクションの呼出しフローでOracle RACに関連付けられたTuxedoサービスに常にアクセスできるかどうかに関係なく当てはまります。
トランザクションの作成方法は、次の2とおりです。
TUXRACGROUPS内にリストされているグループにトランザクションを作成します。このトランザクションは、TUXRACGROUPSを介して構成されたOracle RACインスタンスに固定されます。
TUXRACGROUPS内にリストされていないグループにトランザクションを作成します。このトランザクションは、使用可能なOracle RACインスタンスの1つにロード・バランシングに類似したアルゴリズムで固定されます。
TUXRACGROUPSを使用したデータ依存型ルーティング
データ依存型ルーティングは、Oracle RAC構成をサポートするように拡張されています。UBBCONFIGの*ROUTINGセクションには、ルーティング範囲が同一のグループを複数定義できます。リスト6-7に、同じ範囲の値を持つ異なるTuxedoグループの例を示します。
リスト6-7 同じ範囲の値を持つTuxedoグループ
RANGES="1-5:GROUP1A, 1-5:GROUP1B, 6-10:GROUP2B, 6-10:GROUP2A, *:*"
 
この例では、GROUP1AGROUP1Bのデータ範囲が同じで、GROUP2AGROUP2Bのデータ範囲が同じです。Tuxedoは、トランザクションが属するOracle RACインスタンスに関連付けられているグループに、サービス・リクエストをルーティングします。
RACグループにより提供されるトランザクション・サービスに対するデータ依存型ルーティングでは、以下の場合にしか目的の結果を得られません。
特定のトランザクション内では1つのRAC構成インスタンスしか許可されないため、各RACインスタンス内のサービスに対応したデータ値を指定する必要があります。指定しないと、一部のトランザクションでは、RAC構成内のどのサービスでもデータ値が処理されません。
すべてのデータ値が同じサービス・インスタンスのセットによって処理される場合は、データ依存型ルーティングを使用する必要はありません。
各ルーティング値に対する複数のRANGESエントリを、サービスを提供する各RACインスタンスに対して作成する必要がある場合。
特定のRACインスタンスに対してルーティングを構成しなかった場合は、そのOracle RACインスタンスに固定されたトランザクションのサービス呼出しが失敗し、tperrnoTPENOENTが設定され、tperror詳細にTPED_GROUP_FORBIDDENが設定されます。
トランザクション・ルーティングの開始時に、現在のトランザクションで許可されていないグループはすべて無視されます。ルーティングの決定では、次のグループのみが対象となります。
非トランザクション型リクエストに対するルーティングには、すべてのグループが参加可能です。サービスは、UBBCONFIGファイル内の*ROUTINGセクションのRANGESフィールドに指定されたデータ値と一致した最初のグループにルーティングされます。特定の範囲の値に対する非トランザクション型リクエストはすべて、1つのOracle RACインスタンスによってのみ処理されます。
トランザクション型と非トランザクション型が混在するリクエストのルーティングでは、一部のアプリケーションが非トランザクション型リクエストのロード・バランシングをリクエストしないことがあります。個々のデータ値について各アプリケーション内で最初に記述されるRACインスタンスはそれぞれ異なるため、非トランザクション型リクエストについては、個々のRACインスタンスで提供される複数のサービス間で適宜ロード・バランシングが実施されます。
非トランザクション型リクエストの場合、同じルーティング範囲に関連付けられたすべてのグループ間でロード・バランシングを実施する方法はありません。ロード・バランシングを1つずつ実施する場合は、次を実行します。
中間AUTOTRANサービス(UBBCONFIGファイルの*SERVICESセクション内)を呼び出して、各サービス呼出しをトランザクションに関連付けます。
図6-4に、Oracle RAC構成内でのトランザクション型/非トランザクション型リクエストのルーティング例を示します。
図6-4 トランザクション型/非トランザクション型リクエストのルーティング
 
この例で示した構成は、2つのOracle RACインスタンスで構成されています。TUXRACGROUPSにリストされていない1つのグループに1,000個のトランザクションが作成されている場合、約500個のトランザクションがOracle RACインスタンス1に固定され、GROUP1AGROUP2Aにのみアクセスできます。残りの500個のトランザクションはOracle RACインスタンス2に固定され、GROUP1BGROUP2Bにのみアクセスできます。
リスト6‑8に、この構成に対するUBBCONFIGファイルの*SERVICESセクションと*ROUTINGセクションの例を示します。
リスト6-8 UBBCONFIGファイルの*SERVICESセクションと*ROUTINGセクションの例
*SERVICES
DEPOSIT SRVGRP=GROUP1A ROUTING=MYROUTE
DEPOSIT SRVGRP=GROUP2A ROUTING=MYROUTE
DEPOSIT SRVGRP=GROUP1B ROUTING=MYROUTE
DEPOSIT SRVGRP=GROUP2B ROUTING=MYROUTE
*ROUTING
MYROUTE FIELD=”BRANCH_ID”
RANGES=”1-5:GROUP1A, 1-5:GROUP1B, 6-10:GROUP2B, 6-10:GROUP2A, *:*”
BUFTYPE=”FML32”
 
GROUP1AおよびGROUP2Aは、Oracle RACインスタンス1に属します。GROUP1BおよびGROUP2Bは、Oracle RACインスタンス2に属します。BRANCH_IDが1 - 5のリクエストは、GROUP1AまたはGROUP1Bで処理されます。BRANCH_IDが6 - 10のリクエストは、GROUP2AまたはGROUP2Bで処理されます。
トランザクション型リクエストでは、すべてのトランザクションはOracle RACインスタンス1に固定されます。ブランチ1-5はGROUP1Aに、ブランチ6-10はGROUP2Aにそれぞれマッピングされます。もう半分は、Oracle RACインスタンス2に割り当てられます。ブランチ1-5はGROUP1Bに、ブランチ6-10はGROUP2Bにそれぞれマッピングされます。
非トランザクション型リクエストの場合は、ブランチ1-5がGROUP1Aに、ブランチ6-10がGROUP2Bにマッピングされます。これは、指定されたグループのうち、これらのグループがそれぞれのルーティング範囲に最初に一致するためです。無効なBRANCH_IDが指定されたリクエストは、許可されている任意のグループにマップされます。
注意:
特定のOracle RACインスタンスへのトランザクションの割当て
環境を複数のマシンに分割することもできます。たとえば、TuxedoとOracle RACが別々の建物に配置されている場合、Oracle RACインスタンス1にのみアクセスするマシン群とOracle RACインスタンス2にのみアクセスするマシン群を1つのTuxedoドメインで管理して地域的な独立性を維持することも可能です。特定の建物の外に送信される呼出しができるかぎり少なくなるように環境を構成できます。
図6-5に、マシン1 (GROUP1AGROUP2Aが所属)とマシン2 (GROUP1BGROUP2Bが所属)の例を示します。また、Tuxedo /WSクライアント、Tuxedoネイティブ・クライアント、Tuxedo /Qの場合やMQ Seriesなどの別のリソース・マネージャとリンクしているサーバーの場合、Tuxedo /Domainゲートウェイから呼出しが実行されてトランザクションが作成される場合もあります。
リクエストが送信されるたびに、トランザクションをローカル・マシンに固定し、異なるマシン間のホップをできるだけ回避する必要があります。
図6-5 特定のOracle RACインスタンスへのトランザクションの割当て
リスト6-9に、2つの物理マシン(TUXM1およびTUXM2)でTuxedoが実行されている場合のUBBCONFIGファイルの例を示します。両方のマシンの2つのグループがOracle RACに接続しています。GROUP1AおよびGROUP2Aのグループは、RACインスタンス1に接続しているTUXM1というマシン上で実行中です。GROUP1BおよびGROUP2Bのグループは、RACインスタンス2に接続しているTUXM2というマシン上で実行中です。
リスト6-9 UBBCONFIGファイルの例
*MACHINES
DEFAULT:
APPDIR="/path/to/appdir"
ENVFILE="/path/to/oracle.env"
TUXDIR="/path/to/tuxdir"
TUXCONFIG="/path/to/tuxconfig"
TLOGDEVICE="/path/to/TLOG"

"machine1" LMID=TUXM1

"machine2" LMID=TUXM2

*GROUPS
ADMGRPA LMID=TUXM1 GRPNO=10 OPENINFO=NONE
ADMGRPB LMID=TUXM2 GRPNO=20 OPENINFO=NONE

GROUP1A LMID=TUXM1 GRPNO=101 TMSNAME=TMS_ORA
OPENINFO="Oracle_XA:Oracle_XA+ACC=P/user/password+Sqlnet=ORA1SITE1+SesTm=100+LogDir=.+MaxCur=5"
GROUP1B LMID=TUXM2 GRPNO=102 TMSNAME=TMS_ORA
OPENINFO="Oracle_XA:Oracle_XA+ACC=P/user/password+Sqlnet=ORA1SITE2+SesTm=100+LogDir=.+MaxCur=5"

GROUP2A LMID=TUXM1 GRPNO=201 TMSNAME=TMS_ORA
OPENINFO="Oracle_XA:Oracle_XA+ACC=P/user/password+Sqlnet=ORA1SITE1+SesTm=100+LogDir=.+MaxCur=5"
GROUP2B LMID=TUXM2 GRPNO=202 TMSNAME=TMS_ORA
OPENINFO="Oracle_XA:Oracle_XA+ACC=P/user/password+Sqlnet=ORA1SITE2+SesTm=100+LogDir=.+MaxCur=5"

GROUP_TDOM_A LMID=TUXM1 GRPNO=301
GROUP_TDOM_B LMID=TUXM2 GRPNO=302

GROUP_CLIENT_A LMID=TUXM1 GRPNO=401 TMSNAME=TMS
GROUP_CLIENT_B LMID=TUXM2 GRPNO=402 TMSNAME=TMS

*SERVERS
DEFAULT: RESTART=Y MAXGEN=5 REPLYQ=Y CLOPT="-A"

TMSYSEVT SRVGRP="ADMGRPA" SRVID=10
TMUSREVT SRVGRP="ADMGRPA" SRVID=20

TMSYSEVT SRVGRP="ADMGRPB" SRVID=10 CLOPT="-A -- -S "
TMUSREVT SRVGRP="ADMGRPB" SRVID=20 CLOPT="-A -- -S "

EMPLOYEE_SVR SRVGRP=GROUP1A SRVID=1
EMPLOYEE_SVR SRVGRP=GROUP1B SRVID=2
BANKING_SVR SRVGRP=GROUP2A SRVID=3
BANKING_SVR SRVGRP=GROUP2B SRVID=4

DMADM SRVGRP="GROUP_TDOM_A" SRVID=100
GWADM SRVGRP="GROUP_TDOM_A" SRVID=110
GWTDOMAIN SRVGRP="GROUP_TDOM_A" SRVID=111 REPLYQ=Y RQADDR="GWGRP_M1"
GWADM SRVGRP="GROUP_TDOM_B" SRVID=110
GWTDOMAIN SRVGRP="GROUP_TDOM_B" SRVID=111 REPLYQ=Y RQADDR="GWGRP_M2"
 
また、両方のマシン上に、管理サービス用のグループ、Tuxedo /Domainゲートウェイ用のグループ、ネイティブTuxedoクライアントのグループがそれぞれ1つずつ存在します。すべてのトランザクションはGWTDOMAINとネイティブ・クライアントによって作成されます。オープンされたトランザクションが確実に適切なRACインスタンスに所属してローカルで処理されるようにするには、リスト6-10に示されているように、GWTDOMAINとネイティブTuxedoクライアントは、直接Oracle RACに接続しない場合でもTUXRACGROUPSに含まれている必要があります。
注意:
ネイティブ・クライアントは、ローカル・グループにtpinfo->grpnameを設定して、適切な動作が行われるようにする必要があります。詳細は、6-31ページの「?$paratext>?」を参照してください。
リスト6‑10 TUXGROUPS
TUXRACGROUPS="GROUP_TDOM_A,GROUP_CLIENT_A,GROUP1A,GROUP2A;GROUP_TDOM_B,
GROUP_CLIENT_B,GROUP1B,GROUP2B"
 
TUXRAGROUPSトランザクションの事例
トランザクションの外部で実行されたサービス呼出しの処理
トランザクションが関与しない場合、Tuxedoでは、負荷が許容されるかぎり、ローカル・マシン上でできるだけ多くのリクエストを処理しようとします。アイドル状態のローカル・サービスがない場合にのみ、ロード・バランシング・アルゴリズムに基づいてリクエストがリモート・マシンに送信されます。つまり、すべてのマシン上ですべてのサービスを使用できる場合は、リモート・マシンにリクエストが送信される心配はありません。
管理者は、Oracle RMとリンクしていない場合やOracle RACインスタンスに物理的に関連付けられていない場合でも、呼出しフローでアクセスされ、新しいトランザクションをオープンする候補となるTUXRACGROUPS環境変数にすべてのサービス・グループが含まれていることを常に確認する必要があります。環境変数TUXRACGROUPSは、非トランザクション型のサービス呼出しに対しては影響を及ぼしません。
外部のリソース・マネージャを操作しているグループによって作成されたトランザクションがリモート・マシンに送信されるのを回避する
Tuxedoサーバーが別のRM (MQSeriesなど)や別のデータベースを使用して構築されている場合、このグループをTUXRACGROUPS環境変数に含めることによって、新しく開始したトランザクションをローカル・マシンに強制的に固定できます。
リスト6-11 MQSeriesの例
TUXRACGROUPS="MQSGROUPA,GROUP1A,GROUP2A;MQSGROUPB,GROUP1B,GROUP2B"
 
この例では、MQSGROUPAGROUP1A、およびGROUP2Aがマシン1に配置され、MQSGROUPBGROUP1BおよびGROUP2Bがマシン2に配置されています。
グループMQSGROUPA内のサーバーによってトランザクションが作成されると、グループGROUP1AGROUP2AGROUP1BおよびGROUP2Bのサービスに対するすべてのTuxedoサービス呼出しがGROUP1AGROUP2Aにのみ送信されます。GROUP1BGROUP2Bは、RACインスタンス2に属していて、トランザクションがグループMQSGROUPAを介してRACインスタンス1で作成されたために無視されます。
GWTDOMAINによって作成されたトランザクションがリモート・マシンに送信されるのを回避する
各マシンにローカルTuxedo /Domainゲートウェイを作成します。リスト6‑12に示すように、TUXRACGROUPS環境変数を設定します。
リスト6-12 GWTDOMAINの例
TUXRACGROUPS="GWTGROUPA,GROUP1A,GROUP2A;GWTGROUPB,GROUP1B,GROUP2B"
 
この例では、GWTGROUPAGROUP1AおよびGROUP2Aがマシン1に配置され、GWTGROUPBGROUP1BおよびGROUP2Bがマシン2に配置されています。
マシン1上のGWTDOMAINが外部リクエストを受信して新しいトランザクションを作成すると、グループGROUP1AGROUP2AGROUP1BおよびGROUP2Bのサービスに対するすべてのTuxedoサービス呼出しがGROUP1AGROUP2Aにのみ送信されます。GROUP1BGROUP2Bは、RACインスタンス2に属していて、トランザクションがグループGWTGROUPAを介してRACインスタンス1で作成されたために無視されます。
TMQFORWARDによって作成されたトランザクションがリモート・マシンに送信されるのを回避する
各マシンにローカルTuxedo /Q構成を作成します。リスト6‑13に示すように、TUXRACGROUPS環境変数を設定します。
リスト6-13 TMQFORWARDの例
TUXRACGROUPS="QUEUEGROUPA,GROUP1A,GROUP2A;QUEUEGROUPB,GROUP1B,GROUP2B"
 
この例では、QUEUEGROUPAGROUP1AおよびGROUP2Aがマシン1に配置され、QUEUEGROUPBGROUP1BおよびGROUP2Bがマシン2に配置されています。
マシン1上のTMQFORWARDがこのようなOracleサービスに新しいメッセージをトランザクションとして送信すると、グループGROUP1AGROUP2AGROUP1BおよびGROUP2Bのサービスに対するすべてのTuxedoサービス呼出しがGROUP1AGROUP2Aにのみ送信されます。GROUP1BGROUP2Bは、RACインスタンス2に属していて、トランザクションがグループQUEUEGROUPAを介してRACインスタンス1で作成されたために無視されます。
Tuxedoネイティブ・クライアントによって作成されたトランザクションがリモート・マシンに送信されるのを回避する
ネイティブ・クライアントを特別なサーバー・グループにバインドすることもできます。そのためには、コマンドbuildclient -r <RM_of_the_group> -f <source_file> -o <binary_file>を使用してクライアントをビルドし、使用するグループ名を指定してtpinit()を実行するだけです。
たとえば、2つの追加グループCLIENTGROUPACLIENTGROUPBを作成して、それぞれのグループで少なくとも2つのTMSを起動できます。リスト6-14に示すように、TUXRACGROUPS環境変数を設定します。
リスト6-14 リモート・マシンの例
TUXRACGROUPS="CLIENTGROUPA,GROUP1A,GROUP2A;CLIENTGROUPB,GROUP1B,GROUP2B"
 
tpinfo->grpnameCLIENTGROUPAが設定されている場合、TPINIT構造体を指定してtpinit(TPINIT *tpinfo)を実行すると、クライアントがCLIENTGROUPAに関連付けられます。tpinfo->grpnameCLIENTGROUPBが設定されていると、クライアントがCLIENTGROUPBに関連付けられます。
CLIENTGROUPAがマシン1上で、CLIENTGROUPBがマシン2でそれぞれ実行中の場合、マシン1のネイティブ・クライアントは、tpinfo->grpname = CLIENTGROUPAを使用してtpinit()を常に呼び出し、マシン2のネイティブ・クライアントはtpinfo->grpname = CLIENTGROUPBを使用してtpinit()を常に呼び出す必要があります。Tuxedoネイティブ・クライアントがtpbegin()を呼び出すとき、トランザクションは、CLIENTGROUPAの場合はRACインスタンス1に、CLIENTGROUPBの場合はRACインスタンス2にそれぞれ関連付けられます。
Tuxedo /WSクライアントによって作成されたトランザクションがリモート・マシンに送信されるのを回避する
ワークステーション・クライアントの場合、grpnameの値にはNULL文字列(長さが0の文字列)を指定します。任意のグループ名を設定したり、/WSクライアントを特定のグループに固定したりすることはできません。Tuxedo /WSクライアント内ではtpbegin()は指定されません。オープンしているトランザクションはすべてのRACインスタンスに平等に配布されます。
Tuxedo /WSクライアントにおけるベスト・プラクティスは、トランザクションがクライアント側で処理されるのを回避し、Tuxedo /WSクライアントによって呼び出される最初のサーバーでトランザクションを開始することです。たとえば、UBBCONFIGファイルの*SERVICESセクション内の呼び出されるサービスに対してAUTOTRANパラメータを設定すると、自動的にトランザクションが作成されるように強制できます。
トランザクション・リカバリの構成
TMS_rac_refresh(1)XARETRYDURATIONSECONDSおよびXARETRYINTERVALは、特に、トランザクション・リカバリの問題の処理に使用されます。
TMS_rac_refresh(1)は、Oracle RACグループ間のフェイルオーバーが発生したときに呼び出されます。TMS_rac_refresh(1)は、コマンド行から手動で実行しないでください。TMS_rac_refresh(1)の呼出しには、Oracle Fast Application Notification (FAN)を使用します。
注意:
環境変数XARETRYDURATIONSECONDSXARETRYINTERVALは、Oracle RACの要求に応じたトランザクション・リカバリ処理(xa_recover())の再試行に使用します。
XARETRYDURATIONSECONDS
TMS_rac_refresh(1)が呼び出されたときに、Tuxedo Transaction Manager Server (TMS)によりxa_recover()処理を再試行する間隔を指定します。この値が設定されていないか、0に設定されている場合、xa_recover()は1回しか実行されません。
XARETRYDURATIONSECONDSのデフォルト値は0です。
注意:
Oracle 10.1の場合は、XARETRYDURATIONSECONDS120に設定することをお薦めします。
XARETRYINTERVAL
XARETRYDURATIONSECONDSに設定した値でxa_recover()処理を再試行する間隔を秒単位で指定します。XARETRYINTERVAL値は、XARETRYDURATIONSECONDSに0より大きい値を指定した場合にのみ適用されます。
XARETRYINTERVALのデフォルト値は30です。
Oracle 10g Fast Application Notification (FAN)の構成
Oracle RACを使用するためのTuxedoの構成において重要なプロセスは、グループ・フェイルオーバーの発生時に適切なグループ・パラメータを使用してTMS_rac_refresh(1)を呼び出せるように、Oracle FANを設定する作業です。(グループ・パラメータとグループ・フェイルオーバーの詳細は、「トランザクション伝播の構成」を参照してください。)
Oracle FANの詳細は、Oracle Real Application Clustersの自動ワークロード管理(PDF)のホワイト・ペーパーを参照してください
Oracle FANスクリプトの例
リスト6-15に、Oracle FANスクリプトの例を示します。
リスト6-15 Oracle FANスクリプトの例
//This File should be placed at ORA_CRS_HOME/racg/usrco//
------------------------------calout.sh-------------------------
#! /bin/ksh

#parse the event

AWK=awk
NOTIFY_EVENTTYPE=$1 # Event type is handled differently

for ARGS in $*
do
PROPERTY=`echo $ARGS|$AWK -F"=" '{print $1}'`
VALUE=`echo $ARGS|$AWK -F"=" '{print $2}'`
case ${PROPERTY} in
VERSION|version)NOTIFY_VERSION=$VALUE;;
SERVICE|service)NOTIFY_SERVICE=$VALUE;;
DATABASE|database)NOTIFY_DATABASE=$VALUE;;
INSTANCE|instance)NOTIFY_INSTANCE=$VALUE;;
HOST|host) NOTIFY_HOST=$VALUE ;;
STATUS|status) NOTIFY_STATUS=$VALUE;;
REASON|reason) NOTIFY_REASON=$VALUE;;
CARD|card) NOTIFY_CARDINALITY=$VALUE ;;
TIMESTAMP|timestamp) NOTIFY_LOGDATE=$VALUE;; # catch
event
??:??:??) NOTIFY_LOGTIME=$PROPERTY;; # catch event time
(hh24:mi:ss)
esac
done

#Set the REFRESH_DIR environment variable.
. /home/oracle/callout.env

#Make a log to record events.
FAN_LOGFILE=/home/oracle/app/products/10.1.0.3.0/db_1/calloutlog/`hostname`_upti
me.log
touch ${FAN_LOGFILE}
echo ${1} >>${FAN_LOGFILE}

#invoke the TMS_rac_refresh command.
if [ ${NOTIFY_EVENTTYPE} = "INSTANCE" -a ${NOTIFY_STATUS} = "down" ]
then
${REFRESH_DIR}/rac_refresh >> ${FAN_LOGFILE} 2>&1
fi
-----------------------------callout.sh end-----------------------------
-----------------------------callout.env----------------------------------
#! /bin/ksh
#TUXEDO and Oracle RAC server are not one the same machine.
export REFRESH_DIR=/tmp
-----------------------------callout.env end------------------------------
-----------------------------rac_refresh----------------------------------
#! /bin/ksh
#If TUXEDO and Oracle RAC server on different machine

. /home/oracle/callout.env

rsh -l ${LOGNAME} ${TUX_MASTER_MACHINE} ${REFRESH_DIR}/rac_refresh
>/tmp/run1.log 2>&1

rsh -l ${LOGNAME} ${TUX_NONMASTER_MACHINE}
${REFRESH_DIR}/rac_refresh >/tmp/run1.log 2>&1

#If TUXEDO and Oracle RAC server are on same machine
#set up environment variable
#export APPDIR=/tmp
#export ORACLE_HOME=/home/oracle/Ora10g
#export TUXDIR=/nfs/users/libo/r902/BJ/bld
#export PATH=.:${PATH}:${TUXDIR}/bin
#. $TUXDIR/tux.env
#export TUXCONFIG=${APPDIR} /tuxconfig

#invoke TMS_rac_refresh
#TMS_rac_refresh RACDBGRP1
#TMS_rac_refresh RACDBGRP3
-----------------------------rac_refresh end-----------------------------
 
Oracle 10gR2を使用する場合のトランザクション・リカバリの構成
Oracle 10gR2では、トランザクション・リカバリの構成が大幅に簡素化されています。Oracle RACに関連付けられる各グループのOPENINFO文字列で指定されたデータベース・サービスを、DTPサービスとしてOracleで宣言する必要があります。
たとえば、リスト6-6では、GROUP1はサービスORA1SITE1を介してOracleにアクセスし、GROUP2はサービスORA1SITE2を介してOracleにアクセスしていました。Oracle 10gR2では、サービスORA1SITE1を、優先インスタンスSITE1および使用可能なインスタンスSITE2と共にDTP=TRUEで宣言する必要があります。サービスORA1SITE2は、優先インスタンスSITE2および使用可能なインスタンスSITE1と共にDTP=TRUEで宣言します。同様のプロセスを、グループGROUP3GROUP4、およびGROUP5にも適用しなければなりません。
異なる優先インスタンスを宣言することで、両方のインスタンスが使用可能になっている通常の動作時には、アプリケーションでロード・バランシングの効果を得ることができます。
TUXRACGROUPS環境変数の設定により、RAC構成の異なるインスタンスが同一のトランザクションで組み合されないことが確実になり、最適なパフォーマンスを実現できます。1つのRACインスタンスがダウンした場合、Oracleは、トランザクションの整合性を維持しながら、DTPサービスを非優先インスタンスに転送します。
Oracle 10gR2のDTPサービスを使用している場合は、Oracle FANの構成は不要であり、お薦めしません(TMS_rac_refresh(1)を使用するか、またはXARETRYDURATIONSECONDS環境変数またはXARETRYINTERVAL環境変数を設定してください)。
Oracle 12cでのトランザクション回復の構成
Oracle 12cでは特別な構成は不要で、トランザクション回復は透過的に行われます。
UBBCONFIGファイル内の環境変数の指定
TuxedoのOracle RAC用環境変数は、オペレーティング・システムのコマンド行からも設定できますが、これらの環境変数の設定には、UBBCONFIGファイル内の*MACHINESセクションにENVFILEパラメータを指定する方法をお薦めします。
Oracle RACの環境変数を設定する場合は、構文に次の考慮事項を適用します。
ENVFILEパラメータを使用してTuxedo環境変数を設定する場合は(推奨される設定方法)、環境変数の値を二重引用符で囲まないでください
関連項目
グローバル・トランザクションのコーディングに関する項<Default ?Font>(『Oracle Tuxedo C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』)

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved