У меня есть приложение, которое выполняет резервные копирования и восстановления баз данных SQL, это хорошо работает на локальной машине, однако если я выполняю это против SQL-сервера, размещенного на другой машине, я получаю следующую ошибку
Microsoft. SqlServer. Управление. Smo. FailedOperationException: Резервное копирование перестало работать для Сервера '25.98.30.79'.---> Microsoft. SqlServer. Управление. Распространенный. ExecutionFailureException: исключение произошло при выполнении оператора Transact-SQL или пакета.---> Система. Данные. SqlClient. SqlException: не Может открыть устройство резервного копирования 'C:\Program Files\State Manager\Archive\Capture\20100217152147*product*\databases*database ** database*.bak'. Ошибка операционной системы 3 (Система не может найти путь указанным.).
Это, кажется, вызывается SQL-сервером, пытающимся записать этот файл в его локальный диск. Я не могу установить общую область, в которую резервное копирование может быть помещено из-за ограничений безопасности.
Кто-либо знает, как я могу положить обратно эти данные к машине, от которой называют код?
Мой код ниже.
private string Name;
private string Server;
private string dbName;
private string user;
private string password;
public Boolean performCapture(String archiveDir)
{
String destination = archiveDir + "\\" + Name;
if (!System.IO.Directory.Exists(destination))
{
System.IO.Directory.CreateDirectory(destination);
}
Server sqlServer = connect();
if (sqlServer != null)
{
DatabaseCollection dbc = sqlServer.Databases;
if (dbc.Contains(dbName))
{
Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Database = dbName;
BackupDeviceItem bkpDevice = new BackupDeviceItem(destination + "\\" + dbName + ".bak", DeviceType.File);
bkpDatabase.Devices.Add(bkpDevice);
bkpDatabase.Incremental = false;
bkpDatabase.Initialize = true;
// Perform the backup
bkpDatabase.SqlBackup(sqlServer);
if (System.IO.File.Exists(destination + "\\" + dbName + ".bak"))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
Нет, это никогда не сработает - SQL Сервер может выполнять резервное копирование только на диск, физически подключенный к реальной машине SQL Server. Вы не можете ни при каких обстоятельствах создать резервную копию удаленного SQL Server на вашем локальном жестком диске - просто невозможно (ни в SMO, ни в SQL Server Management Studio).
Как сказал Marc_s, это невозможно сделать. В качестве обходного пути вы можете сделать так, чтобы ваша база данных вызывала программу командной строки на хосте, которая отправляла файл по ftp, копировала его в какую-нибудь общую папку или что-то еще.
Good Luck