2011-08-16 54 views
4

我在C#,.NET 3.5和SMO上爲SQL Server中的其他數據庫(我們的DEV和測試數據庫)創建一個數據庫副本(我們的生產數據庫) 2005.使用新名稱從.bak文件恢復數據庫

我已經設法從數據庫創建一個備份來恢復它。這當然會覆蓋現有的。我已經使用this CodeProject guide

如何將數據庫的備份恢復到另一個數據庫,並在同一臺服務器上使用不同的名稱?

+0

您必須將Database屬性設置爲新名稱。您還必須確保日誌/數據文件的名稱不會激活現有的日誌/數據文件。 也許重複http://stackoverflow.com/questions/1627145/smo-restoring-to-a-different-db –

回答

5

簡而言之:

  1. 設置Restore.Database屬性設置爲一個新的名字,
  2. 設置Restore.ReplaceDatabase屬性true
  3. 指定新的數據,並使用Restore.RelocateFiles財產日誌文件。

有關詳細說明,請閱讀將數據庫還原到Getting Started with SMO in SQL 2005 - Restores文章的新位置部分。

+0

真棒傢伙!你救了我的一天!我非常感謝幫助! – Martin

7
using Microsoft.SqlServer.Management.Smo; 

string backupFile="Backupfile";//.bak file 

string dbName = "DBName"; 

string dbServerMachineName = "MachineName"; 

Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(dbServerMachineName); 

Database database = new Database(server, dbName); 

//If Need 

database.Create(); 

database.Refresh(); 

//Restoring 

Restore restore = new Restore(); 

restore.NoRecovery = false; 

restore.Action = RestoreActionType.Database; 

BackupDeviceItem bdi = default(BackupDeviceItem); 

bdi = new BackupDeviceItem(backupFile, DeviceType.File); 

restore.Devices.Add(bdi); 

restore.Database = dbName; 

restore.ReplaceDatabase = true; 

restore.PercentCompleteNotification = 10; 

restore.SqlRestore(server); 

database.Refresh(); 

database.SetOnline(); 

server.Refresh(); 
相關問題