數據庫在運行存儲過程的時候,有時候會出現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}

相關文章
相關標籤/搜索