9

使用 SMO 还原数据库时如何更改逻辑数据库名称?

/维克托

4

3 回答 3

12
//restore is the Restore object in SMO

restore.RelocateFiles.Add(new RelocateFile(SourceDataFile.Name, Path.Combine(destinationDirectory, destination.Database + ".mdf")));
restore.RelocateFiles.Add(new RelocateFile(SourceLogFile.Name, Path.Combine(destinationDirectory, destination.Database + "_log.ldf")));

restore.SqlRestore(destinationServer);

var destinationDatabase = destinationServer.Databases[destinationDatabaseName];

//renaming the logical files does the trick

destinationDatabase.FileGroups[0].Files[0].Rename(destinationDatabaseName);
destinationDatabase.LogFiles[0].Rename(destinationDatabaseName + "_log");
于 2010-08-19T09:16:16.490 回答
5

您不能使用 SQL RESTORE DATABASE重命名逻辑数据库文件:不提供。只能使用 WITH MOVE 更改物理文件

通常,您可以在 SQL 中使用ALTER DATABASE重命名逻辑文件。

RelocateFile SMO 类似乎证实了这一点。

于 2010-02-20T10:15:39.470 回答
0

Rahul 的代码是正确的:恢复到新的物理文件和重命名逻辑文件是一个两步过程:

调用是说“RelocateFile将此逻辑文件名映射到此物理文件”。您需要在这里使用原始备份的逻辑文件名而不是新的,否则您可能会得到“ .mdf cannot be overwritten”异常。

要创建新的逻辑名称,请使用Rename()之后的调用,如 Rahul 的代码所示。

但是,如果您想使用 SMO 更改数据库的名称:

var srvConn = new ServerConnection(serverName)     
{  
    LoginSecure = false,  
    Login = dbUserName,  
    Password = dbUserPassword,  
    DatabaseName = "master",               
};  
var mainDb = new Database(srvConn, "old database name");  
mainDb.Rename("new database name");
mainDb.Refresh();
于 2012-03-28T13:32:25.073 回答