You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移Firebird数据库至Debian11时存储过程编译报错求助

Firebird迁移后UDF依赖缺失导致存储过程编译失败排查方案

报错信息

Invalid token.
invalid request BLR at offset 588.
function SHASH_HMAC is not defined.
module name or entrypoint could not be found.
Error while parsing procedure X_SYS_GET_USERINFO's BLR.

服务器与Firebird版本信息

旧服务器

  • 系统:Debian 8.11 (jessie)
  • Firebird版本:
Server version: LI-V2.5.7.27050 Firebird 2.5
Server implementation: Firebird/linux AMD64

新服务器

  • 系统:Debian 11 (bullseye)
  • Firebird版本:
Server version: LI-V2.5.9.27139 Firebird 2.5
Server implementation: Firebird/linux AMD64
  • 运行方式:xinetd

UDF库依赖检测结果

新服务器(执行ldd /opt/firebird/UDF/fb_shash)

ldd /opt/firebird/UDF/fb_shash
        linux-vdso.so.1 (0x00007ffed7be6000)
        libib_util.so => not found
        libcrypto.so.1.0.0 => not found

旧服务器(执行ldd /opt/firebird/UDF/fb_shash)

ldd /opt/firebird/UDF/fb_shash
linux-vdso.so.1 (0x00007ffda771f000)
        libib_util.so => /usr/lib/x86_64-linux-gnu/libib_util.so (0x00007f6682710000)
        libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f6682313000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6682008000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6681d07000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6681af1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6681746000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6681542000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f6682b15000)

排查与解决步骤

1. 修复缺失的依赖库

解决libib_util.so缺失

  • 从旧服务器复制/usr/lib/x86_64-linux-gnu/libib_util.so到新服务器相同路径,或复制至Firebird的lib目录(如/opt/firebird/lib)
  • 若复制到Firebird lib目录,需配置环境变量确保加载:
    echo "export LD_LIBRARY_PATH=/opt/firebird/lib:\$LD_LIBRARY_PATH" >> /etc/profile
    source /etc/profile
    systemctl restart xinetd
    

解决libcrypto.so.1.0.0缺失

Debian 11默认使用OpenSSL 1.1.x,无该版本库,可通过以下方式解决:

  • 从旧服务器Debian 8的/usr/lib/x86_64-linux-gnu/复制libcrypto.so.1.0.0和libssl.so.1.0.0到新服务器相同路径
  • 复制完成后更新库缓存:
    ldconfig
    

2. 验证UDF库权限

  • 确保Firebird运行用户(通常为firebird)拥有UDF目录及文件的读权限:
    chown -R firebird:firebird /opt/firebird/UDF
    chmod -R 755 /opt/firebird/UDF
    

3. 检查Firebird UDF配置

  • 编辑/opt/firebird/firebird.conf,确认UDF访问权限配置:
    UDFAccess = Restrict UDF
    
  • 修改后重启xinetd服务:
    systemctl restart xinetd
    

4. 重新编译存储过程

  • 登录Firebird数据库,重新编译报错的存储过程:
    ALTER PROCEDURE X_SYS_GET_USERINFO COMPILE;
    
  • 批量处理多个报错存储过程时,可执行以下查询生成编译脚本:
    SELECT 'ALTER PROCEDURE ' || RDB$PROCEDURE_NAME || ' COMPILE;' FROM RDB$PROCEDURES WHERE RDB$SYSTEM_FLAG = 0;
    
    将查询结果导出为SQL脚本执行即可

内容的提问来源于stack exchange,提问作者MarekOadmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:39:19