2008-12-03 54 views
2

我們在SQL Server 2000上有一個數據庫,它應該不時被截斷。看起來最簡單的解決方案是創建重複數據庫並將主數據庫複製到那裏。然後主數據庫可以通過專門定製的存儲過程安全截斷。SQL服務器複製的可靠性如何?

單向複製可以保證備份數據庫包含來自主數據庫的所有更新。

我們計劃使用備份數據庫進行報告,並將主數據用於操作數據。主數據庫將在2天內在晚上截斷一次。 數據庫是幾千兆字節。只有幾張桌子很大(1-2毫米排)

什麼是可能的陷阱?這樣的解決方案有多可靠?它會減慢主數據庫嗎?

更新:與DTS做複製變種聽起來不錯,但有其自身的缺點。它需要相當健壯的腳本,它將運行大約一個小時來複制更新的行。主數據庫中的完整性約束也存在問題,這會使得截斷它不平凡的任務。由於這種複製冷拉直了很多東西。

這也是可能的,但不是很好的變種使用聯合查看,因爲系統主要在無人值守模式白鷺專門的支持人員。這是相關的問題,但不是技術性的。

回答

4

雖然複製通常是健壯的,但有些時候它可能會中斷並需要刷新。管理和維護複製可能變得複雜。一旦主數據庫被截斷,您將不得不確保該操作不會被複制。您可能還需要一個改進的行標識系統,因爲在您幾次截斷主數據庫表後,您的輔助數據庫中仍然會有完整的歷史記錄。

由於額外的線程必須運行以讀取事務日誌,因此發佈服務器(主服務器)的性能受到影響。除非你目前負載很重,否則你可能不會注意到這種影響。事務日誌管理也變得更加重要。

相反,我會看你的問題不同的解決方案。例如,在截斷之前,您可以對數據庫進行備份,並將其還原爲新的數據庫名稱。然後您將擁有截斷前的數據庫副本,並且可以使用三部分名稱一次查詢兩者。

您已經提到次要數據的目的是保持關閉報告。在這種情況下,您可以創建一個像SELECT * FROM Primary.dbo.Table UNION ALL SELECT * FROM SecondaryDBJune2008.dbo.Table UNION ALL SELECT * FROM SecondaryDBOctober2008.dbo.Table的視圖。你只需要執行截斷操作就可以保持這個視圖是最新的。

另一種選擇是在截斷之前拍攝當前數據的快照並將其插入到單個報告數據庫中。然後,您只需擁有主數據庫和歷史數據庫 - 無需在創建視圖後修改視圖。

我們在GB中討論的數據量是多少?

由於您打算每兩天進行一次截斷,因此我建議使用第二種方法,即在截斷數據之前將數據快照到單個Historical數據庫中。使用SQL代理作業可以輕鬆完成此任務,而無需擔心複製使兩組數據保持同步。

+0

我們需要所有可用於報告的舊數據。所以備份/恢復將無濟於事。 – Din 2008-12-03 00:50:54

+0

我已經更新了一些關於如何仍然可以從備份/恢復報告的想法。 – 2008-12-03 01:01:11

2

我不會爲此使用複製。我們有一個相當複雜的複製設置,運行80+個分支,將幾張表複製到一箇中央數據庫。當連接性連續幾天下降時,數據管理問題就會擡頭。

如果要存檔較舊的數據,請使用DTS。然後,您可以將數據的複製和截斷/刪除操作構建到相同的DTS包中,並對其進行設置,以便僅在副本成功時纔會刪除數據。