Oracle

Oracle 12cR2 RAC - ORA-06508

  • November 21, 2021

環境:

  • 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。

原因:呼叫的儲存過程被修改

解決方法:重新編譯儲存過程

引用自:https://dba.stackexchange.com/questions/302932