高階技能篇 SQL鏈結伺服器無法啟動分布式服務

2021-10-19 11:08:58 字數 1524 閱讀 5032

鏈結伺服器***的 ole db 訪問介面 「sqlncli」 返回了訊息 「沒有活動事務。」

無法執行該操作,因為鏈結伺服器 *** 的 ole db 訪問介面 「sqlncli」 無法啟動分布式事務。

出現這個問題的直接原因就是鏈結伺服器對於事務的處理,需要在鏈結的兩端都用到分布式服務,如果這個服務配置上有問題就會出現這個錯誤。在這裡,我把所有我遇到的沒遇到的排查方法都寫下,以供查詢所需:

(1)鏈結雙方都啟動msdtc服務

msdtc服務提供分布式事務服務,如果要在資料庫中使用分布式事務,必須在參與的雙方伺服器啟動msdtc(distributed transaction coordinator)服務。

注意:服務裡面有兩個 distribute開頭的都給啟用並設定為自動。

(2) 開啟雙方135埠與rpc服務

msdtc服務依賴於rpc(remote procedure call (rpc))服務,rpc使用135埠,保證rpc服務啟動,如果伺服器有防火牆,保證135埠不被防火牆擋住。

使用「telnet ip 135 」命令測試對方埠是否對外開放。也可用埠掃瞄軟體(比如advanced port scanner)掃瞄埠以判斷埠是否開放。

注意:這個正常情況下135都是開放的,檢查下rpc服務是否開啟,如果不放心,就用telnet ip 135命令試試,一般能通 。如果提示telnet既不是內部命令也不是外部命令,那就把telnet功能安裝一下,在控制面板裡新增windows功能那個地方開啟。具體步驟自行搜一下,在這裡不說啦。

(3)保證鏈結伺服器中語句沒有訪問發起事務伺服器的操作

在發起事務的伺服器執行鏈結伺服器上的查詢、檢視或儲存過程中含有訪問發起事務伺服器的操作,這樣的操作叫做環迴(loopback),是不被支援的,所以要保證在鏈結伺服器中不存在此類操作。

這個問題正常情況下也不會出現

(4)在事務開始前加入set xact_abort on語句

對於大多數 ole db 提供程式(包括 sql server),必須將隱式或顯示事務中的資料修改語句中的 xact_abort 設定為 on。唯一不需要該選項的情況是在提供程式支援巢狀事務時。

如果有上面這個提示,就需要解除安裝msdtc重新安裝,操作如下:

在鏈結伺服器上右鍵管理員執行cmd,進入命令提示符視窗,執行「msdtc -uninstall」,直接解除安裝掉msdtc,然後重啟伺服器,再次進入命令提示符視窗,執行「msdtc -install」,安裝完成。

重新安裝完成後,需要重複檢查下上面的第1到6步。

至此,問題基本都能解決,以上就是針對「sql鏈結伺服器無法啟動分布式服務」問題的排查方式,如果覺得本篇對你有用,請收藏並分享吧!

SQL鏈結伺服器

由於公司內部涉及到許多的庫之間的操作,相互間有很多是通過鏈結伺服器方式是直接訪問操作,具體增加鏈結伺服器的指令碼如下 被訪問的伺服器別名 declare servername varchar 20 被訪問的伺服器鏈結 declare serverip varchar 20 訪問的賬號 密碼 decl...

SQL鏈結伺服器

建立鏈結伺服器 sp addlinkedserver 引數 server db sql 被訪問的伺服器別名 srvproduct provider sqloledb datasrc server2 要訪問的伺服器 sp addlinkedsrvlogin 引數 db sql 被訪問的伺服器別名 fa...

SQL建立鏈結伺服器

兩個 sql2005 怎麼建立鏈結伺服器!這個是2000的,估計差不多.不同伺服器資料庫之間的資料操作 建立鏈結伺服器 exec sp addlinkedserver itsv sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin itsv false nul...