Delphi 使用Firebird的多个实例进行FireDac还原
我有多个Firebird实例: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 2.5.6使用ServiceName FirebirdServerDefaultInstance在端口3050上运行
- Firebird 3.04使用ServiceName在端口3060上运行 FirebirdServerFB30
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中引入)。