| Oracle Services for Microsoft Transaction Server開発者ガイド 11gリリース1(11.1) for Microsoft Windows E05793-01 |
|
![]() 戻る |
![]() 次へ |
この章では、Microsoft Transaction Server連携のOracleトランザクション・リカバリを作成し、スケジューリングする方法について説明します。
この章の項目は次のとおりです。
Oracle Services for Microsoft Transaction Server(OraMTS)のインストールまたは移行後に、Microsoft Transaction ServerおよびOracle Database環境を構成する必要があります。
コンピュータにMicrosoft Transaction Serverがインストールされている場合、Windowsコンピュータでは構成の必要はありません。
Microsoft Transaction Serverを構成するには、Oracle Databaseがインストールされているコンピュータで次のタスクを実行します。
データベースに対してoramtsadmin.sqlスクリプトを実行し、Microsoft Transaction Server管理者ユーザー・アカウント(デフォルト・ユーザー名はmtssys)を作成します。
自動トランザクション・リカバリをスケジューリングします。
「Microsoft Transaction Serverの自動トランザクション・リカバリのスケジューリング」を参照してください。
Oracle Fail Safe構成を持っている場合は、oramtsadmin.sqlスクリプトの実行前または実行後にレジストリの値を変更します。
「Oracle Fail Safe構成用のレジストリ値の変更」を参照してください。
OracleでMicrosoft Transaction Serverを使用するには、分散トランザクション機能が必要です。Microsoft Transaction Server連携のOracleトランザクションは、次のいずれかで障害が発生すると、インダウト・トランザクションになります。
Microsoft Transaction Serverのアプリケーション
ネットワーク
Oracle MTS Recovery Serviceは、失敗したトランザクションが開始されたコンピュータで、インダウト・トランザクションを解決します。Oracle MTS Recovery Serviceは、Oracle Services for Microsoft Transaction Serverとともに自動的にインストールされます。各コンピュータにOracle MTS Recovery Serviceを1つのみインストールできます。Microsoft Transaction Server対応の各データベースでスケジューリングされたリカバリ・ジョブによって、Oracle MTS Recovery Serviceがインダウト・トランザクションを解決できるようになります。
Oracle MTS Recovery Serviceにより、Microsoft Transaction Serverのインダウト・トランザクションが次の順序で解決されます。
DBMSリカバリ・ジョブにより、MTS連携のインダウト・トランザクションが検出されます。
DBMSリカバリ・ジョブでは、インダウト・トランザクションのXIDから、リカバリ・サービスのエンドポイントのアドレスが抽出され、MTS/MS DTCトランザクションの結果に対するリカバリ・サービスが要求されます。
リカバリ・サービスにより、トランザクションの結果に対するMS DTCが要求されます。
リカバリ・サービスでは、DBMSジョブ・プロセスに対してトランザクションの結果が報告されます。
DBMSリカバリ・ジョブにより、インダウト・トランザクションがコミットまたは終了されます。
自動トランザクション・リカバリは、データベース・ジョブをスケジューリングすることで実行します。インダウト・トランザクションに対するデータベース・ジョブは、Microsoft Transaction Serverトランザクションに登録しているデータベースごとにスケジューリングする必要があります。
トランザクション・リカバリを構成するには、oramtsadmin.sqlスクリプトを実行します。このスクリプトにより、PL/SQLパッケージutl_oramtsを作成するutl_oramts.sqlスクリプトとprvtoramts.plbスクリプトがトリガーされます。Microsoft Transaction Serverトランザクションと連携したインダウト・トランザクションを示すoramts_2pc_pendingデータベース・ビューも作成されます。
oramtsadmin.sqlスクリプト
Microsoft Transaction Server管理者ユーザー・アカウントの作成
トランザクション・リカバリのデータベース・ジョブを1分おきに自動的にスケジューリング
データベース・ジョブが実行されると、データベースでMicrosoft Transaction Serverと連携した未解決のグローバル・トランザクションがないかどうかが確認されます。インダウト・トランザクションのトランザクション識別子(XID)の情報により、トランザクションが開始されたコンピュータが示されます。そのコンピュータのOracle MTS Recovery Serviceがトランザクションを解決します。
リカバリ後のクリーンアップを30分おきにスケジューリング
次のタスクを実行し、データベースでの自動トランザクション・リカバリをスケジューリングします。
初期化パラメータJOB_QUEUE_PROCESSESでは、インスタンスで起動されるジョブ・キュー・プロセスの数を指定します。
ジョブ・キュー・プロセスを設定して起動するには、次のようにします。
SYSDBA権限があることを確認します。
Oracle Databaseがインストールされているコンピュータにログオンします。
SQL*Plusを起動します。
C:\> sqlplus /NOLOG
データベースにSYSDBAとして接続します。
SQL> CONNECT / AS SYSDBA
初期化パラメータJOB_QUEUE_PROCESSESを設定します。
JOB_QUEUE_PROCESSES = 1
このパラメータのデフォルト値は0です。メッセージの伝播先が多数ある場合は、このパラメータに1より大きい値を設定します。
Oracle Databaseを停止します。
SQL> SHUTDOWN
Oracle Databaseを再起動します。
SQL> STARTUP
SQL*Plusを終了します。
SQL> EXIT
oramtsadmin.sqlスクリプトでは、デフォルト・ユーザー名mtssysでMicrosoft Transaction Server管理者ユーザー・アカウントを作成します。Microsoft Transaction Serverトランザクション・リカバリ・ジョブは、管理者ユーザー・アカウントで実行されます。
oramtsadmin.sqlスクリプトでは、utl_oramts.sqlスクリプトを実行して、管理者ユーザー・アカウントに次の権限およびロールを付与します。
自動トランザクション・リカバリを作成してスケジューリングするには、次のようにします。
SYSDBA権限があることを確認します。
Oracle Databaseがインストールされているコンピュータにログオンします。
SQL*Plusを起動します。
C:\> sqlplus /NOLOG
データベースにSYSDBAとして接続します。
SQL> CONNECT / AS SYSDBA
oramtsadmin.sqlスクリプトを実行します。
SQL> @ORACLE_BASE\ORACLE_HOME\oramts\admin\oramtsadmin.sql;
Microsoft Transaction Serverの管理者ユーザー名およびパスワードをそれぞれ指定するよう求められます。デフォルトのユーザー名mtssysおよびパスワードmtssysを受け入れることも、変更することもできます。
手順5でパスワードを変更しなかった場合は、次のスクリプトを使用して、変更できます。
SQL> ALTER USER USERNAME IDENTIFIED BY new_password;
このタスクの完了後にユーザー名を変更するには、そのユーザーを削除してoramtsadmin.sqlスクリプトを再実行し、要求されたら別のユーザー名を指定します。
SQL*Plusを終了します。
SQL> EXIT
utl_oramtsという単一のPL/SQLパッケージがMicrosoft Transaction Server管理者のスキーマに作成されます。utl_oramtsでは、次のパブリック・プロシージャを提供し、次のビューを作成します。
このプロシージャを使用して、データベース内のMicrosoft Transaction Serverインダウト・トランザクションを表示します。このプロシージャでは、dbms_outputパッケージを使用して結果を表示します。
説明: このプロシージャを使用する場合、SERVEROUTPUTをONに設定する必要があります。
SQL> SET SERVEROUTPUT ON SQL> EXECUTE utl_oramts.show_indoubt;
次の情報が表示されます。
========================================================= currently indoubt transactions ========================================================= formatid : 21255235 gtrid : C2229A505904974D81FB7316B147325900000000 bqual : 5BAB6A6B55CD294AA20335839110829C0100000000901944700050 local txid : 142.11.202 tx state : prepared protocol : HTTP endpoint : middletier-1@foo.com:2030 ========================================================= formatid : 21255235 gtrid : 259DF9C8DFC5574F8876F0DF4E15CCAD00000000 bqual : 2C8DCED5B9816244BA2B73CC013EEB870100000000901944700050 local txid : 2.18.185 tx state : prepared protocol : HTTP endpoint : middletier-2@foo.com:2030
このプロシージャは、トランザクション・リカバリ・ジョブで実行されます。utl_oramts.recover_automaticに対して自動データベース・ジョブがスケジューリングされます。ジョブが実行されると、データベースでMicrosoft Transaction Serverと連携した未解決のグローバル・トランザクションがないかどうかが確認されます。インダウト・トランザクションのXIDの情報により、トランザクションが開始されたコンピュータが示されます。Oracle MTS Recovery Serviceが通知を受け、トランザクションを解決します。
このプロシージャを使用して、トランザクション・マネージャ(MS DTC)からの解決済トランザクションの消去を要求します。このプロシージャは、リカバリ後のクリーンアップ・ジョブで実行されます。
oramts_2pc_pendingビューは、oramtsadmin.sqlを実行すると作成されます。oramts_2pc_pendingは、データベースのインダウト・トランザクションを示します。このビューは、次の列で構成されます。
Formatid: これは、データベース内のグローバル・トランザクションのformatidです。
global_transaction_id: これは、Microsoft Transaction Serverトランザクションに対応するOracleグローバル・トランザクションのトランザクション識別子です。実際には、Microsoft Transaction ServerトランザクションのGlobal Unique Identifier(GUID)です。
branch_id: これは、Oracleトランザクションのブランチ識別子です。1つのMicrosoft Transaction Serverトランザクションが複数のOracleグローバル・トランザクションを持つ場合があります。これは、同じMicrosoft Transaction Serverトランザクション内に存在するMicrosoft Transaction Server/COM+コンポーネントの数に依存します。これらのトランザクションはすべて、下位のグローバル・トランザクション識別子を持ちますが、異なるブランチ識別子を持ちます。
local_tx_id: ローカルのOracleトランザクションは、各Microsoft Transaction Serverトランザクションに対応します。この列は、このローカル・トランザクションに対応する識別子を示します。
state: これは、ペンディング、ヒューリスティックにコミット、ヒューリスティックに終了などのトランザクションの状態を示します。
protocol: これは、データベースのトランザクション・リカバリ・ジョブがOracle MTS Recovery Serviceとの通信に使用するプロトコルです。
endpoint: これは、Microsoft Transaction Serverトランザクションが開始されたWindowsコンピュータのエンドポイントです。HTTP接続の場合、これはホスト名およびポート番号に変換されます。
データベース内のMicrosoft Transaction Server連携のインダウト・トランザクションを表示するには、SQL*Plusを使用してoramts_2pc_pendingビューを問い合せます。
Microsoft Transaction Server管理者ユーザー・アカウントを使用して、SQL*Plusを起動します。
C:\> sqlplus mtsadmin_user/ mtsadmin_password
次のコマンドを入力します。
SQL> SELECT * FROM oramts_2pc_pending;
これにより、インダウト・トランザクションが開始されたコンピュータが表示されます。
通常の構成では、MS DTCとOracle MTS Recovery Serviceは同じコンピュータで稼働します。これにより、トランザクション・リカバリに必要な情報がOracleとMicrosoft Transaction Serverの統合レイヤーで使用できるようになります。
Microsoft Transaction ServerアプリケーションがWindowsクラスタの一部となるような構成(たとえば、アプリケーションがクラスタ内の別のノードまたはホストにフェイルオーバー可能な構成)では、MS DTCはクラスタ全体のリソースとして稼働します。すべてのクラスタ・ノードが、任意のクラスタ・ノードで稼働しているMS DTCの1つのインスタンスを使用します。
Oracle Fail Safe構成を採用している場合、Microsoft Transaction Serverトランザクションに登録しているクラスタ内の全ノードに次のレジストリ情報を必ずレプリケートしてください。
Oracle Fail Safe構成用にレジストリ値を変更するには、次のようにします。
MS DTCおよびOracle MTS Recovery Serviceがインストールされているコンピュータにログオンします。
コマンド・プロンプトからレジストリ エディタを起動します。
C:\> regedt32
「レジストリ エディタ」ウィンドウが表示されます。
HKEY_LOCAL_MACHINE\Software\Oracle\OracleMTSRecoveryServiceに移動します。
ここに指定されているレジストリ情報をクラスタ内の全ノードにコピーします。
キーを追加したコンピュータを再起動します。