2009-09-25 42 views
3

我有兩個SQL Server連接字符串CX和CY。在代碼中複製SQL Server數據庫

我需要做的是

  1. 確保CY中有沒有表。
  2. 備份數據庫CX。
  3. 將其恢復到CY。

還沒有找到我在找什麼。我不想要一個工具來執行此操作,因此需要在運行時使用C#代碼執行此操作,因爲添加新客戶機的操作需要將主數據庫複製到空數據庫。我不能使用預先創建的腳本,因爲我需要複製數據,並且主數據庫可能在添加新客戶端之前幾秒鐘纔會更新。

=== UPDATE ===

我使用Smo.Backup和Smo.Restore。當我嘗試恢復時,我得到:

錯誤3154備份集保存了除現有數據庫以外的數據庫的備份。

誰能告訴我如何解決這個問題?除此之外,我有一個工作解決方案!

感謝

皮特

+0

嗨皮特,你的更新(瞭解你可能在一個月前:)) - 你是否將「Restore.ReplaceDatabase」屬性設置爲True? – Tao 2009-11-18 17:48:01

回答

0

我理解你的願望在C#代碼要做到這一點,但我真的覺得只是調用命令行工具來爲你做它會是最容易的。

也就是說,this guy有一個腳本,看起來像它會做你想做的。你可以把它包裝在SPROC中,並且很容易地調用它。

0

我認爲你需要尋找到

SqlServer.Management.Smo.Backup class 

看到this technet article也,這article可能是一個參考,根據您的具體需求。

+0

我正在嘗試這種方法,但無法將備份恢復到新的數據庫。有任何想法嗎?(查看更新的問題文本)。 – 2009-10-01 13:59:55

+0

顯示的錯誤消息似乎表明[SqlServer.Management.Smo。] Restore對象的ReplaceDatabase屬性未設置爲True; CY與備份中定義的數據庫不匹配,因此SQL發送此消息(更好的方式是......可能會打錯dbname)通過顯式設置ReplaceDatabase on告訴SQL,可以覆蓋現有的db 。 – mjv 2009-10-01 15:02:09

+0

順便說一句,我認爲這是一個'fancier'實用程序的上下文,它可以自動執行此備份過程(具有進度條,更具體的錯誤處理等)。對於更簡單的方法,T-SQL公開大部分備份/恢復功能如Arthur的迴應所示。您可以通過ADO或其他方式調用此類TSQL語句,並避免處理SMO的對象模型。 – mjv 2009-10-01 15:29:31

8

溶液與數據庫備份:

1)確保沒有表

select COUNT(*) from sys.sysobjects where xtype = 'U' 

2)備份

BACKUP DATABASE MyFirstDatabase TO DISK= @path WITH FORMAT 

3)恢復

RESTORE DATABASE MySecondDatabase FROM DISK = @path WITH REPLACE 

在網上看到SQL叢書更多詳情:http://msdn.microsoft.com/en-us/library/ms186865.aspx

相關問題