使用SQL SERVER的Link Server實現分散式交易

來源:互聯網
上載者:User

ansi_warning和ansi_nulls 兩個選項必須開啟,好像對系統也沒啥影響。

 

樓主再檢查一下兩個地方,經測試,在要使用分散式交易時,這是必須要設定的。

1、連結的伺服器和名稱解析問題

-- 建立連結的伺服器

EXEC sp_addlinkedserver 'srv_lnk', 'ms', 'SQLOLEDB', '192.168.1.1'

GO

-- 建立連結的伺服器上遠程登入之間的映射

EXEC sp_addlinkedsrvlogin 'srv_lnk', 'false', NULL, 'sa', '123'

GO

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

xxx.xxx.xxx.xxx 伺服器名

xxx.xxx.xxx.xxx 發起伺服器名

2、防火牆設定

雙方防火牆都添加例外程式c:\windows\system32\msdtc.exe

 

在電腦上已啟用 Windows 防火牆。 預設情況下, Windows 防火牆阻止 MSDTC 程式。 

請注意 即使在關閉 Windows 防火牆,可能會出現此問題

------------------------------------------------------------------------------------

SQL Server 2005分散式交易環境搭建

 

一、 運行批次程式,安裝並啟動msdtc服務

@echo off

setlocal

@echo %WINDIR%\System32\msdtc.exe -uninstall

%WINDIR%\System32\msdtc.exe -uninstall

call :delkey "HKCR\CID"

call :delkey "HKLM\SYSTEM\CurrentControlSet\Services\MSDTC"

call :delkey "HKLM\SYSTEM\ControlSet001\Services\MSDTC"

call :delkey "HKLM\SYSTEM\ControlSet002\Services\MSDTC"

call :delkey "HKLM\Software\Microsoft\MSDTC"

@echo %WINDIR%\System32\msdtc.exe -install

%WINDIR%\System32\msdtc.exe -install

endlocal

goto :EOF

:delkey

set key=%1

call :delkeyq %key% >nul 2>&1

@echo. 

goto :EOF

:delkeyq

REG Delete %key% /F

二、 開啟雙方防火牆中的35連接埠(Remote Procedure Call)

MSDTC服務依賴於RPC(Remote Procedure Call (RPC))服務,RPC使用135連接埠,保證RPC服務啟動,如果伺服器有防火牆,保證135連接埠不被防火牆擋住。 使用“telnet IP 135 ”命令測試對方連接埠是否對外開放。也可用連接埠掃描軟體(比如Advanced Port Scanner)掃描連接埠以判斷連接埠是否開放。

    在兩個伺服器上分別開啟RPC OUT選項

 

Code:sql
1 
exec sp_serveroption 'test2005', 'rpc out', 'true

三、 保證連結的伺服器中語句沒有訪問發起事務伺服器的操作

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

四、 在事務開始前加入SET xact_abort ON語句

對於大多數 OLE DB 提供者(包括 SQL Server),必須將隱式或顯示事務中的資料修改語句中的 XACT_ABORT 設定為 ON。唯一不需要該選項的情況是在提供者支援嵌套事務時。

 

五、 MSDTC設定

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

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

選中“網路DTC訪問” 

在用戶端管理中選中“允許遠程用戶端”、“允許遠端管理” 

在交易管理通訊中選“允許入站”、“允許出站”、“不要求進行驗證” 

保證DTC登陸賬戶為:NT Authority\NetworkService

----------------------------------------------------------------------------------------------------

-- 在發起伺服器xiaodi(Windows XP)上建立連結的伺服器EXEC sp_addlinkedserver 'cpserver', 'ms', 'SQLOLEDB', '75.81.1.220'GOEXEC sp_addlinkedsrvlogin 'cpserver', 'false', NULL, 'sa', '123'GO -- 在第二個伺服器cpserver(Windows 2003 Server)上建立連結的伺服器EXEC sp_addlinkedserver 'xiaodi', 'ms', 'SQLOLEDB', '75.81.2.37'GOEXEC sp_addlinkedsrvlogin 'xiaodi', 'false', NULL, 'sa', '123'GO -- 串連發起伺服器xiaodi 75.81.2.37,建立預存程序use ksoa_demoGOif exists(select top 1 1 from sysobjects where xtype='P' and name = 'dtc_test')drop procedure dct_testGOcreate procedure dtc_testas   set xact_abort ON   begin distributed tran dtc_test   update bmdoc set bm = '公司管理部1' where bmid = 'DBM00000001'   exec [test2005].ksoa_test_quyu.dbo.dtc_test   commit tran dtc_test   set xact_abort OFFgo-- 串連第二個伺服器cpserver 75.81.1.220,建立預存程序use ksoa_test_quyuGOif exists(select top 1 1 from sysobjects where xtype='P' and name = 'dtc_test')drop procedure dtc_testGO create procedure dtc_testas   begin tran dtc_test1   update bmdoc set bm = '人力資源部1' where bmid = 'DBM00000053'   commit tran dtc_test1go-- 串連發起伺服器xiaodi,執行預存程序exec dtc_test -- 查看結果select * from [test2005].ksoa_test_quyu.dbo.bmdocselect * from bmdoc-- 註:如果第二個伺服器cpserver上的語句執行失敗,那麼發起服務
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.