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

neg*_*nbe 4 c# firebird remote-backup

我正在尝试使用以下代码来备份位于我没有写入权限的远程服务器上的数据库:

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();
Run Code Online (Sandbox Code Playgroud)

如果数据库打开的话,这工作得很好localhost或者我可以写入服务器文件夹,则效果非常好。问题是当我需要将文件保存到本地计算机时(因为我没有服务器上的权限)。奇怪的是,服务输出显示了通常的输出 - 只是最后,本地文件没有创建......!

在这里阅读了有关使用的信息gbak,但使用它时我遇到了许多其他问题。我很确定缺少参数或缺少任何其他奇怪的技巧......

Mar*_*eel 6

该类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();
}
Run Code Online (Sandbox Code Playgroud)