關於SQL分布式資料遠端傳輸問題

2021-04-30 12:10:53 字數 1670 閱讀 8617

問題:

我在做sql的遠端資料傳輸時,用的是鏈結伺服器+儲存過程+分布式事務進行處理的,  

但存在不穩定的問題.      

兩台機器使用win2000server平台+sql7.0,用modem撥號做遠端連線.  

具體做法如下,兩台sql的msdtc服務必須啟動,設兩台機器分別為資料中心a端、客戶端b  

在a端設定連線伺服器b,b端設定鏈結伺服器a,為了保證資料傳輸的準確、安全、一至性,  

使用了儲存過程和分布式事務(dts   tran),具體的事務處理過程如下  

set   xact_abort   on  

begin   distributed   tran  

----處理語句   從客戶端取資料寫入伺服器端  

insert   into   [tables]  

select   *   from   [clinet].[dbo].[db].[tables]    

----處理語句.....  

commit   tran  

set   xact_abort   off  

在具體實施中發現,有時事務無法啟動,提示說ole提供者不支援分布式事務,但我查了相關  

文件,文件中明確指出ole   for   sql   的提供者支援分布式事務。  

最後發現,兩台機器重啟後,第一次事務正常,有一台重啟後,再進行連線就會有導常,查了  

相關的資料,好像有文章說到有「孤兒連線」的問題,說是計算機檔案處理及網路發現客戶端  

已經斷開,會做一些處理,保證下一次的連線,而sql的連線由於連線速度慢,無法識別客戶端  

的斷開,所以下次連線後事務無法正常啟動.  

回答:1、本地和遠端都需要啟動  

distributed   transaction   coordinator服務。 

對於儲存過程,sql     server     使用最初建立儲存過程時的     set     ansi_nulls     設定值。無論隨後何時執行儲存過程,set     ansi_nulls     的設定都還原為其最初使用的值並生效。當在儲存過程內喚醒呼叫     set     ansi_nulls     時,其設定不更改。      

在執行分布式查詢時應將     set     ansi_nulls     設定為     on。      

在執行分布式查詢時應將     ansi_warnings     設定為     on。      

企業管理中的ansi_nulls和ansi_warnings選項不對,但沒有方法改動。在查詢分析器可以設定ansi_nulls和ansi_warnings選項,而且預設值是對的。所以能在查詢分析器建立此類儲存過程,而不能在企業管理器建立此類儲存過程。  

就是:  

create   proc   名  

as  

set   ansi_null_dflt_on   on   --注意  

set   ansi_warnings   on    

select   *   from   open...

2、寫個儲存過程,使用微軟的   openrowset()   or   openquery()   函式,別搞什麼其他的冬冬,老老實實用基本的東西做就行了。這也是微軟內部推薦的連線方式

sql 分布式查詢

遠端鏈結伺服器機器名 roy 例項名 roy sql2005de 登陸名 sa 密碼 test2005 建立鏈結伺服器 exec master.dbo.sp addlinkedserver server n roy lnk srvproduct n provider n sqloledb datas...

SQL分布式查詢

測試檔案內容 e module test.xls job desc job id max lvl min lvl 記錄一 1.0 11.0 11.0 記錄二 2.0 22.0 22.0 記錄三 3.0 33.0 33.0 記錄四 4.0 44.0 44.0 e module temp.mdb檔案jo...

sql分布式查詢

建立鏈結伺服器 exec sp addlinkedserver itsv sqloledb 192.168.0.88 exec sp addlinkedsrvlogin itsv false null user emenudata2fortesting sa exec sp addlinkedser...