•
•
•
• $TUXDIR/lib/tuxociucb.so.1.0パッケージが$ORACLE_HOME/libにデプロイされている必要があります。
• ORA_OCI_UCBPKG環境変数にパッケージ名が含まれている必要があります。インスタンス認識が必要な非XAサーバーを実行する前に、$ORACLE_HOME/libにパッケージをデプロイする必要があります。そうしないと、動的コールバック登録を使用するサーバーが失敗します。非XAサーバーは、起動時に、環境変数ORA_OCI_UCBPKGの自動設定を試みます。サーバーの処理が失敗すると、ULOGにエラー・メッセージが表示され、サーバーにおけるインスタンス認識が無効になります。
•
•
•
•
• GWTDOMAINトランザクション・ルーティング
• XAアフィニティが有効な場合、環境変数TUXRACGROUPSで指定されたOracle RACルーティング・ルールは無効になります。
• Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。UBBCONFIG *RESOURCESセクションのOPTIONSにオプションXPPが指定されているかぎり、XAアフィニティ機能はデフォルトで有効です。
注意: リスト6-1 EECSの構成例OPTIONS EECSリスト6-2 XAアフィニティを明示的に無効にする例OPTIONS EECSRMOPTIONS NO_XAAFFINITYtuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意: XAアフィニティでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
•
•
•
• グローバル・トランザクション内のすべてのグループがコーディネータ・ブランチを直接使用するという最も極端なケースでは、Oracle Tuxedoは、2フェーズ・コミットではなく1フェーズ・コミットを採用します。TLOGは作成されません。Tuxedoアプリケーション・ドメインDOM1に、GRP1およびGRP2という2つのグループがあるとします。サーバーSERV1はGRP1に属し、サービスSVC1を提供します。これに対し、サーバーSERV2はGRP2に属し、サービスSVC2を提供します。SERV1とSERV2は、両方とも同じインスタンスに接続します。前述のケースで共通XID機能が有効な場合、Tuxedoはトランザクションで1フェーズ・コミットを呼び出し、TLOGは作成されません。それ以外の場合は、2フェーズ・コミットが呼び出されます。
• Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。UBBCONFIG *RESOURCESセクションのOPTIONSにオプションEECSが指定されているかぎり、共通XID機能はデフォルトで有効です。共通XIDを明示的に無効にする新しいオプションNO_COMMONXIDが、UBBCONFIG *RESOURCESセクションのRMOPTIONSに導入されています。リスト6-3 共通XIDを明示的に無効にする例OPTIONS EECSRMOPTIONS NO_COMMONXIDtuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意: 共通XIDでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
• マルチスレッド・サーバーは、MIBを介してインスタンス情報を提供しません。しかし、共通XIDは、サーバーによってディスパッチされたスレッドではそのまま適切に機能します。
• 2フェーズ・コミットのシナリオでは、GWTDOMAINが準備やコミットの実行に常に関与しています。
•
•
•
• 以前のリリースでは、同一の参加グループのサーバーはグローバル・トランザクション内の同一トランザクション・ブランチを使用しています。ただし、これらのサーバーがRACの異なるインスタンスに接続する場合は、トランザクション・ブランチは失敗します。1つのブランチが複数のインスタンスを経由できないことを示す、XAエラーXAER_AFFINITYが報告されます。このため、Tuxedoグループが使用するRACサービスは、シングルトンRACサービスである必要があります。DTPサービス(DTPオプションであるsrvctl modify service内の-xが指定されている場合)または1つのインスタンスのみで提供されるサービスを、シングルトンRACサービスに指定することができます。
• Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。UBBCONFIG *RESOURCESセクションのOPTIONSにオプションEECSが指定されているかぎり、SGMB機能はデフォルトで有効です。SGMBを明示的に無効にする新しいオプションSINGLETONが、UBBCONFIG *RESOURCESセクションのRMOPTIONSに導入されています。リスト6-4 SGMBを明示的に無効にする例OPTIONS EECSRMOPTIONS SINGLETONtuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意: SGMBでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
• 優先予約グループがマルチブランチ・グループの場合、XAに対する読取り専用の最適化はトランザクションで機能しません。GWTDOMAINがコーディネータでない場合は、優先予約グループがコーディネータ・グループです。それ以外の場合、優先予約グループは、コーディネータ・ドメイン内で次に登場する参加グループです。
• マルチスレッド・サーバーは、MIBを介してインスタンス情報を提供しません。しかし、SGMBは、サーバーによってディスパッチされたスレッドではそのまま適切に機能します。
•
•
•
•
•
• Oracle Tuxedoは、12cリリース2 (12.1.3)以降である必要があります。
•
•
• Tuxedoがネイティブ・クライアントとみなされる場合は、クライアント側のONSデーモンも有効にする必要があります。ONSデーモン構成ファイルは、$ORACLE_HOME/opmn/conf/ons.configにあります。ONSの構成後、ONSデーモンをonsctl startコマンドで開始します。ONSデーモンが常に実行されていることを確認してください。サービスにロード・バランシング・アドバイザの目標がある場合、ONSはサービスに関するLBAを公開することがあります。サービスの作成時または変更時に、-Bオプションを使用して(srvctlを介して)目標を指定できます。
• OPENINFOにthreads=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の形式で使用します。次に例を示します。TAFサポートでは、OCI環境をOCI_THREADEDモードで作成する必要があります。Pro*Cユーザーは、最初の実行可能な埋込みSQL文を作成する前に、threads=yesでプリコンパイルして、次の埋込みSQL文を使用できる必要があります。そうしないと、再接続できるのはXAサーバーのみになります。UBBCONFIG *SERVERSセクションでTMFANサーバーを構成し、UBBCONFIG *RESOURCESセクションのOPTIONSでオプションEECSを構成する必要があります。FANを明示的に無効にする新しいオプションNO_FANが、UBBCONFIG *RESOURCESセクションのRMOPTIONSに導入されています。リスト6-5 FANを明示的に無効にする例OPTIONS EECSRMOPTIONS NO_FANtuxedoアプリケーションがアクティブでない場合、このフラグは、TM_MIBを介してT_DOMAINクラスで指定することもできます。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
注意: FANでは、TuxedoサーバーがOracle Databaseのインスタンス情報を取得する必要があります。ユーザーは、TuxedoのTM_MIB T_SERVERクラスのTA_INSTSTRフィールドを介して、サーバーのインスタンス情報を問い合せることができます。詳細は、T_SERVERクラス定義に関する項を参照してください。
• カスタマイズされたサーバーでOracleデータベースへの接続にOCIを使用する場合、OCIの初期化時にOCI_NO_UCBを設定しないでください。
•
•
• ただし、XAトランザクション環境でこれらのレプリケーションやフェイルオーバーの機能を利用したり、最適なRACパフォーマンスを実現するには、トランザクション・モニター側にOracle RAC用の特殊サポートが必要になります。これはOracle 10gでは、同一XAトランザクション内の複数のRACインスタンスから同一データベースにアクセスすることは許可されないためです。
注意: Oracle 10gR2を使用する場合、管理者はOracle <b>DTPサービス</b>を使用してOracle RACシステムにアクセスする必要があります。このDTPサービス名は、関連付けられているTuxedoグループのOPENINFO文字列で指定する必要があります。Oracle 10gR2はサービス名を検証し、必要に応じて別のインスタンスに移行します。
• 場合によっては、Dynamic XAスイッチを有効にしてOracle RACを使用すると、コア・ダンプが生成され、システム・クラッシュの原因となることがあります。この問題が発生した場合はOracleサポートに直接連絡し、次の情報を提供してください。
•
• 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インスタンス間のトランザクション・フェイルオーバーの準備に、トランザクション・モニターが必要です。このため、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環境変数により特定のRAC構成に関連付けられるグループが指定され、同一トランザクション内のサービス呼出しが同一RAC構成の異なるインスタンスとして識別される複数のグループに送信されるのを防止します。
注意: 一般的には、1つのデータベース・インスタンスに関連付けられたすべてのサービスは、単一グループ内に配置されます。そのため通常は、TUXRACGROUPSの値にカンマは必要ありません。TUXRACGROUPS環境変数は、Oracle RAC構成の異なるインスタンスに関連付けられたグループを指定するための変数です。そのため、TUXRACGROUPS環境変数を使用するすべてのアプリケーションで、環境変数の値に少なくとも1つのセミコロンが必要です。
注意: 一般的には、1つのRACデータベース構成のみを指定します。そのため通常は、TUXRACGROUPSの値にコロンは必要ありません。図6-1に、単純なOracle RAC構成の例を示します。この場合、同じトランザクション・リクエストをGROUP1とGROUP2の両方に送信することはできません。これは、各グループが同一のOracle RACデータベース構成にマップされた異なるインスタンスを介してデータベース・サービスにアクセスするためです。図6-1 (ORA1)簡単な構成図6-2に、複数のグループを1つのインスタンスに追加する場合の例を示します。この例では、2つのOracleデータベースORA1とORA2が存在しています。ORA1はマシン固有のサービスORA1SITE1とORA1SITE2を、ORA2はマシン固有のサービスORA2SITE1とORA2SITE2を提供します。この構成は、Oracle RAC構成の各インスタンスに関連付けられたグループに、ほぼ同数のトランザクションを割り当て、同じサービスを構成することを目的としています。この場合、同じトランザクション・リクエストをGROUP1とGROUP2の両方に送信することはできません。これは、各グループが同一のOracle RACデータベース構成にマップされた異なるインスタンスを介してデータベース・サービスにアクセスするためです。GROUP3とGROUP4、またはGROUP3とGROUP5についても同様で、同じトランザクションをこれらのグループの両方に送信することはできません。GROUP4とGROUP5は、どちらも同じOracle RACデータベース構成の同じデータベース・サービスにアクセスするため、これらのグループはまとめて許可されます。GROUP1とGROUP4は、異なるRACデータベース構成にアクセスするため、まとめて許可されます。この構成にGROUP6もある場合、GROUP6はOracle RACグループではないため、他のグループとともに許可されます。
注意: 各Oracle RACインスタンスに含まれるグループの数は、同一である必要はありません。
注意: Oracleグループ用のOPENINFO文字列を*GROUPSセクションに指定する方法は、RACなしでOracleを使用する場合と変わりません。Oracleグループ用のOPENINFO文字列を指定する方法の詳細は、『Oracle Databaseアプリケーション開発者ガイド-基礎編』のOracle XAを使用したアプリケーションの開発に関する章を参照してください。図6-3に、複数のインスタンスに複数のグループを追加する例を示します。この例は、1つ前で説明した例と似ていますが、GROUP11、GROUP12およびGROUP13はいずれも1番目のRAC構成の1番目のRACインスタンスに、GROUP21とGROUP22は2番目のRACインスタンスに関連付けられています。この構成で、トランザクション内の最初のサービス呼出しがGROUP12に渡された場合、このトランザクション内のその他のサービス呼出しはGROUP11、GROUP12またはGROUP13には送信できますが、GROUP21またはGROUP22に送信することはできません。
• tperrnoにTPENOENTが設定されます
• tperrordetailに新しい値TPED_GROUP_FORBIDDENが設定されます
•
• データ依存型ルーティングは、Oracle RAC構成をサポートするように拡張されています。UBBCONFIGの*ROUTINGセクションには、ルーティング範囲が同一のグループを複数定義できます。リスト6-7に、同じ範囲の値を持つ異なるTuxedoグループの例を示します。リスト6-7 同じ範囲の値を持つTuxedoグループこの例では、GROUP1AとGROUP1Bのデータ範囲が同じで、GROUP2AとGROUP2Bのデータ範囲が同じです。Tuxedoは、トランザクションが属するOracle RACインスタンスに関連付けられているグループに、サービス・リクエストをルーティングします。
• 各ルーティング値に対する複数のRANGESエントリを、サービスを提供する各RACインスタンスに対して作成する必要がある場合。特定のRACインスタンスに対してルーティングを構成しなかった場合は、そのOracle RACインスタンスに固定されたトランザクションのサービス呼出しが失敗し、tperrnoにTPENOENTが設定され、tperror詳細にTPED_GROUP_FORBIDDENが設定されます。非トランザクション型リクエストに対するルーティングには、すべてのグループが参加可能です。サービスは、UBBCONFIGファイル内の*ROUTINGセクションのRANGESフィールドに指定されたデータ値と一致した最初のグループにルーティングされます。特定の範囲の値に対する非トランザクション型リクエストはすべて、1つのOracle RACインスタンスによってのみ処理されます。
• 中間AUTOTRANサービス(UBBCONFIGファイルの*SERVICESセクション内)を呼び出して、各サービス呼出しをトランザクションに関連付けます。図6-4に、Oracle RAC構成内でのトランザクション型/非トランザクション型リクエストのルーティング例を示します。この例で示した構成は、2つのOracle RACインスタンスで構成されています。TUXRACGROUPSにリストされていない1つのグループに1,000個のトランザクションが作成されている場合、約500個のトランザクションがOracle RACインスタンス1に固定され、GROUP1AとGROUP2Aにのみアクセスできます。残りの500個のトランザクションはOracle RACインスタンス2に固定され、GROUP1BとGROUP2Bにのみアクセスできます。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が指定されたリクエストは、許可されている任意のグループにマップされます。図6-5に、マシン1 (GROUP1AとGROUP2Aが所属)とマシン2 (GROUP1BとGROUP2Bが所属)の例を示します。また、Tuxedo /WSクライアント、Tuxedoネイティブ・クライアント、Tuxedo /Qの場合やMQ Seriesなどの別のリソース・マネージャとリンクしているサーバーの場合、Tuxedo /Domainゲートウェイから呼出しが実行されてトランザクションが作成される場合もあります。リスト6-9に、2つの物理マシン(TUXM1およびTUXM2)でTuxedoが実行されている場合のUBBCONFIGファイルの例を示します。両方のマシンの2つのグループがOracle RACに接続しています。GROUP1AおよびGROUP2Aのグループは、RACインスタンス1に接続しているTUXM1というマシン上で実行中です。GROUP1BおよびGROUP2Bのグループは、RACインスタンス2に接続しているTUXM2というマシン上で実行中です。リスト6-9 UBBCONFIGファイルの例また、両方のマシン上に、管理サービス用のグループ、Tuxedo /Domainゲートウェイ用のグループ、ネイティブTuxedoクライアントのグループがそれぞれ1つずつ存在します。すべてのトランザクションはGWTDOMAINとネイティブ・クライアントによって作成されます。オープンされたトランザクションが確実に適切なRACインスタンスに所属してローカルで処理されるようにするには、リスト6-10に示されているように、GWTDOMAINとネイティブTuxedoクライアントは、直接Oracle RACに接続しない場合でもTUXRACGROUPSに含まれている必要があります。
注意: ネイティブ・クライアントは、ローカル・グループにtpinfo->grpnameを設定して、適切な動作が行われるようにする必要があります。詳細は、6-31ページの「?$paratext>?」を参照してください。リスト6‑10 TUXGROUPS管理者は、Oracle RMとリンクしていない場合やOracle RACインスタンスに物理的に関連付けられていない場合でも、呼出しフローでアクセスされ、新しいトランザクションをオープンする候補となるTUXRACGROUPS環境変数にすべてのサービス・グループが含まれていることを常に確認する必要があります。環境変数TUXRACGROUPSは、非トランザクション型のサービス呼出しに対しては影響を及ぼしません。Tuxedoサーバーが別のRM (MQSeriesなど)や別のデータベースを使用して構築されている場合、このグループをTUXRACGROUPS環境変数に含めることによって、新しく開始したトランザクションをローカル・マシンに強制的に固定できます。リスト6-11 MQSeriesの例グループMQSGROUPA内のサーバーによってトランザクションが作成されると、グループGROUP1A、GROUP2A、GROUP1BおよびGROUP2Bのサービスに対するすべてのTuxedoサービス呼出しがGROUP1AとGROUP2Aにのみ送信されます。GROUP1BとGROUP2Bは、RACインスタンス2に属していて、トランザクションがグループMQSGROUPAを介してRACインスタンス1で作成されたために無視されます。リスト6-12 GWTDOMAINの例マシン1上のGWTDOMAINが外部リクエストを受信して新しいトランザクションを作成すると、グループGROUP1A、GROUP2A、GROUP1BおよびGROUP2Bのサービスに対するすべてのTuxedoサービス呼出しがGROUP1AとGROUP2Aにのみ送信されます。GROUP1BとGROUP2Bは、RACインスタンス2に属していて、トランザクションがグループGWTGROUPAを介してRACインスタンス1で作成されたために無視されます。リスト6-13 TMQFORWARDの例マシン1上のTMQFORWARDがこのようなOracleサービスに新しいメッセージをトランザクションとして送信すると、グループGROUP1A、GROUP2A、GROUP1BおよびGROUP2Bのサービスに対するすべてのTuxedoサービス呼出しがGROUP1AとGROUP2Aにのみ送信されます。GROUP1BとGROUP2Bは、RACインスタンス2に属していて、トランザクションがグループQUEUEGROUPAを介してRACインスタンス1で作成されたために無視されます。ネイティブ・クライアントを特別なサーバー・グループにバインドすることもできます。そのためには、コマンドbuildclient -r <RM_of_the_group> -f <source_file> -o <binary_file>を使用してクライアントをビルドし、使用するグループ名を指定してtpinit()を実行するだけです。たとえば、2つの追加グループCLIENTGROUPAとCLIENTGROUPBを作成して、それぞれのグループで少なくとも2つのTMSを起動できます。リスト6-14に示すように、TUXRACGROUPS環境変数を設定します。リスト6-14 リモート・マシンの例tpinfo->grpnameにCLIENTGROUPAが設定されている場合、TPINIT構造体を指定してtpinit(TPINIT *tpinfo)を実行すると、クライアントがCLIENTGROUPAに関連付けられます。tpinfo->grpnameにCLIENTGROUPBが設定されていると、クライアントがCLIENTGROUPBに関連付けられます。CLIENTGROUPAがマシン1上で、CLIENTGROUPBがマシン2でそれぞれ実行中の場合、マシン1のネイティブ・クライアントは、tpinfo->grpname = CLIENTGROUPAを使用してtpinit()を常に呼び出し、マシン2のネイティブ・クライアントはtpinfo->grpname = CLIENTGROUPBを使用してtpinit()を常に呼び出す必要があります。Tuxedoネイティブ・クライアントがtpbegin()を呼び出すとき、トランザクションは、CLIENTGROUPAの場合はRACインスタンス1に、CLIENTGROUPBの場合はRACインスタンス2にそれぞれ関連付けられます。ワークステーション・クライアントの場合、grpnameの値にはNULL文字列(長さが0の文字列)を指定します。任意のグループ名を設定したり、/WSクライアントを特定のグループに固定したりすることはできません。Tuxedo /WSクライアント内ではtpbegin()は指定されません。オープンしているトランザクションはすべてのRACインスタンスに平等に配布されます。Tuxedo /WSクライアントにおけるベスト・プラクティスは、トランザクションがクライアント側で処理されるのを回避し、Tuxedo /WSクライアントによって呼び出される最初のサーバーでトランザクションを開始することです。たとえば、UBBCONFIGファイルの*SERVICESセクション内の呼び出されるサービスに対してAUTOTRANパラメータを設定すると、自動的にトランザクションが作成されるように強制できます。TMS_rac_refresh(1)は、Oracle RACグループ間のフェイルオーバーが発生したときに呼び出されます。TMS_rac_refresh(1)は、コマンド行から手動で実行しないでください。TMS_rac_refresh(1)の呼出しには、Oracle Fast Application Notification (FAN)を使用します。環境変数XARETRYDURATIONSECONDSとXARETRYINTERVALは、Oracle RACの要求に応じたトランザクション・リカバリ処理(xa_recover())の再試行に使用します。TMS_rac_refresh(1)が呼び出されたときに、Tuxedo Transaction Manager Server (TMS)によりxa_recover()処理を再試行する間隔を指定します。この値が設定されていないか、0に設定されている場合、xa_recover()は1回しか実行されません。
注意: XARETRYDURATIONSECONDSに設定した値でxa_recover()処理を再試行する間隔を秒単位で指定します。XARETRYINTERVAL値は、XARETRYDURATIONSECONDSに0より大きい値を指定した場合にのみ適用されます。Oracle RACを使用するためのTuxedoの構成において重要なプロセスは、グループ・フェイルオーバーの発生時に適切なグループ・パラメータを使用してTMS_rac_refresh(1)を呼び出せるように、Oracle FANを設定する作業です。(グループ・パラメータとグループ・フェイルオーバーの詳細は、「トランザクション伝播の構成」を参照してください。)リスト6-15に、Oracle FANスクリプトの例を示します。リスト6-15 Oracle FANスクリプトの例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で宣言します。同様のプロセスを、グループGROUP3、GROUP4、およびGROUP5にも適用しなければなりません。TUXRACGROUPS環境変数の設定により、RAC構成の異なるインスタンスが同一のトランザクションで組み合されないことが確実になり、最適なパフォーマンスを実現できます。1つのRACインスタンスがダウンした場合、Oracleは、トランザクションの整合性を維持しながら、DTPサービスを非優先インスタンスに転送します。Oracle 10gR2のDTPサービスを使用している場合は、Oracle FANの構成は不要であり、お薦めしません(TMS_rac_refresh(1)を使用するか、またはXARETRYDURATIONSECONDS環境変数またはXARETRYINTERVAL環境変数を設定してください)。TuxedoのOracle RAC用環境変数は、オペレーティング・システムのコマンド行からも設定できますが、これらの環境変数の設定には、UBBCONFIGファイル内の*MACHINESセクションにENVFILEパラメータを指定する方法をお薦めします。
•
• グローバル・トランザクションのコーディングに関する項<Default ?Font>(『Oracle Tuxedo C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』)