Oracle® Services for Microsoft Transaction Server開発者ガイド 12c リリース1(12.1) for Microsoft Windows B72977-02 |
|
前 |
次 |
この章では、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 Databaseで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リカバリ・ジョブにより、インダウト・トランザクションがコミットまたは終了されます。
OraMTSは、サーバーベースのリカバリを使用して、MSDTCによって開始されたインダウト・トランザクションを解決します。これを行うには、OraMTS管理者は、UTL_HTTP
を通じてWindows中間層ノードにアクセス可能である必要があります。「自動トランザクション・リカバリの構成」に示すように、oramtsadmin.sql
により、UTL_HTTP
に対する実行権限がOraMTS管理者に付与されます。
Oracle Databaseバージョン11g 以上では、DBAは、アウトバウンドHTTP接続を作成する権限をOraMTS管理者に付与するアクセス制御リスト(ACL)を作成する必要があります。例3-1で、これを説明しています。
例3-1 ACLリストの作成とOraMTS管理者の追加
BEGIN -- Create the new ACL, naming it "OraMTSadmin.xml", with a description. -- This provides the OraMTS administrative user e.g. MTSADMIN user FOO -- the privilege to connect DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('OraMTSadmin.xml', 'Allow usage to the UTL network packages', 'FOO', TRUE, 'connect'); -- Now grant privilege to resolve DNS names to the OraMTS administrative user DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('OraMTSadmin.xml' , 'FOO', TRUE,'resolve'); -- Specify which hosts this ACL applies to, in this case we are allowing -- access to all hosts. if one knew the list of all Windows middle-tier, -- these could be added one by one. DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('OraMTSadmin.xml','*'); END;
自動トランザクション・リカバリは、データベース・ジョブをスケジューリングすることで実行します。インダウト・トランザクションに対するデータベース・ジョブは、Microsoft Transaction Serverトランザクションに登録しているデータベースごとにスケジューリングする必要があります。
トランザクション・リカバリは、utl_oramts.sql
およびprvtoramts.plb
スクリプトをトリガーしてPL/SQLパッケージutl_oramts
を作成するoramtsadmin.sql
スクリプトを実行することで構成されます。また、Microsoft Transaction Serverトランザクションと連携したインダウト・トランザクションを表示するデータベース・ビューoramts_2pc_pending
が作成されます。
oramtsadmin.sql
スクリプト
Microsoft Transaction Server管理者ユーザー・アカウントの作成
トランザクション・リカバリのデータベース・ジョブを1分おきに自動的にスケジューリング
データベース・ジョブが実行されると、データベースでMicrosoft Transaction Serverと連携した未解決のグローバル・トランザクションがないかどうかが確認されます。インダウト・トランザクションのトランザクション識別子(XID)の情報により、トランザクションが開始されたコンピュータが示されます。そのコンピュータのOracle MTS Recovery Serviceがトランザクションを解決します。
リカバリ後のクリーンアップを30分おきにスケジューリング
次のタスクを実行し、データベースでの自動トランザクション・リカバリをスケジューリングします。
初期化パラメータJOB_QUEUE_PROCESSES
では、1インスタンスで起動されるジョブ・スレーブの最大数を指定します。
ジョブ・キュー・プロセスを設定して起動するには、次のようにします。
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
に移動します。
ここに指定されているレジストリ情報をクラスタ内の全ノードにコピーします。
キーを追加したコンピュータを再起動します。