Резервное копирование сервера в локальный файл с FirebirdSql.Data.Services.FbBackup - PullRequest
0 голосов
/ 14 декабря 2018

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

FbBackup backupSvc = new FbBackup();
backupSvc.ConnectionString = ConnectionStr; // on remote server
backupSvc.BackupFiles.Add(new FbBackupFile(destFile)); // local file
backupSvc.Verbose = true;
backupSvc.Options = FbBackupFlags.IgnoreLimbo;        
backupSvc.ServiceOutput += ServiceOutput;
backupSvc.Execute();

Это прекрасно работает, если БД включена localhost или если я могу написать в папку на сервере.Проблема в том, когда мне нужно сохранить файл на локальном компьютере (так как у меня нет разрешений на сервере).Как ни странно, выходные данные службы показывают обычный вывод - только что в конце локальный файл НЕ создается ...!

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

1 Ответ

0 голосов
/ 14 декабря 2018

Класс FbBackup реализует только обычную операцию gbak, когда клиент может инициировать резервное копирование, но резервная копия записывается на сервер (с использованием прав доступа процесса сервера Firebird).

Если вы хотите, чтобы резервная копия создавалась на клиенте, вам нужно использовать FirebirdSql.Data.Services.FbStreamingBackup.

См. Также https://www.tabsoverspaces.com/233462-ado-net-provider-4-2-0-0-for-firebird-is-ready

Минимальный пример:

static void Main(string[] args)
{
    var connectionString = new FbConnectionStringBuilder
    {
        Database = "employee",
        DataSource = "sagittarius",
        ServerType = FbServerType.Default,
        UserID = "sysdba",
        Password = "masterkey",
    }.ToString();

    using (var output = File.Create(@"D:\Temp\remotebackup.fbk"))
    {
        var backup = new FbStreamingBackup();
        backup.ConnectionString = connectionString;
        backup.OutputStream = output;
        backup.Execute();
    }
    Console.ReadLine();
}
...