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
に移動します。
ここに指定されているレジストリ情報をクラスタ内の全ノードにコピーします。
キーを追加したコンピュータを再起動します。