修改外部例程库和类文件

在部署现有的外部例程并在生产数据库系统环境中使用该例程之后,可能需要对其逻辑进行修改。 您可以对现有例程进行修改,但重要的是仔细地进行修改,以便定义清晰的接管时间点执行更新以及最大程度地降低中断任何并发例程调用的风险。

如果需要更新外部例程库,请不要重新编译该例程并将其重新链接到数据库管理器运行期间使用的当前例程的目标文件(例如 sqllib/function/foo.a)。 如果当前例程调用正在访问高速缓存的例程进程版本,并且底层库被替换,那么可能会导致例程调用失败。 如果有必要在不停止然后重新启动数据库管理器的情况下更改例程的主体,请完成下列步骤:

  1. 创建使用另一个库或类文件名的新外部例程库。

  2. 如果它是嵌入式 SQL 例程,请使用 BIND 命令对例程程序包与数据库进行绑定。

  3. 使用 ALTER ROUTINE 语句来更改例程定义,以使 EXTERNAL NAME 子句引用更新后的例程库或类。 如果要更新的例程主体由多个数据库中编目的例程使用,那么必须对每个受影响的数据库执行本节描述的操作。

  4. 要更新内置到 JAR 文件中的 Java™ 例程,必须发出 CALL SQLJ.REFRESH_CLASSES () 语句以强制数据库管理器装入新类。 如果在更新 Java 例程类之后未发出 CALL SQLJ.REFRESH_CLASSES () 语句,那么 数据库管理器 将继续使用先前版本的类。 数据库管理器在 COMMIT 或 ROLLBACK 发生时刷新类。

一旦例程定义被更新,对该例程进行的所有后续调用都将装入并运行新的外部例程库或类。