2010-03-08 79 views
4

問題:我們有一個應用程序有一部分被總用戶的一個非常小的子集使用,部分應用程序是同時運行一個單獨的數據庫。在一個完美的世界中,兩個數據庫的模式會被同步,但情況並非如此。一些遷移已經在較小的數據庫上運行,大部分都沒有;而且,沒有什麼比如修訂號碼能夠容易地識別哪些具有哪些,哪些沒有。我們想爲未來的項目解決這個困境。在討論中,我們提出了以下可能的行動計劃,並且我想知道是否有人知道任何已經解決此問題的項目:數據庫模式不同步 - 需要更新數據而不丟失數據

我們想要做的是從大型完全遷移數據庫的模式,然後將所有數據從較小的未遷移數據庫遷移到空的數據庫中。如果它讓事情變得更簡單,那麼可以假設爲了這個問題,具體而言,沒有遷移曾經刪除過任何東西,只是添加了。

否則,如果有其他已知的解決方案,我也想聽聽他們。

回答

8

您可以使用像Red-Gate的SQL Compare這樣的模式比較工具。您可以同步更改而不會丟失任何數據。我寫了一篇關於這一點,許多替代工具,在這裏價格普遍爲:

http://bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/

的好處是,大多數工具都有試用版。所以,你可以嘗試他們14天(功能齊全),只有在符合你的期望的情況下才能購買。我不能說其他工​​具,但我已經使用了RG多年,它是一個非常有能力和可靠的工具。

(更新2012-06-23,以幫助防止鏈路腐爛。)

+1

1)優秀的文章,我也發給我的團隊其他人。 2)這是這些項目之一,沒有很有說服力,有0軟件購買預算。然而,被鏈接到的Open DBDiff看起來似乎是我需要做的一個很好的工具。 非常感謝! – Zind

3

Red-Gate's SQL Compare as Aaron Bertrand mentions in his answer是一個非常好的選擇。不過,如果你是不允許購買的東西,一種方法是嘗試這樣的:

1)對於每個數據庫,編寫腳本的所有表,約束,索引,視圖,存儲過程等

2 )運行DIFF,並仔細檢查所有的差異,並確保小型數據庫可以接受它們。如果不在小DB上實施必要的更改(包括數據),以便它可以接受更改。

3)創建從大DB

4)小DB將數據導入到東東DB的架構一個新的空數據庫。

2

您也可以將數據庫逆向工程化爲Visual Studio作爲數據庫項目。 Visual Studio Team Suite數據庫版GDR R2(我知道長名稱)有能力進行模式比較和數據比較,但這種方法的優點在於,您可以將所有數據庫導入一個可以管理更改的良好數據庫項目並與源代碼控制整合。這將允許您從通用源構建並部署一致的更改。