MS DTC 分散トランザクション

OLE DB、ODBC (Open Database Connectivity)、ADO (ActiveX Data Object)、または DB-Library を使用して記述されたアプリケーションでは、Transact-SQL 分散トランザクションを開始および停止するための Transact-SQL ステートメントを実行することにより、Transact-SQL 分散トランザクションを使用できます。OLE DB と ODBC では、分散トランザクション管理を API (アプリケーション プログラミング インターフェイス) レベルでサポートすることもできます。OLE DB と ODBC アプリケーションでは、これらの API 関数を使用して、SQL Server データベース エンジン以外の Microsoft 分散トランザクション コーディネータ (MS DTC) トランザクションをサポートする他の COM (コンポーネント オブジェクト モデル) リソース マネージャが含まれる分散トランザクションを管理できます。API 関数を使用すると、データベース エンジンのインスタンスが実行されている複数のコンピュータが含まれる分散トランザクションの境界もより高度に制御できます。

ODBC 分散トランザクション

接続属性 SQL_ATTR_AUTOCOMMIT を SQL_AUTOCOMMIT_OFF に設定し、ODBC の SQLEndTran 関数を呼び出して各トランザクションをコミットまたはロールバックすると、ODBC の API レベルでローカル トランザクションを制御できます。ODBC アプリケーションで分散トランザクションを管理する場合は、この関数を使用しないでください。次のように、MS DTC の COM メソッドを代わりに使用してください。

  • DtcGetTransactionManager を呼び出して MS DTC に接続します。

  • ITransactionDispenser::BeginTransaction を呼び出して分散トランザクションを開始し、トランザクション オブジェクトを取得します。

  • 分散トランザクションに参加している ODBC 接続ごとに、fOption を SQL_COPT_SS_ENLIST_IN_DTC に設定し、vParamITransactionDispenser::BeginTransaction からトランザクション オブジェクトのアドレスを指定して、ODBC の SQLSetConnectAttr 関数を呼び出します。

  • トランザクションの完了時に、ODBC の SQLEndTran 関数を呼び出すのではなく、ITransactionDispenser::BeginTransaction から取得したトランザクション オブジェクトの ITransaction::Commit メソッドまたは ITransaction::Rollback メソッドを呼び出します。

OLE DB 分散トランザクション

OLE DB での分散トランザクションの制御モデルは、ローカル トランザクションの制御モデルに似ています。ローカル トランザクションを制御するには、OLE DB コンシューマが次の操作を行います。

  • ITransactionLocal::StartTransaction メソッドを使用して、ローカル トランザクションを開始しトランザクション オブジェクトを取得します。

  • ITransactionLocal::StartTransaction によって取得したトランザクション オブジェクトの ITransaction::Commit メソッドまたは ITransaction::Rollback メソッドを呼び出します。

分散トランザクションを制御するために、コンシューマによって次の操作が行われます。

  • DtcGetTransactionManager を呼び出して MS DTC に接続します。

  • ITransactionDispenser::BeginTransaction を呼び出して、分散トランザクションを開始し、トランザクション オブジェクトを取得します。

  • 分散トランザクションに参加している接続ごとに、分散トランザクション オブジェクトの ITransactionJoin インターフェイスを呼び出します。

  • 分散トランザクション オブジェクトの ITransaction::Commit メソッドまたは ITransaction::Rollback メソッドを呼び出してトランザクションを完了します。