全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2417
推到 Plurk!
推到 Facebook!

SQL Server 2000複寫有問題(該處理無法列舉Subscriber的變更項目)

尚未結案
ez3cshop
一般會員


發表:13
回覆:6
積分:3
註冊:2005-01-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-16 01:47:32 IP:61.230.xxx.xxx 未訂閱
請教大家: 我有一個監控系統的專案, 極高度要求系統的穩定性, 不允許有1秒鐘以上的停擺. 於是規劃了讓兩台電腦來同時運做. 也就是在同一個時間之內, 兩台電腦跑同樣的程式, 做同樣的事, 這樣子, 其中一台電腦掛點時, 另外一台電腦可以即時接手. 在資料庫同步方面, 我利用SQL Server 2000的複寫功能, 把這兩台資料庫做合併式複寫. 由於要求到即時, 所以同步化的週期設到最小的1分鐘即執行一次. 至於在這1分鐘之內的資料同步, 則透過程式來處理, 我是利用TCP/IP來把未儲存到資料庫的資料, 先Send到對方電腦來進一步處理. 而我也肯定的說, 超過90%以上的場合, 兩台資料庫的同步可以在1分鐘以內完成. 但不曉得什麼原因, 在做合併式複寫約一天之後(有時會3, 4天), 會發生這個錯誤: 該處理無法列舉Subscriber的變更項目. 請問這個錯誤是什麼原因造成的呢? 我之前也偶爾遇過, 後來也不曉得怎麼處理, 只好把複寫移除然後重新建立就OK. 再來, 也發生過如下的錯誤: 該處理無法列舉Publisher項目. 我有查一下Enterprise Manager裡錯誤的內容, 我覺得是代理程式要去找Publisher或Subscriber時, 找不到當初在做合併式複寫時所設定的發行者或訂閱者. 由於還在開發中, SQL Server 2000是使用Developer版的, 環境都是Windows 2003, 尚未進行SP3. 也有試過SQL Server 2000標準版, 環境是Windows 2000 Server SP4, 也有過同樣的錯誤. 我之前也有試過自己使用Delphi程式的方式來進行兩個資料庫的同步, 但總是效能與穩定遠不及於SQL Server的複寫. 所以最後才不得不使用很讓人擔心的合併式複寫. 想請教大家, 有沒有遇過同樣的問題呢? 或者是有類似的專案, 但有另外一種思考的系統架構呢?
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-16 11:11:16 IP:210.66.xxx.xxx 未訂閱
資料庫複寫最好是單方向的複製才會穩定,如果發送和接收的資料庫同時在異動,電腦就會迷糊了。 容錯系統還是用硬體比較簡便。主機級的電腦可以雙硬碟、雙電源,hot plug磁碟陣列,也可以雙主機,透過內建的線路連接,不過比較貴。
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-16 15:41:59 IP:218.163.xxx.xxx 未訂閱
假設沒有key重複的情形,那可以利用trigger做即時的複製動作 例如:A,B兩server先互設為link server 再為需要作replication的table新增一trigger(依需求看是要for update,insert,delete),當A server T table新增一筆資料,則B server T table也會新增一筆, 反之亦然。 這樣就可以達到1秒內的資料同步,當然這種方法有限制,譬如不能大量倒資料。 我們就是用這種方法達到replication,用在oracle,sybase,sql server都一樣。 反而沒用database提供的replication功能。 參考看看..... 星期一,星期二...星期日..星期一..無窮迴圈@@
------
星期一,二...無窮迴圈@@
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-16 16:06:52 IP:211.74.xxx.xxx 未訂閱
pgdennis 大大的方法確實不錯。 能不能請問一下,如果量大會發生什麼狀況 ?
ez3cshop
一般會員


發表:13
回覆:6
積分:3
註冊:2005-01-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-16 18:06:31 IP:59.120.xxx.xxx 未訂閱
引言: 假設沒有key重複的情形,那可以利用trigger做即時的複製動作 例如:A,B兩server先互設為link server 再為需要作replication的table新增一trigger(依需求看是要for update,insert,delete),當A server T table新增一筆資料,則B server T table也會新增一筆, 反之亦然。 這樣就可以達到1秒內的資料同步,當然這種方法有限制,譬如不能大量倒資料。 我們就是用這種方法達到replication,用在oracle,sybase,sql server都一樣。 反而沒用database提供的replication功能。 參考看看..... 星期一,星期二...星期日..星期一..無窮迴圈@@ < face="Verdana, Arial, Helvetica"> 小弟才疏學淺, 有一些疑問想請教Mr. P 前輩: 1. A,B兩server先互設為link server, 這在SQL Server裡, 是指單純的註冊嗎? 還是有額外的程序要處理. 2. 若B Server停擺, 則trigger勢必失效, 那會不會造成A Server也無法Insert, Update, Delete? 3. 接2, 所以, 我由您的Idea中, 是不是要事後再加入程序來檢查A, B兩資料庫是否同步, 若不同步, 可能要藉助類似stored procedure來處理? 謝謝指導.
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-16 22:36:45 IP:59.104.xxx.xxx 未訂閱
1.單純的註冊阿,打開enterprise manager進入security\linked servers新增 2.sql2000比較麻煩,Sql2005倒是有提供測試Linked server的procedure,2000可以用下列code,先測試linked server connection是否存在, 這樣當B server掛點時A還能繼續新增資料,不然trigger如果有錯誤,是直接 rollback and return,跟procedure或script不太一樣。    來源:http://www.sqldbatips.com/showcode.asp?ID=38
/*
 Determines if a specified remote SQL server can be connected to   
    1  =  Running
   -1  =  Down    */
   declare @sql int
   declare @status int
   declare @hr  int
   declare @UP int
   declare @server_resolved sysname
   set @status=0
   set @server_resolved='DENNISDAI'
   
   EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @sql OUTPUT       IF @hr<>0 EXEC sp_OAGetErrorInfo @sql
   
   EXEC @hr = sp_OASetProperty @sql ,'LoginSecure','True'
   EXEC @hr = sp_OASetProperty @sql ,'LoginTimeout',1
   EXEC @hr = sp_OAMethod @sql,'Connect',null,@server_resolved--server name
   IF @hr<>0 EXEC sp_OAGetErrorInfo @sql
   
   EXEC @hr = sp_OAGetProperty @sql ,'Status',@status OUTPUT
   EXEC @hr = sp_OAMethod @sql,'DisConnect',null
   EXEC @hr=sp_OADestroy @sql
   
   SELECT @up = CASE WHEN @status = 1
                     THEN 1 ELSE -1 END       select @UP
3.當2步驟中如果發現linked server有錯誤時,就應該採取因應措施了,倒是不用在檢查資料是否同步。因為如果有錯誤的話,就會alert錯誤訊息,反之,沒訊息,就表示兩邊資料已經同步了。 另外,大量倒資料最好不要用
------
星期一,二...無窮迴圈@@
系統時間:2024-03-29 7:28:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!