SQL Server 2000複寫有問題(該處理無法列舉Subscriber的變更項目) |
尚未結案
|
ez3cshop
一般會員 發表:13 回覆:6 積分:3 註冊:2005-01-24 發送簡訊給我 |
請教大家: 我有一個監控系統的專案, 極高度要求系統的穩定性, 不允許有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 發送簡訊給我 |
|
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
假設沒有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 發送簡訊給我 |
|
ez3cshop
一般會員 發表:13 回覆:6 積分:3 註冊:2005-01-24 發送簡訊給我 |
引言: 假設沒有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 發送簡訊給我 |
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 @UP3.當2步驟中如果發現linked server有錯誤時,就應該採取因應措施了,倒是不用在檢查資料是否同步。因為如果有錯誤的話,就會alert錯誤訊息,反之,沒訊息,就表示兩邊資料已經同步了。 另外,大量倒資料最好不要用
------
星期一,二...無窮迴圈@@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |