Использование Smo.Backup для резервного копирования базы данных SQL Server в строку - PullRequest
2 голосов
/ 20 ноября 2011

Я пытаюсь создать небольшое приложение, которое помогло бы мне сделать резервную копию моего сервера. Это приложение будет работать на моем домашнем ПК, поэтому главная цель - иметь возможность подключиться к внешнему серверу, сделать резервную копию выбранной базы данных, записать содержимое резервной копии в строку или что-то подобное, чтобы я мог записать его на диск своего компьютера, а не на сервер. диск.

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

private bool BackupDatabase()
{
    try
    {
        // Filename
        string sFileName = string.Format("{0}\\{1}.bak", _sWhereToBackup, DatabaseName);

        // Connection
        string sConnectionString = String.Format(
            "Data Source=tcp:{0};Initial Catalog={1};User ID={2};Pwd={3};",
            DatabaseHost, DatabaseName, DatabaseUsername, DatabasePassword);

        SqlConnection oSqlConnection = new SqlConnection(sConnectionString);
        Server oServer = new Server(new ServerConnection(oSqlConnection));

        // Backup
        Backup backup = new Backup();
        backup.Action = BackupActionType.Database;
        backup.Database = DatabaseName;
        backup.Incremental = false;
        backup.Initialize = true;
        backup.LogTruncation = BackupTruncateLogType.Truncate;

        // Backup Device
        BackupDeviceItem backupItemDevice = new BackupDeviceItem(sFileName, DeviceType.File);
        backup.Devices.Add(backupItemDevice);

        // Start Backup
        backup.SqlBackup(oServer);
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return false;
}

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 20 ноября 2011

Это станет немного хакерским, потому что вам нужно либо

  1. вызовите функции sql, чтобы прочитать файл на сервере и вернуть его в виде двоичного массива, а затем преобразовать обратно в файл. это потребует надлежащих разрешений, поскольку учетная запись, под которой вы работаете, для доступа к файлу на диске сервера.

Вы можете использовать t-sql или немного более «продвинутый» код .net T-SQL можно увидеть в этом великом руководстве по инъекции SQL http://www.blackhat.com/presentations/bh-europe-09/Guimaraes/Blackhat-europe-09-Damele-SQLInjection-slides.pdf

или .net: http://www.mssqltips.com/sqlservertip/2349/read-and-write-binary-files-with-the-sql-server-clr/

  1. сопоставление местоположения файла (то есть доступ к общему ресурсу / диску / подключению ipc) по сети

  2. у сервера есть ftp файлы в папку

Что звучит скорее всего в вашем сценарии?

0 голосов
/ 21 ноября 2011

Вы должны изучить DAC, он в основном предназначен для SQL Server в Azure, но будет работать и с SQL Server 2008 R2.

http://sqldacexamples.codeplex.com/

0 голосов
/ 20 ноября 2011

Я так понимаю, что вы не подключены к сети?В идеале вы могли бы создать резервную копию прямо на своей машине, используя сетевой адрес, но я предполагаю, что вы бы уже подумали об этом.

Для прохождения маршрута, о котором вы думаете, вам потребуется иметь разрешения, которыевы обычно не хотели бы открываться кому-то через Интернет, и у вас будет гораздо больше проблем с программированием, чем с простой настройкой второго процесса перемещения файла куда-нибудь доступным вам.

Адамс предлагаетСервер FTP файлы являются хорошим.Кроме того, вы можете обнаружить, что использование DropBox ( www.dropbox.com ) может быть путем наименьшего сопротивления.Затем вы можете просто создать резервную копию базы данных в папке с установкой dropbox, и она будет автоматически скопирована в любую папку, настроенную на вашем компьютере, для синхронизации с ней.

...