2009-07-28 45 views
0

正如我所看到的,SQL 2008不再以非常簡單的方法通過Internet提供複製。不僅如此,我可以看到合併複製方法在數據庫上安裝了太多觸發器和視圖,並添加了名爲「rowguid」的附加字段。通過觸發器進行SQL自定義複製

今天我們有更多的磁盤空間可用,然後是處理器的速度。所以我決定爲SQL Server編寫自己的通用複製。它需要以下步驟。

這有一個前提,我所有的表都有一個單一的主鍵(無論是BIGINT或nvarchar(50))

Setup Table : SyncItems 
SyncItemID (Primary,AutoNumber) 
SyncTable (nvarchar(50) name of table) 
RowID (bigint) 
RowIDStr (nvarchar(50)) 
RowOp (nvarchar(10), 'Inserted','Updated','Deleted') 
RowTime (datetime, current_timestamp) 

,我還可以設置三個觸發器上的每個數據庫的表,它可以插入一個用於指定DML的SyncItems中的項目。

現在,所有複製器只能首先掃描SyncItems並加載修改後的表格行並在目標位置進行更新。

問:

  1. 我已經建立的數據庫恢復模型滿。有沒有其他方法可以讀取DML歷史記錄並進行復制,而不是設置觸發器?

  2. 事務日誌的歷史記錄保存了多久?在基於觸發器的自定義複製中,我可以刪除較舊的記錄,因此我們可以相應地截斷表格。

  3. 如果我可以讀取事務日誌並手動複製,那將非常棒,因爲我們甚至可以複製DDL事務。我嘗試使用搜索各種存儲過程,並做了足夠的谷歌搜索,但沒有發現任何提示。

  4. 有沒有讀取複製發佈者日誌的選項?爲了不使用SQL Server自己的複製,我們可以編寫我們自己的可以通過互聯網複製數據的複製代理程序?

(我曾經嘗試網絡同步,以及各種選項,但我們的數據是巨大的,它不是實際使用的網絡同步)

+0

從我在這裏閱讀的內容來看,你似乎假設一次只有一行將被觸發處理。確保您的觸發器可以處理多行插入,更新和刪除。 – HLGEM 2009-07-28 21:37:52

+0

是的,他們可以處理多行。 – 2009-07-28 23:37:47

回答

0

我沒有找到任何選項來讀取SQL日誌。但是,在完全恢復模式下,SQL確實將整個事務日誌存儲到SQL日誌中,但沒有書面的方式來讀取它。我們通過使用觸發器來填寫SyncItems表,繼續編寫我們自己的複製方法!

0

不會是更容易,如果你使用變更數據捕獲正在使用SQL Server 2008 EE?

我使用它來加載不同的數據庫來分析數據隨時間的變化,似乎工作正常。

+0

我們只有SQL 2008標準版,我們不能升級,因爲成本太高,而且我們使用標準版來存儲用戶文檔,所以它們體積很大,但對於存儲數據庫也很重要。 – 2009-07-28 19:17:06

0

你考慮過日誌傳送嗎?它可以簡單地做你想做的事,並且通過一點點工作你就可以使它在互聯網上工作。