IFX_AUTO_REPREPARE 环境选项

使用 IFX_AUTO_REPREPARE 环境选项来减少在动态的 SQL 应用访问的数据库中 SQL 错误 -710 的发生率。

当游标尝试执行准备好的对象时,或当 SPL 例程执行查询时,在 DLL 操作已更改了准备好的对象或 SPL 例程引用的表的模式之后,可能发出错误 -710。

在启用 IFX_AUTO_REPREPARE 选项时,在对数据库表的模式的有些更改之后,您可避免 -710 错误,诸如添加启用的索引。此特性可减少显式地发出 PREPARE 语句来重新编译准备好的对象的需要,或显式地发出 UPDATE STATISTICS 语句来重新优化 SPL 例程的需要。在不需要重新发出 DESCRIBE 语句的表模式更改期间,如果启用 IFX_AUTO_REPREPARE,则数据库服务器自动地标识并重新编译准备好的语句和引用修改的表的 SPL 例程。

SET ENVIRONMENT IFX_AUTO_REPREPARE 语句指定的值可启用或禁用此自动重新编译特性:

在对准备好的对象或 SPL 例程引用的表的 DDL 操作之后,下列语句启用自动重新编译:
SET ENVIRONMENT IFX_AUTO_REPREPARE '1';
这覆盖 AUTO_REPREPARE 配置参数的设置,如果它是 0 或 'None' 的话,对于当前会话的剩余部分,或直到您重置 IFX_AUTO_REPREPARE 为止。

数据库服务器可能不检测有些使得准备好的对象或 SPL 例程无效的表模式的更改,即使当启用 IFX_AUTO_REPREPARE 时。例如,当您尝试在获得共享锁之后读同一表时,通过一个会话对表模式的更改导致并发的会话收到错误 -710。

启用 IFX_AUTO_REPREPARE 可能不影响引用表的准备好的语句和 SPL 例程,其中的 DDL 操作更改表中列的数目,或更改列的数据类型。要避免在这些模式更改之后发生错误 -710,对于引用其模式已被修改的表的任何例程,您通常必须重新发出 DESCRIBE 语句、PREPARE 语句以及(对于与例程相关联的游标)UPDATE STATISTICS 语句。

如果您对您的应用当前处理由于模式更改导致的错误的方式满意,则可禁用自动重新编译,如此例中所示:
SET ENVIRONMENT IFX_AUTO_REPREPARE 'OFF';

如果启用 IFX_AUTO_REPREPARE 会话环境变量导致运行时错误,则将那个错误传回应用。

要获取更多关于 AUTO_REPREPARE 配置参数的信息,请参阅您的 GBase 8s 管理员参考手册。要了解对游标和对查询的 IFX_AUTO_REPREPARE 和 AUTO_REPREPARE 设置的作用的讨论,请参阅您的 GBase 8s 性能指南