Delphi 使用Firebird的多个实例进行FireDac还原

Delphi 使用Firebird的多个实例进行FireDac还原,delphi,firebird,restore,firedac,Delphi,Firebird,Restore,Firedac,我有多个Firebird实例: Firebird 2.5.6使用ServiceName FirebirdServerDefaultInstance在端口3050上运行 Firebird 3.04使用ServiceName在端口3060上运行 FirebirdServerFB30 使用gbak,我做到了这一点,它也可以工作(我直接在Firebird 3目录中执行gbak)。我可以使用任何随机用户和随机密码,它的工作 gbak -user ADMINxxx -pas adminxxx -c -v

我有多个Firebird实例:

  • Firebird 2.5.6使用ServiceName FirebirdServerDefaultInstance在端口3050上运行
  • Firebird 3.04使用ServiceName在端口3060上运行 FirebirdServerFB30
使用gbak,我做到了这一点,它也可以工作(我直接在Firebird 3目录中执行gbak)。我可以使用任何随机用户和随机密码,它的工作

gbak -user ADMINxxx -pas adminxxx -c -v -se service_mgr D:\fb30.gbk d:\fb303.gdb
使用FireDac时,我在恢复数据库时遇到问题:

  ADIBRestore.BackupFiles.Clear;
  ADIBRestore.BackupFiles.Add('D:\fb30.gbk');
  ADIBRestore.Database := 'd:\fb303.gdb';
  ADIBRestore.UserName := 'ADMINxxx';
  ADIBRestore.Password := 'adminxxx';
  ADIBRestore.Host := '127.0.0.1';
  ADIBRestore.Port := '3060';
  ADIBRestore.Restore;
这给了我一个例外

[FireDAC][Phys][FB]没有创建数据库访问权限 D:\FB303.GDB未能创建数据库D:\FB303.GDB未知ISC错误 336330835


是否可以使用非SYSDBA用户的FireDac还原数据库?

该用户没有指定目录的写入权限。

我今天也遇到了这个问题。在我的例子中,事实证明存在到数据库的现有连接。一旦我删除了所有连接,FireDac就开始工作了。即使有到数据库的连接,Gbak也可以工作


这是一个有趣的发现,现在我已经投入时间使用FireDAC而不是IBMObjects。我正在考虑在运行备份之前获得独占访问权。

您确定在这两种情况下都使用FB3而不是FB2吗?例如,在
gbak
命令中,我看不到对
3060
端口的任何引用,也看不到对非默认
IPC
名称的引用。您可以使用SysInternals Process Monitor来检查两台服务器中的哪一台真正创建了数据库文件。我确信,使用SYSDBA还原ODS是很好的。我只希望数据库的所有者是“ADMINxxx”,而不是关于第二个示例的“SYSDBA”。第一个呢,
gbak
?该评论禁止使用FB 2的地方?检查第一个命令是否不会使FB2的EXE成为创建数据库文件的EXE。另外,在Firebird 3上选中
grant create database to user/role
命令,添加了额外的权限,包括创建数据库的权限。如果出现错误,您的用户没有创建数据库的权限。我怀疑您的gbak调用是通过Firebird 2.5服务器运行的,因此可以正常工作。尝试使用
-se localhost/3060:service\u mgr
,可能会出现相同的错误。您需要将权限授予您的用户。@markrottveel,完全正确。FB3要求sysdba或所有者能够进行备份。以前的版本不在乎。这将导致不同的错误。此错误意味着用户没有创建数据库权限(在Firebird 3中引入)。