Oracle
Oracle 12cR2 RAC - ORA-06508
環境:
- DB 版本: Exadata 上的 Oracle Database 12cR2 EE
- ***RAC:***是的
- 問題: ORA-06508 關於程序。
我們的一位使用者擁有 DBA 角色特權,我們不想再定義這麼大的特權。當我們撤銷該使用者的 DBA 角色權限時,所有過程、包和触發器都變得無效。這是我們當時所期望的,我們接受了它。當我們編譯所有這些時,沒有任何問題,我們將 DBA 角色權限重新分配給該使用者,以便將這項工作推遲到以後。
問題從這一點開始。當其中一個程序要執行時,我們會收到錯誤消息。但是錯誤並沒有不斷出現,例如它在過去 26 小時內正常工作,但隨後出現錯誤。當我們刪除/創建或編譯時,問題就解決了。然而,奇怪的是,當這個問題發生時,過程和依賴關係似乎都是有效的。錯誤如下:
出現錯誤:第 xxxx 行的 PROCEDURE_NAME - ORA-06508:PL/SQL:找不到正在呼叫的程序單元
第 xxxx 行:
EXCEPTION WHEN OTHERS THEN ROLLBACK; R_CODE:= 400; R_MESSAGE:='Error raised in: '|| $$plsql_unit ||' at line ' || $$plsql_line || ' - '||sqlerrm;
我在 Oracle Support 或 dba.stackexchange 上找不到適合這種情況的解決方案,我仍在研究。有人有好主意嗎?
最好的祝福,
$$plsql_line 包含它出現的行,這對於定位異常的原因是沒有用的。你不是第一個為此而墮落的人,例如。使用-plsql-line。閱讀那裡的解決方案,例如。在異常處理中使用 DBMS_UTILITY.FORMAT_CALL_STACK。
原因:呼叫的儲存過程被修改
解決方法:重新編譯儲存過程