top
Loading...
SQLServer2000分布式事務錯誤解決

如果在Windows.NETServer上安裝的SQLServer2000中運行鏈接服務器查詢,可能會返回下列錯誤(即使MSDTC正在該服務器上運行):

癥狀如果在Windows.NETServer上安裝的SQLServer2000中運行鏈接服務器查詢,可能會返回下列錯誤(即使MSDTC正在該服務器上運行):Server:Msg8501,Level16,State3,Line3 MSDTConserver'servername'isunavailable.在SQLServer錯誤日志中,您會發現由運行該查詢的spid引發的下列錯誤:ResourceManagerCreationFailed:ResultCode=0x8004d01c原因這是設計使然。如果在"本地系統"帳戶下運行"分布式事務處理協調器服務"就會發生此錯誤。解決方案最近為了提高RPC安全性對DTC所做的更改要求MSDTC作為"NTAuthorityNetworkService"運行。這是。NETServer的默認選項。在WindowsNT和Windows2000中,默認情況下MSDTC服務是在"本地系統"帳戶下運行的。

警告:"注冊表編輯器"使用不當可造成嚴重問題,這些問題可能需要重新安裝操作系統。Microsoft不保證能夠解決因為"注冊表編輯器"使用不當而產生的問題。使用"注冊表編輯器"需要您自擔風險。

若要將MSDTC服務帳戶從"本地系統"更改為"NTAuthorityNetworkService",請執行下列步驟:1.運行regedt32,瀏覽至HKEY_LOCAL_MACHINESoftwareMicrosoftMSDTC.添加一個DWORD值TurnOffRpcSecurity,值數據為1.2.打開命令提示,運行"netstopmsdtc",然后運行"netstartmsdtc".3.轉至"組件服務管理工具".

a.瀏覽至"啟動管理工具".

b.選擇"組件服務".

c.展開"組件服務"樹,然后展開"我的電腦".

d.右鍵單擊"我的電腦",然后選擇"屬性".

e.在MSDTC選項卡中,確保選中了下列選項:網絡DTC訪問網絡管理網絡事務XA事務另外,"DTC登錄帳戶"一定要設置為"NTAuthorityNetworkService".

f.單擊"確定".這樣將會提示您"MSDTC將會停止并重新啟動。所有的依賴服務將被停止。請按'是'繼續".單擊"是"繼續。

g.單擊"確定"關閉"我的電腦"屬性窗口。

4.再次運行regedt32,瀏覽至HKEY_LOCAL_MACHINESoftwareMicrosoftMSDTC,然后刪除TurnOffRpcSecurity項。現在您的MSDTC服務應該在"NTAuthorityNetworkService"帳戶下運行了,并且不會再出現該錯誤。

更多信息當"MSDTC安全性"配置下的"網絡DTC訪問"禁用時,如果運行鏈接服務器查詢則會返回下列錯誤:Server:Msg7391,Level16,State1,Line2TheoperationcouldnotbeperformedbecausetheOLEDBprovider'SQLOLEDB'

wasunabletobeginadistributedtransaction.[OLE/DBproviderreturnedmessage:Newtransactioncannotenlistinthespecifiedtransactioncoordinator.]

跟蹤標記7300打開時:Server:Msg7391,Level16,State1,Line2TheoperationcouldnotbeperformedbecausetheOLEDBprovider'SQLOLEDB'

wasunabletobeginadistributedtransaction.[OLE/DBproviderreturnedmessage:Newtransactioncannotenlistinthespecifiedtransactioncoordinator.]OLEDBerrortrace[OLE/DBProvider'SQLOLEDB'ITransactionJoin::JoinTransactionreturned0x8004d00a].

MSDTC服務一定要按照上面"解決方案"一節中的說明進行設置,才能防止此錯誤。

再現現象的步驟

1.轉至"啟動管理工具服務".

2.右鍵單擊"分布式事務處理協調器"服務,轉至"登錄"選項卡,選擇"登錄身份"下的"本地系統"帳戶。

3.停止然后重新啟動該服務。

4.從查詢分析器,運行下列腳本:execsp_addlinkedserverremote1execsp_setnetnameremote1,goexecremote1.pubs.dbo.sp_executesqlN'createtablet(c1int)'gosetxact_abortongobegintraninsertintoremote1.pubs.dbo.tvalues(1)committrango

(t114)

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗