ORACLE 04062 错误

前天,有客户报说数据库在运行存储过程的时候,有时候会出现ORA-04062错误。这Oracle文档中找到这个错误的描述。

这个错误起源于REMOTE_DEPENDENCIES_MODE 参数,该参数用于指定数据库为远程 pl/sql 存储的过程处理被依赖对象的方式。如果设置为 timestamp,只有在服务器和本地时间戳相匹配的情况下, 才能执行该过程。如果设置为 signature,在签名安全的情况下即可执行该过程。该参数默认为timestamp。

例一:timestamp

PROC_A (p_id IN number) /* 驻留在 DB1 */

PROC_B (p_deptno IN number) /*依赖PROC_A 驻留在 DB1 */

PROC_C (p_ deptno IN number) /* 通过DBLINK依赖PROC_A驻留在 DB2 */

当PROC_A被修改或编译时,将出现

ORA-04062:timestamp of procedure "XXXX.PROC_A" has been changed

PROC_B将马上失效,PROC_C将在运行时失效,所有要正确运行,这两个过程都必须重新被编译。

要解决这个问题,可以把改参数改为signature

ALTER system set REMOTE_DEPENDENCIES_MODE=’SIGNATURE’scope=BOTH

例二:signature

PROC_A (p_id IN number) /* 驻留在 DB1 */

PROC_B (p_deptno IN number) /*依赖PROC_A 驻留在 DB1 */

PROC_C (p_ deptno IN number) /* 通过DBLINK依赖PROC_A驻留在 DB2 */

当PROC_A被修改或编译时,PROC_B和PROC_C建保持有效,但当PROC_A的输入参数类型发生变化时,如改为varchar2, PROC_B和PROC_C将变为无效。

或者用动态SQL在要运行该过程时修改修改

ALTER SESSION SET REMOTE_DEPENDENCIES_MODE =

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190910A0ENKG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券