控制分布式事務(wù)所涉及的每個(gè)資源的軟件稱(chēng)為資源管理器。分布式事務(wù)由各個(gè)資源管理器內(nèi)的本地事務(wù)組成。每個(gè)資源管理器必須能夠與分布式事務(wù)內(nèi)的所有其它資源管理器相協(xié)調(diào),以提交或回滾自己的本地事務(wù)。SQL Server 可以作為分布式事務(wù)內(nèi)的資源管理器工作,并遵從用于分布式事務(wù)處理的 X/Open XA 規(guī)范。
·事務(wù)管理器
提交或回滾分布式事務(wù)由稱(chēng)為事務(wù)管理器的軟件組件控制。事務(wù)管理器與每個(gè)資源管理器相協(xié)調(diào),確保一起提交或回滾所有組成分布式事務(wù)的本地事務(wù)。Microsoft分布式事務(wù)處理協(xié)調(diào)器 (MS DTC) 服務(wù)如事務(wù)管理器一樣工作。MS DTC 遵從用于分布式事務(wù)處理的 X/Open XA 規(guī)范。
·使用用于 SQL Server 的 OLE DB 提供程序或 SQL Server ODBC 驅(qū)動(dòng)程序的應(yīng)用程序,可以使用 OLE DB 方法或 ODBC 函數(shù)讓 SQL Server 連接聯(lián)接由應(yīng)用程序啟動(dòng)的分布式事務(wù)。
(二)案例
(2.1)問(wèn)題描述
在執(zhí)行分布式事務(wù)時(shí),在sql server 2005下收到如下錯(cuò)誤:
消息 7391,級(jí)別 16,狀態(tài) 2,過(guò)程 xxxxx,第 16 行
無(wú)法執(zhí)行該操作,因?yàn)殒溄臃?wù)器 "xxxxx" 的 OLE DB 訪問(wèn)接口 "SQLNCLI" 無(wú)法啟動(dòng)分布式事務(wù)。
在sql server 2000下收到如下錯(cuò)誤:
該操作未能執(zhí)行,因?yàn)?OLE DB 提供程序 'SQLOLEDB' 無(wú)法啟動(dòng)分布式事務(wù)。
[OLE/DB provider returned message: 新事務(wù)不能登記到指定的事務(wù)處理器中。 ]
OLE DB 錯(cuò)誤跟蹤[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
MSDTC服務(wù)依賴(lài)于RPC(Remote Procedure Call (RPC))服務(wù),RPC使用135端口,保證RPC服務(wù)啟動(dòng),如果服務(wù)器有防火墻,保證135端口不被防火墻擋住。使用“telnet ip 135 ”命令測(cè)試對(duì)方端口是否對(duì)外開(kāi)放。也可用端口掃描軟件(比如Advanced Port Scanner)掃描端口以判斷端口是否開(kāi)放。