使用 FirebirdSql.Data.Services.FbBackup 将服务器备份到本地文件

Backup server to local file with 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 上,或者如果我可以写入服务器文件夹,这将非常有效。问题是当我需要将文件保存到本地计算机时(因为我在服务器上没有权限)。奇怪的是,服务输出显示了通常的输出 - 只是最后没有创建本地文件...!

我阅读了 here 关于使用 gbak 的内容,但我 运行 遇到了许多其他使用它的问题。我很确定缺少参数或我缺少任何其他奇怪的技巧...

FbBackupclass只实现了正常的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();
}