C # SMO резервное копирование удаленной базы данных на локальную машину - PullRequest
11 голосов
/ 17 февраля 2010

У меня есть приложение, которое выполняет резервное копирование и восстановление баз данных SQL, это прекрасно работает на локальном компьютере, однако, если я запускаю это на сервере SQL, размещенном на другом компьютере, я получаю следующую ошибку

Microsoft.SqlServer.Management.Smo.FailedOperationException: не удалось выполнить резервное копирование для сервера «25 .98.30.79». ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: исключение произошло при выполнении оператора или пакета Transact-SQL. ---> System.Data.SqlClient.SqlException: не удается открыть устройство резервного копирования 'C: \ Program Files \ State Manager \ Archive \ Capture \ 20100217152147 * product * \ database * database ** 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;
        }
    }

Ответы [ 4 ]

17 голосов
/ 17 февраля 2010

Нет, это никогда не сработает - SQL Server может выполнять резервное копирование только на диск, физически подключенный к реальной машине SQL Server. Вы не можете ни при каких обстоятельствах выполнять резервное копирование удаленного SQL Server на локальный жесткий диск - просто это невозможно (ни в SMO, ни в SQL Server Management Studio).

1 голос
/ 17 ноября 2012

Вы можете скопировать удаленную базу данных в локальную. Для копирования используйте это: Щелкните правой кнопкой мыши на удаленной базе данных в SSMS: Задачи -> Экспорт данных. В открывшемся окне выберите базу данных источника и назначения, все данные из источника (удаленного) будут скопированы в вашу локальную базу данных.

1 голос
/ 17 февраля 2010

Как сказал Marc_s, это невозможно сделать. В качестве обходного пути вы заставляете вашу базу данных вызывать программу командной строки на хосте, которая отправляет файл по ftp, копирует его в какую-то общую папку или что-то еще.

Удачи

0 голосов
/ 26 сентября 2010

Я знаю, что это старый пост но да, вы можете сделать резервную копию базы данных удаленного сервера sqlserver

вы просто создаете одно и то же имя папки и диска на удаленном и локальном компьютере

пример:

d: \ sql_backup на локальном компьютере d: \ sql_backup на удаленном компьютере

и он это сделает ... конечно, файл резервной копии будет на удаленном компьютере

если вы хотите получить файлы резервных копий, просто поделитесь папкой на удаленном компьютере

Saludos rubenc

...