使用新数据库名称从bak文件还原数据库

时间:2013-04-19 15:25:09

标签: sql-server sql-server-2008 smo

我需要使用新名称创建数据库副本。在我的asp.net mvc项目中,我使用smo创建数据库备份,然后尝试进行恢复。我喜欢这样:http://www.mssqltips.com/sqlservertip/1849/backup-and-restore-sql-server-databases-programmatically-with-smo/

但我得到一个例外:

  

无法覆盖文件“C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ LocalClientTrakDB.mdf”。数据库'LocalClientTrakDB'正在使用它   文件'LocalClientTrakDB'无法还原到'C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ LocalClientTrakDB.mdf'。使用WITH MOVE标识文件的有效位置   无法覆盖文件“C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ LocalClientTrakDB_log.ldf”。数据库'LocalClientTrakDB'正在使用它   文件'LocalClientTrakDB_log'无法还原到'C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ LocalClientTrakDB_log.ldf'。使用WITH MOVE标识文件的有效位置   在规划RESTORE语句时发现了问题。以前的消息提供了详细信息   RESTORE DATABASE异常终止。

恢复数据库的代码:

static void DatabaseRestore(Server myServer, Database myDatabase)
{
    string newdbfilename = myDatabase.Name + "New";

    Restore restoreDB = new Restore();
    restoreDB.Database = newdbfilename;

    restoreDB.Action = RestoreActionType.Database;
    restoreDB.Devices.AddDevice(@"C:\temp\TestFullDB.bak", DeviceType.File);

    restoreDB.ReplaceDatabase = true;
    restoreDB.NoRecovery = false;

    restoreDB.SqlRestore(myServer);
}

你有什么想法吗?

0 个答案:

没有答案