2010-01-21 102 views
3

供應商有一個數據數據庫(只讀),每週通過dvd發送給我們。他們的升級腳本將分離數據庫的現有副本,覆蓋MDF和LDF,放棄所有用戶並重新創建他們認爲適當的安全應該是。有沒有一種方法可以在不使數據庫脫機的情況下同步數據?這是一個全天候的設施,在更新期間會導致15分鐘的停機時間。替換SQL Server數據庫

輔助信息: 該數據庫有大約50張表,總大小爲400 MB。實際改變的數據量大約在400kb左右。服務器運行Server 2008和SQL Server企業版2008.

回答

5

閱讀上紅門數據比較

http://www.red-gate.com/products/SQL_Data_Compare/index.htm

,這將產生對你差異的腳本,您可以應用到現有的數據庫。

這也有能力來自動同步你的數據

您必須輸入數據庫裝載到該操作的服務器。

+0

使用SQL Server時無法使用RedGate工具。如果只有40萬個數據發生變化,則實時更新應該沒問題。你甚至可以編寫腳本,備份並運行比較/同步。 – Tom 2010-01-21 18:15:58

+0

這些工具讓我有點害怕....你可以比較高利用率的實時數據庫而不鎖定表的數據嗎? – 2010-01-21 18:30:03

+0

這不會產生一個完整的卸載日誌沒有用處嗎?另外,如果您進行實時更新,您將進行所有更改併發出單個提交?你是否有足夠的空間來做這件事,或者你會允許髒讀嗎?那麼在這個過程中的任何查詢都會讓一些舊行和新行混淆數據? – 2010-01-21 18:47:10

0

您可以編寫自己的程序,連接到供應商提供的數據庫和您自己的(可能是DTS或C#應用程序),並且有關於哪些數據的一些情報應該從供應商數據庫移動/遷移到您自己的數據庫中。

0

您可以將db作爲單獨的數據庫加載,然後使用像SQL Data Compare這樣的實用程序來區分數據差異並生成腳本。

0

這應該是備份/恢復操作。分離/重新附加操作非常簡單,但顯然會使數據庫脫機。

或者,他們可以提供差異腳本來更新他們需要的任何數據和模式更改。在活動數據庫上運行腳本(基本上是一堆創建,更改,添加和刪除模式更改以及插入新數據)以使其更新。這有一個好處,腳本可以很容易地進行版本控制。

0

您可以使用Red-Gate Data Compare等工具同步數據。

4

你可以做的事情是當他們發送給你新的數據庫並安裝DB_B時,你可以做兩件事DB_A和DB_B。與此同時,您的所有用戶都在使用DB_A。然後將DB_A重命名爲DB_C,並將DB_B重命名爲DB_A。這將使停機時間降低到接近0.或者,只要數據庫準備就緒,您就可以將連接更改爲從DB_A指向DB_B。

+1

連接打開時,您無法重命名數據庫。您必須首先將數據庫設置爲單用戶模式(但必須等到數據庫中沒有用戶/強制所有用戶),進行交換並將其設置回多用戶模式。 – 2010-01-21 20:20:45

1

不敢相信沒有人提到過這種方法。

KISS:你可以加載恢復(或附加)數據庫到一個新的目錄,然後重新配置你的應用程序(例如,通過一個ODBC DSN)與新的DB工作 - 一旦你翻轉完成你可以分離舊的。這種方法被稱爲「滾動升級」,用於全天候的24/7網站。

0

您可以使用SSIS創建數據導入/更新過程。在做這件事之前我會遇到一個問題,如果在短時間內表格有新數據而表格b沒有更新,那麼問題會是什麼?所有數據都必須保持同步嗎?如果可以的話,請跟隨Jose Chama的建議;即使一分鐘也不會有事情發生。