【问题标题】:Invalid token - invalid request BLR at offset 340 function F_LRTRIM is not defined无效的令牌 - 偏移量 340 处的无效请求 BLR 函数 F_LRTRIM 未定义
【发布时间】:2018-08-28 11:35:08
【问题描述】:

我正在尝试同步两个 Firebird 数据库。首先,我已经配置了同步是单向的。因此,一个数据库是Source-DB,另一个是target-DB。

要开始同步,我使用 IBReplicator!当我开始同步时,我收到错误:

Exception: Invalid token
invalid request BLR at offset 340
function F_LRTRIM is not defined 
module name or entrypoint could not be found

我开始寻找问题的原因。我已经检查过的内容:

  • .dll文件存在于firebird目录中
  • Firebird 版本是 32 位
  • IBExpert 在数据库的 UDF 部分显示 UDF。

我了解到,当 Firebird 服务器版本和 .dll 文件版本不匹配时,可能会出现问题。但我不知道如何验证版本。

我想搜索一个 .conf 文件来检查 UDF 文件 (.dll) 的路径,但我没有找到。我只找到了 firebird.conf 文件,并且我已经将 UDFAccess 设置为 Full。

如果有人可以帮助我,我将不胜感激。我在这个问题上浪费了大量时间。

【问题讨论】:

  • UdfAccess 设置为Full 是不安全的。无论如何,该错误表明您没有正确的 UDF 库,或者 Firebird 找不到它(意味着配置不正确或库的位置不在路径上)。 UDF 在数据库中定义的事实没有任何意义:它可能已定义,但在运行时,Firebird 找不到所需的库。根据提供的信息,我们无法真正帮助您。另外,考虑切换到TRIM
  • 可能将UdfAccess 更改为Restrict <location of the UDF> 可能会解决您的问题。
  • 我会写 {Restrict C:\Program Files (x86)\Firebird\Firebird_2_5\UDF}
  • 或者我应该在字符串末尾添加文件+扩展名?
  • 在这种情况下,您可以使用Restrict UDF(无论如何这是默认值)。

标签: firebird user-defined-functions


【解决方案1】:

该错误表示Firebird在执行该函数时找不到入口点或库。这意味着

  1. 找不到库:它不在(库)路径或UdfAccess 配置中列出的文件夹之一中
  2. 已找到库,但它是 32 位的,而您正在运行 64 位(或者它是 64 位,而您正在运行 32 位)
  3. 已找到库,但没有 UDF 的入口点。

你的问题似乎是第一个,解决方法是在UdfAccess配置中添加UDF的位置。鉴于 cmets,您应该使用

UdfAccess = Restrict UDF

这将只允许来自您的 Firebird 安装目录的 UDF 目录中的 UDF 库。如果需要,您可以列出以; 分隔的多个目录。

你永远不应该使用UdfAccess = Full,它是不安全的,因为它可能被用来破坏你的系统与系统(库)路径上的任何库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2021-04-08
    • 1970-01-01
    • 2016-08-21
    • 2020-12-04
    • 2019-10-02
    相关资源
    最近更新 更多