Firebird 4 -共享内存区域可能已由另一个Windows会话中的另一个引擎示例创建

zkure5ic  于 2023-06-07  发布在  Windows
关注(0)|答案(1)|浏览(194)

我们使用Firebird,并希望从FB 2.5迁移到FB 4.0.2.2816,在进行数据库恢复时遇到了一个奇怪的问题。
当我们在命令提示符下使用以下命令恢复数据库时
gbak.exe -c -o -v -user {ProgramAdmin} -password {Password} -page_size 8192 "C:\MyFolder\fb4.fbk" "C:\MyFolder\Restore.fdb"
我们得到错误消息

gbak:opened file C:\MyFolder\fb4.fbk 
gbak:transportable backup -- data in XDR format
gbak:       backup file is compressed
gbak:backup version is 11
gbak: ERROR:Shared memory area is probably already created by another engine instance in another Windows session
gbak: ERROR:failed to create database C:\MyFolder\Restore.fdb
gbak:Exiting before completion due to errors

我们运行此操作的Windows 10用户是有限域用户(不是管理员),此消息在90%的时间内出现,其他10%正常,数据库按预期恢复。
没有其他firebird示例正在运行,也没有其他用户登录到计算机。
如果我们以本地管理员的身份运行命令提示符,错误似乎会消失。
所以我不确定这是用户访问问题还是网络访问问题。以受限用户身份备份数据库在100%的时间内都有效。
{ProgramAdmin}用户被设置为RDB:ADMIN,但不是SYSDBA,我们已经尝试使用SYSDBA并且在参数中没有用户名/密码,但仍然引发错误。
这在Firebird 2.5中工作得很好,所以看起来是一个FB 4的东西。
有没有人遇到过这种情况,或者有任何想法如何解决这个问题?

dxxyhpgq

dxxyhpgq1#

Firebird 2.5和Firebird 3.0及更高版本之间的区别在于-在Windows上-如果您没有指定服务器,Firebird 2.5将使用XNET连接到本地服务器,而Firebird 3.0及更高版本默认使用嵌入式引擎。
据我所知,如果您的Firebird服务器作为服务运行,这就是导致此处错误的原因(IIRC,有一个错误修复,将在下一个版本中防止此错误)。要避免此错误,您需要确保通过服务器连接,而不是使用嵌入式引擎。
为此,请将"C:\MyFolder\Restore.fdb"替换为"xnet://C:\MyFolder\Restore.fdb"(使用XNET)或"localhost:C:\MyFolder\Restore.fdb""inet://localhost/C:\MyFolder\Restore.fdb"(均使用TCP/IP)。例如:
gbak.exe -c -o -v -user {ProgramAdmin} -password {Password} -page_size 8192 "C:\MyFolder\fb4.fbk" "xnet://C:\MyFolder\Restore.fdb"

相关问题