2009-11-20 82 views
0

我們的應用程序體系結構允許我們在單個數據庫中託管多個客戶端,並託管多個數據庫。這使我們可以通過跨多個數據庫分發客戶端來擴展。例如,20個客戶端可以在數據庫A中,另外15個客戶端可以在數據庫B中。我們幾乎在每個表中使用ClientID字段來分區客戶端數據。我們所有的表主鍵都是INT標識TableID字段。將客戶端數據從一個數據庫移動到新數據庫

我正在尋找一個工具/腳本,它可以幫助我從一個數據庫中提取客戶數據,並將其移動到一個全新的數據庫中(所以PK可以保持不變)。我希望這已經存在,所以我們不必建立自己的。這種方式非常靈活,但理想情況下它只是生成一個大的.sql文件,其中包含所有必要的INSERTS以正確的順序移動數據,另一個SQL文件包含所有必需的DELETES以刪除源數據。

如果這有什麼差別,我們是SQL Server 2008的

回答

1

如果你有標準或企業,你確實有SSIS。雖然它可能不符合「工具」的條件,但在這種情況下實現起來相當容易。

+0

好的,將檢查SSIS,看看它能做什麼。謝謝。 – Linus

0

不是你可能會尋找答案,但你應該考慮使用GUID作爲重點。這將確保您擁有某種類型的所有記錄的唯一標識符,並且可以避免與身份密鑰/基於整數的索引衝突。如果在數據庫之間遷移時出現問題,它將增加另一程度的可追溯性。

SplendidCRM從其他數據庫系統導入數據時使用此技術。


更新:

我的假設是,數據庫之間傳輸數據的操作並不頻繁,並且你所需要的數據庫架構該任務。我將使用GUID作爲查找鍵來專門驗證數據傳輸,但我不會將它用作標準操作(如URL)的連接的主鍵。儘管跨數據庫是唯一的,但權衡是GUID緩慢。

換句話說,GUIDS除了現有的主鍵之外,還可以作爲驗證你應該出現問題的手段。如果您需要數據庫A中的ClientID以在數據庫B中保留相同的值,那麼作爲該標識符的標識列將成爲問題。您可能必須創建另一個不是「自動生成」的標識符。這可能不是GUID,但我的直覺是僅僅用整數就不夠了。也許你可以創建一個列,它是身份密鑰,客戶名稱和數據庫名稱的散列,或者更簡單地說,只需將這些列連接到一個varchar列。

+0

大衛,如果你使用GUID鍵並做了很多連接,那麼性能是否有影響?另外,我們沒有走這條路線的一個原因是我們認爲在引用資源時會弄亂我們的應用程序URL。 – Linus

1

爲此,我可以推薦redgate SQL DataCompare,我們用它來同步數據,並使用它們的SQL Compare來同步數據庫模式。

這兩種工具都可以輸出sql,你可以自己執行,或者這些工具可以自己執行sql腳本。

他們有一個命令行版本的工具,所以你可以在部署腳本中使用它們,我沒有試過這個。

他們都工作得很好,毫無疑問是值得的價格。

+0

AndreasN,謝謝你的推薦。只是要清楚,但我沒有做任何比較或同步。我想要做的是將一批基於ClientID的相關數據從一個數據庫移動到另一個數據庫。這個工具能做到嗎? – Linus

+0

你不能用SQL-Server內部的工具來做到這一點嗎? SSIS等 – AndreasN

+0

也許吧。不太熟悉SSIS。我想我會檢查一下。 – Linus

相關問題