MSSQL server分散式事務解決方案

技術豪門發表於2020-12-23

本篇文章由 泉州SEO www.234yp.com 整理髮布,mssql是什麼 www.234yp.com/Article/168183.html 謝謝合作!
mssql是什麼

  適用環境

  作業系統:windows 2003

  資料庫:sql server 2000/sql server 2003

  使用連結伺服器進行遠端資料庫訪問的情況

  一、問題現象
在執行分散式事務時,在sql server 2005下收到如下錯誤:

  訊息 7391,級別 16,狀態 2,過程 xxxxx,第 16 行

  無法執行該操作,因為連結伺服器 "xxxxx" 的 OLE DB 訪問介面 "SQLNCLI" 無法啟動分散式事務。

  在sql server 2000下收到如下錯誤:

  該操作未能執行,因為 OLE DB 提供程式 'SQLOLEDB' 無法啟動分散式事務。

  [OLE/DB provider returned message: 新事務不能登記到指定的事務處理器中。 ]

  OLE DB 錯誤跟蹤[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

  二、解決方案
1.雙方啟動MSDTC服務
MSDTC服務提供分散式事務服務,如果要在資料庫中使用分散式事務,必須在參與的雙方伺服器啟動MSDTC(Distributed Transaction Coordinator)服務。

  2.開啟雙方135埠
MSDTC服務依賴於RPC(Remote Procedure Call (RPC))服務,RPC使用135埠,保證RPC服務啟動,如果伺服器有防火牆,保證135埠不被防火牆擋住。

  使用“telnet IP 135 ”命令測試對方埠是否對外開放。也可用埠掃描軟體(比如Advanced Port Scanner)掃描埠以判斷埠是否開放。

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

  4.在事務開始前加入set xact_abort ON語句
對於大多數 OLE DB 提供程式(包括 SQL Server),必須將隱式或顯示事務中的資料修改語句中的 XACT_ABORT 設定為 ON。唯一不需要該選項的情況是在提供程式支援巢狀事務時。

  5.MSDTC設定
開啟“管理工具――元件服務”,以此開啟“元件服務――計算機”,在“我的電腦”上點選右鍵。在MSDTC選項卡中,點選“安全配置”按鈕。

  在安全配置視窗中做如下設定:

  l選中“網路DTC訪問”

  l在客戶端管理中選中“允許遠端客戶端”“允許遠端管理”

  l在事務管理通訊中選“允許入站”“允許出站”“不要求進行驗證”

  l保證DTC登陸賬戶為:NTAuthority\NetworkService

  6.連結伺服器和名稱解析問題
建立連結sql server伺服器,通常有兩種情況:

  l第一種情況,產品選”sql server”

  EXEC sp_addlinkedserver

  @server='linkServerName',

  @srvproduct = N'SQL Server'

  這種情況,@server (linkServerName)就是要連結的sqlserver伺服器名或者ip地址。

  l第二種情況,訪問介面選“Microsoft OLE DB Provider Sql Server”或“Sql Native Client”

  EXEC sp_addlinkedserver

  @server=' linkServerName ',

  @srvproduct='',

  @provider='SQLNCLI',

  @datasrc='sqlServerName'

  這種情況,@datasrc(sqlServerName)就是要連結的實際sqlserver伺服器名或者ip地址。

  Sql server資料庫引擎是通過上面設定的伺服器名或者ip地址訪問連結伺服器,DTC服務也是通過伺服器名或者ip地址訪問連結伺服器,所以要保證資料庫引擎和DTC都能通過伺服器名或者ip地址訪問到連結伺服器。

  資料庫引擎和DTC解析伺服器的方式不太一樣,下面分別敘述

  6.1資料庫引擎
第一種情況的@server或者第二種情況的@datasrc設定為ip地址時,資料庫引擎會根據ip地址訪問連結伺服器,這時不需要做名稱解析。

  第一種情況的@server或者第二種情況的@datasrc設定為sql server伺服器名時,需要做名稱解析,就是把伺服器名解析為ip地址。

  有兩個辦法解析伺服器名:

  一是在sql server客戶端配置中設定一個別名,將上面的伺服器名對應到連結伺服器的ip地址。

  二是在“C:\WINDOWS\system32\drivers\etc\hosts”檔案中增加一條記錄:

  xxx.xxx.xxx.xxx伺服器名

  作用同樣是把伺服器名對應到連結伺服器的ip地址。

  6.2DTC
不管哪一種情況,只要@server設定的是伺服器名而不是ip地址,就需要進行名稱解析,辦法同上面第二種辦法,在hosts檔案中增加解析記錄,上面的第一種辦法對DTC不起作用。

  如果@server設定的是ip地址,同樣不需要做域名解析工作。


關於更多mssql是什麼內容,可以收藏本網頁。
泉州SEO專注SEO領域的資訊傳播與推廣,立足泉州本土!服務泉州本土網路推廣從業人員,主要針對泉州網站優化,網站推廣,泉州SEO知識分享。

相關文章