У меня SQL Сервер Express, работающий на моей машине, и я хотел бы создать резервную копию базы данных и восстановить эту резервную копию на моем локальном компьютере, чтобы я мог использовать файлы .mdf
и .ldf
на местном уровне.
У меня есть небольшая C# программа, которая управляет этой базой данных и позволяет мне выполнять запросы на создание и восстановление резервной копии. Однако, когда я хочу скопировать / вставить файлы .mdf
и .ldf
локально, у меня нет прав доступа. Только учетная запись администратора и служба SQL имеют доступ.
Есть ли способ выполнить восстановление локально, не открывая общий доступ к папке на сервере?
Метод резервного копирования:
string cmd = "BACKUP DATABASE [" + "Database" + "] TO DISK='" + "\\\\srv-vm\\PJDB\\Backup\\Database.bak" + "'";
using (SqlCommand command = new SqlCommand(cmd, con))
{
if (con.State != ConnectionState.Open)
{
con.Open();
}
command.ExecuteNonQuery();
}
Метод восстановления:
SqlConnection objconnection = new SqlConnection(connectionstring);
ServerConnection con = new
ServerConnection(objconnection.DataSource.ToString());
Server server = new Server(con);
Restore _dataBase = new Restore();
_dataBase.Database = "db";
_dataBase.Action = RestoreActionType.Database;
_dataBase.Devices.AddDevice("\\\\srv-vm\\PJDB\\Backup\\Database.bak", DeviceType.File);
// define "file relocation" - for all "logical" files in a SQL Server database,
// define a new physical location where the file will end up at
RelocateFile relocateDataFile = new RelocateFile("Database", "\\\\srv-vm\\PJDB\\Backup" + "\\Database.mdf");
RelocateFile relocateLogFile = new RelocateFile("Database_log", "\\\\srv-vm\\PJDB\\Backup" + "\\Database_log.ldf");
_dataBase.RelocateFiles.Add(relocateDataFile);
_dataBase.RelocateFiles.Add(relocateLogFile);
_dataBase.ReplaceDatabase = true;
_dataBase.SqlRestore(server);
_dataBase.NoRecovery = false;