¿Cómo puedo cambiar el nombre de la base de datos lógica al restaurar una base de datos con SMO?Cambiar el nombre de la base de datos lógica con SMO
/Viktor
¿Cómo puedo cambiar el nombre de la base de datos lógica al restaurar una base de datos con SMO?Cambiar el nombre de la base de datos lógica con SMO
/Viktor
No se puede cambiar el nombre de los archivos de bases de datos lógicas con un SQL RESTORE DATABASE: no se ofreció. Solo se pueden cambiar los archivos físicos usando WITH MOVE
Cambia el nombre de los archivos lógicos usando ALTER DATABASE en SQL, normalmente.
Esto parece estar confirmado por la clase RelocateFile 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");
código de Rahul es correcta: Restauración a nuevos archivos físicos y cambiar el nombre de archivos lógicos es un proceso de dos pasos:
La llamada RelocateFile
está diciendo "Ubicación del nombre de archivo lógico a este archivo físico". Debe utilizar los nombres de archivo lógicos de la copia de seguridad original aquí NO los nuevos, de lo contrario es probable que obtenga excepciones ".mdf cannot be overwritten
".
Para hacer nuevos nombres lógicos, use las llamadas Rename()
después, como se muestra en el código de Rahul.
Sin embargo, si desea cambiar el nombre de la base de datos utilizando 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();
¿Quiere decir que el nombre de la base de datos, o los nombres de archivo? Todas las respuestas a continuación parecen suponer que te refieres a los nombres de archivo lógicos? – Tao