Резервное копирование сервера в локальный файл с FirebirdSql.Data.Services.FbBackup

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

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 ответ

Решение

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();
}
Другие вопросы по тегам