2010-05-20 51 views
1

假設我有兩個SQL Server 2008數據庫,A和B.它們最初創建的目的是分開的,但隨着時間的推移,它們都有不斷的引用(如sprocs,views等)。它已經到了,它們實際上只是同一個數據庫的兩半。SQL Server 2008 - 數據庫合併和別名?

所以,我們正在考慮合併它們。有誰知道我們如何才能最好地執行此合併?我們有相當多的內部應用程序參考其中的一個,其中包括許多面向客戶的應用程序,因此儘量減少停機時間非常重要。爲了不必查找和更新這些數據庫中的所有內容,我們特別感興趣的是某種數據庫的「別名」,其中一個應用程序可能會調用數據庫「A」中的一個存儲過程,而'A'重定向對於新的合併數據庫'C',不知何故。有沒有人對這種情況有任何經驗或瞭解?

回答

0

下面是我如何處理這個問題的大綱。這是完全不重要的修改,因此您的里程將根據您的實際設置而有所不同。 (1)構建新的組合數據庫。我會選擇其中一個,並將其他代碼添加到其中,而不是創建一個新的(第三個)數據庫。 (1a)你會(大概)需要一個例程從頭開始構建新的數據庫。你肯定會需要一個例程來將現有的一對數據庫升級到單數據庫表單。 (2)構建修訂後的「第二」數據庫。該數據庫中的所有內容都是佔位符,引用修訂後的「第一個」數據庫中的相關對象。正如Tom H.所建議的,sysnonyms應該適用於此(它們也可以在SQL 2005中使用)。觀點也可以。存儲過程應該只是在(新)第一個數據庫中調用它們的類比的包裝器。

(3)測試,測試測試。

(4)回去再做第3步。 (5)將所有更改一次全部應用於現有系統(這就是爲什麼我們有第4步),一次只有一個環境。正確完成,並且根據您系統上的很多,您可能甚至不必調整用戶或應用程序訪問數據庫的方式。 (6)由於時間和資源允許,修改了所有外部用戶和應用程序以引用新的/單個數據庫,最終不贊成對第二個數據庫的所有使用或引用。

+0

聽起來不錯? 1)以A和B開頭 2)創建C數據庫,作爲A的副本 3)創建並應用(C)'A-> C'補丁,將B的所有代碼添加到C,所以C包含A + B。 4)創建一個包含B中所有對象的D數據庫。 5)創建並應用(到D)'B-> D'補丁,將其所有代碼交換爲用於C中對象的薄同義詞/包裝。5)測試測試測試,測試測試測試。重複。 – 2010-05-20 21:27:02

+0

6)使用'A-> C'補丁將A更新爲'C';這是新的單一數據庫。使用'B-> D'補丁將B更新爲'D';這只是對C的一個精簡重定向,對於仍在撥打電話B的所有應用程序。7)最終,更新所有打電話的應用程序,直接將它們改爲A.讓B離線。 – 2010-05-20 21:27:27

+0

如何比較類似...... 1)創建一個數據庫C.使用細同義詞/包裝器將其填充到A和B中的所有對象。 2)將所有應用程序更新爲指向C. 3 )最終,將時間/資源允許的每個對象從A移動到C,將B移動到C,將同義詞放在它們指向C的地方(或者必須一次完成所有操作?) 感謝所有到目前爲止的幫助! – 2010-05-20 21:31:49

0

由於您使用的是SQL 2008,您可以查看使用SYNONYMs,我相信它可以跨越數據庫(甚至是需要的服務器)。我沒有太多的經驗,所以恐怕我不能給出任何建議或「陷阱」來考慮。

您的最終目標應該是最終將訪問代碼更改爲指向單個數據庫,然後刪除其他兩個「虛擬」數據庫。長期進行這種重定向最終會導致我的經驗出現問題。