MS DTC 分散式事務

iSQlServer發表於2008-11-13

使用 OLE DB、開放式資料庫連線 (ODBC)、ActiveX 資料物件 (ADO) 或 DB 庫編寫的應用程式可以使用 Transact-SQL 分散式事務,方法是發出 Transact-SQL 語句來啟動和停止 Transact-SQL 分散式事務。OLE DB 和 ODBC 還包含在應用程式程式設計介面 (API) 級別對管理分散式事務的支援。OLE DB 應用程式和 ODBC 應用程式可以使用這些 API 函式管理包括其他元件物件模型 (COM) 資源管理器(支援 Microsoft 分散式事務處理協調器 [MS DTC] 事務但不支援 SQL Server 資料庫引擎)的分散式事務。它們也可以使用 API 函式獲取對包括多臺執行資料庫引擎例項的計算機的分散式事務邊界的更多控制。

 ODBC 分散式事務
通過將連線屬性 SQL_ATTR_AUTOCOMMIT 設定為 SQL_AUTOCOMMIT_OFF,然後呼叫 ODBC SQLEndTran 函式提交或回滾每個事務,可以控制 ODBC API 級別的本地事務。請勿使用這些函式管理 ODBC 應用程式中的分散式事務。而應該使用 MS DTC COM 方法:

呼叫 DtcGetTransactionManager 連線到 MS DTC。

呼叫 ITransactionDispenser::BeginTransaction 啟動分散式事務並獲取事務物件。

對每個參與分散式事務的 ODBC 連線,呼叫 ODBC 函式 SQLSetConnectAttr,其中 fOption 設定為 SQL_COPT_SS_ENLIST_IN_DTC,vParam 儲存通過 ITransactionDispenser::BeginTransaction 獲得的事務物件的地址。

當事務完成時,對於通過 ITransactionDispenser::BeginTransaction 獲得的事務物件,不要呼叫 ODBC SQLEndTran 函式,而應呼叫 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 方法,完成該事務。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-494031/,如需轉載,請註明出處,否則將追究法律責任。

相關文章