C# 使用FirebirdSql.Data.Services.FbBackup将服务器备份到本地文件
我正在尝试使用以下代码备份位于远程服务器上的数据库,但我没有写入权限:C# 使用FirebirdSql.Data.Services.FbBackup将服务器备份到本地文件,c#,firebird,remote-backup,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
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的文章,但是在使用gbak时遇到了许多其他问题。我很确定有一个缺少的参数或我缺少的任何其他奇怪的技巧…FbBackup类只实现正常的gbak操作,其中客户端可以触发备份,但备份写在服务器上(使用Firebird服务器进程的访问权限) 如果希望在客户端上创建备份,则需要改用
FirebirdSql.Data.Services.FbStreamingBackup
另见
一个简单的例子:
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();
}
太棒了,伙计,万分感谢,就是这样。你太棒了!作为一个附带问题-我得到一个“内存不足”的异常(数据库实际上相当大)-我能做些什么吗???(数据库大约是200Mb,所以实际上不是不可管理的…@neggenbe您是否使用内存流而不是文件流来创建备份?您是我今天的绝对英雄!!!!!!谢谢马克!!!!!在30分钟内完成所有这些!太棒了,让我开心!