使用 SMO 还原数据库时如何更改逻辑数据库名称?
/维克托
//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");
您不能使用 SQL RESTORE DATABASE重命名逻辑数据库文件:不提供。只能使用 WITH MOVE 更改物理文件
通常,您可以在 SQL 中使用ALTER DATABASE重命名逻辑文件。
RelocateFile SMO 类似乎证实了这一点。
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();