数据库在运行存储过程的时候,有时候会出现ORA-04062错误

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

这个错误起源于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 changedim

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 = {SIGNATURE | TIMESTAMP}

相关文章
相关标签/搜索