プライマリ・コンテンツに移動

Oracle® Data Provider for .NET開発者ガイド ODAC 12.2c リリース1 (12.2.0.1) for Microsoft Windows E88311-03 |
| 目次 | 索引

前 | 次 |

# 分散トランザクション

ODP.NET管理対象ドライバおよび管理対象外ドライバはリソース・マネージャを提供します。これは、Oracleデータベース・トランザクションを管理し、Microsoft分散トランザクション・コーディネータ(MSDTC)とともに動作してネットワーク全体のアプリケーションに対して原子性と分離を保証します。MSDTCは、同じ`System.Transactions`に入っているあらゆるリソース・マネージャと連係し、2フェーズ・コミットまたはロールバックをアトミックに実行します。これにより、Oracle分散トランザクションは、ネットワーク全体で正常にコミットまたはロールバックすることができます。

## Microsoftトランザクション・サーバー用のOracleサービス

Oracle Services for Microsoft Transaction (OraMTS)によって、クライアント・コンポーネントはMSDTCトランザクションでのOracleデータベースへの参加が可能になります。OracleデータベースのMSDTCへのプロキシとして動作し、Oracle分散データベース・トランザクションが他の分散トランザクションと一緒にコミットまたはロールバックできるようにします。

ネットワーク障害やサーバー・ハードウェア障害などの障害が発生した場合、インプロセス分散トランザクションをインダウトにしておくことができます。OraMTSには、このトランザクションを開始したマシンでこれらのトランザクションを解決するリカバリ・サービスがあります。このリカバリ・サービスはWindowsサービスとして実行します。

OraMTS Recoveryサービスを、ODP.NETが稼働していてMSDTCに参加しているすべてのクライアント・マシンにインストールする必要があります。マシンには複数のIPアドレスがある可能性があるため、管理対象ODP.NETアプリケーションの管理者は、アプリケーションの.NET構成ファイルでリカバリ・サービスが稼働しているホスト・マシン名またはIPアドレスを指定できます。ODP.NET管理対象外ドライバは、リカバリ・サービスのIP/マシン名を自動的に解決します。

.NET Framework 4.5.2において、Microsoftは新しいAPIサポートを導入し、これによりOracleはODP.NETトランザクションとMSDTCが連係して動作するように管理対象コールを使用できるようになりました。ODP.NETはこの管理対象コードを管理対象ドライバ(ODAC 12cリリース3以降)および管理対象外ドライバ(ODAC 12cリリース4以降)とともに利用します。

ODP.NET管理対象外ドライバの開発者は最新の.NETフレームワークおよびODP.NETバージョンを使用する際にOraMTSを使用しないこともできますが、リカバリ・シナリオを実現するためにOraMTS Windowsリカバリ・サービスをインストールして構成する必要はあります。

表2-8 分散トランザクションでサポートされるODP.NETのタイプと.NET Frameworkのバージョン

ODP.NETタイプ | .NET Frameworkバージョン | 分散トランザクション・サポート
--- | --- | ---
管理対象 | 4.5.2以降 | 分散トランザクションに.NETフレームワークのネイティブ管理対象実装(デフォルト)を使用します。これはオラクル社の推奨アプローチです。
管理対象 | 4.5.1以下 | `Oracle.ManagedDataAccessDTC.dll`を使用します 注意: `Oracle.ManagedDataAccessDTC.dll`を使用する管理対象ODP.NET分散トランザクションの使用は、主に.NET 4.5.2より前の.NET Framework 4リリースで使用されており、非推奨となりました。Microsoft社では、このような以前の.NET Framework 4バージョンはサポートされていません。管理対象ODP.NET分散トランザクションは引き続きサポートされ、.NET Frameworkの完全管理のネイティブ分散トランザクション実装で拡張されます。
管理対象外 | 4.5.2以降 | OraMTS (デフォルト)または管理対象OraMTS実装を使用します。Oracle RACまたはData Guardからの高可用性を必要とする管理対象外ODP.NETアプリケーションでは、管理対象OraMTSの使用をお薦めします。
管理対象外 | 4.5.1以下 | OraMTSを使用します

注意:

.NET Framework 4ファミリーの.NET Framework 4.5.1 以下はすでにサポート対象外ですが、管理者は引き続き、上にリストされた分散トランザクション構成のいずれかを、.NET 4.5.2以上と組み合せて使用することができます。.NET 4.5.1以下の場合、表は単に、ユーザー構成に基づいて特定の設定を推奨しているだけです。必須ではありません。

関連項目:

『Oracle Services for Microsoft Transaction Server開発者ガイド for Microsoft Windows』のOracle MTS Recovery Serviceの手動作成に関する項。

## ODP.NET管理対象ドライバ設定

この項では、ODP.NET管理対象ドライバで分散トランザクションを使用するために必要な設定および構成手順を説明します。

アプリケーションが.NETのネイティブ管理対象分散トランザクション実装(デフォルト)を使用することをお薦めします。これは.NETフレームワーク4.5.2以上で使用できます。アプリケーションでは、.NET構成ファイルの`UseManagedDTC`パラメータを設定することで、.NETのネイティブ管理対象分散トランザクションまたは`Oracle.ManagedDataAccessDTC.dll`が使用されているかを設定できます。これらの.NETフレームワーク・バージョンで分散トランザクションを構成するには、次の手順を実行します。

1. OraMTSリカバリ・サービスを作成して設定するか、既存のリカバリ・サービスが実行されていることを確認します。

2. OraMTSリカバリ・サービスが稼働しているポート番号を指定するには、.NET構成で`OMTSRECO_PORT`の値を設定します。

かわりに、`Oracle.ManagedDataAccessDTC.dll`を.NET Framework 4.5.2および管理対象ODP.NETとともに使用することもできます。そのためには、`UseManagedDTC`を`true`に設定し、.NET Framework 4.5.1に関する次の手順を実行します。

.NET Framework 4.5.1以下のアプリケーションでは、次の手順を実行して分散指示の管理対象ODP.NETを設定して構成します。

1. OraMTSリカバリ・サービスを作成して設定するか、既存のリカバリ・サービスが実行されていることを確認します。

2. アプリケーションとともに`Oracle.ManagedDataAccessDTC.dll`をデプロイします。

3. OraMTSリカバリ・サービスが稼働しているポート番号を指定するには、.NET構成で`OMTSRECO_PORT`の値を設定します。

`Oracle.ManagedDataAccessDTC.dll`はODP.NET管理対象ドライバに含まれています。このDLLは、MSDTCに対して管理対象外MSDTC COMコールを作成します。これは、このDLLには32ビット・バージョンと64ビット・バージョンがあることを意味します。これらの2つのDLLは同じ名前を共有します。32ビットの.NET Frameworkを使用している場合、32ビットの`Oracle.ManagedDataAccessDTC.dll`をデプロイします。64ビットの.NET Frameworkを使用している場合、64ビットの`Oracle.ManagedDataAccessDTC.dll`をデプロイします。これらのDLLは次のディレクトリにあります。

- 32ビット.NET Frameworkの場合: `ORACLE_HOME``\odp.net\managed\x86`

- 64ビット.NET Frameworkの場合: ORACLE_HOME`\odp.net\managed\x64`

ODP.NETインストールにおいて、`Oracle.ManagedDataAccessDTC.dll`はグローバル・アセンブリ・キャッシュ(GAC)には含まれなくなりました。このDLLを使用するアプリケーションでは、`Oracle.ManagedDataAccessDTC.dll`はアプリケーション・ディレクトリまたはGACに置く必要があります。

.NETアプリケーションからは`Oracle.ManagedDataAccessDTC.dll`を直接参照しないでください。これは分散トランザクションの使用時にODP.NET管理対象ドライバによって暗黙的にロードされます。

特にプラットフォーム・ターゲットが`x64`または`x86`のアプリケーションでは、GACに置かれている場合またはアプリケーション・ディレクトリにある場合、`Oracle.ManagedDataAccess.dll`は`Oracle.ManagedDataAccessDTC.dll`を適切にロードします。

AnyCPUを対象とするアプリケーションでは、アプリケーションによってロードされる`Oracle.ManagedDataAccess.dll`のあるx64およびx86サブディテクトリに対応する`Oracle.ManagedDataAccessDTC.dll`を置く必要があります。ODP.NET管理対象ドライバは、アプリケーションが32ビットまたは64ビットであるかに基づいて、該当する`Oracle.ManagedDataAccessDTC.dll`アセンブリ(32ビットまたは64ビット)をロードします。`Oracle.ManagedDataAccessDTC.dll`の32ビット・バージョンおよび64ビット・バージョンの両方がGACにある場合、該当するアセンブリが自動的にロードされます。

## ODP.NET管理対象外ドライバ設定

この項では、ODP.NET管理対象外ドライバとともに分散トランザクションを使用するために必要な設定および構成手順を説明します。

.NET Framework 4.5.2以上では、ODP.NET管理対象外ドライバはアセンブリ内に管理対象OraMTS実装を組み込みました。OraMTSはODP.NET管理対象外ドライバのデフォルト実装のままですが、Oracle Real Application ClustersまたはOracle Data Guardとともに高可用性FAN操作(HA Events = true)を使用する場合、管理対象OraMTS実装をお薦めします。管理対象OraMTS実装はこの高可用性機能をサポートしますが、従来のOraMTSはサポートしません。

アプリケーションでは、.NET構成ファイルで`UseOraMTSManaged`パラメータを設定することでOraMTS (デフォルト)または管理対象OraMTSのどちらが使用されているかを設定できます。

ODP.NET管理対象外ドライバのOraMTS実装を使用するリカバリ・サービスを含みOraMTSをインストールして構成します。

.NET Framework 4.5.2以上のアプリケーションでは、従来のOraMTSにかわり管理対象OraMTS実装を使用できます。これを設定するには、次の手順を実行します。

1. .NET構成ファイルで`UseOraMTSManaged`を`true`に設定します。

2. OraMTSリカバリ・サービスを作成して設定するか、既存のリカバリ・サービスが実行されていることを確認します。

関連項目:

.NET構成の設定の詳細は、「distributedTransactionセクション」を参照してください