3

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

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

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

4

1 回答 1

4

该类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();
}
于 2018-12-14T15:09:41.177 回答