ORA-24033: 未檢測到消息的收件人
我使用的是Oracle電子商務套件R12.1,11G數據庫版本。
嘗試創建或修改使用者或職責時遇到的錯誤:
ORA-24033: 在 FND_USER_RESP_GROUPS_API.UPDATE_ASSIGNMENT 中未檢測到消息的收件人
我的解決方法
我已按照 Oracle metalink doc (Doc ID 358151.1) 修復了該錯誤。每當我嘗試執行第一步(刪除現有訂閱者)時,都會出現以下錯誤:
第 1 行的錯誤:
ORA-04020:在嘗試鎖定對象時檢測到死鎖 30x0C2ABE5980x0C798B3F80x0D9CA49D8
ORA-06512:在“SYS.DBMS_AQADM_SYS”,第 7541 行
ORA-06512:在“SYS.DBMS_AQADM”,第 441 行
ORA-06512:在第 5 行
我必須修復 ORA-04020,以便稍後重新創建現有訂閱者(通過刪除現有訂閱者,然後添加新訂閱者)。
- 我試圖反彈應用程序和數據庫。
- 我編譯了應用程序架構。
- 我試圖找出鎖在哪里以及哪個模式阻塞了另一個,這樣我就可以終止該會話:
sql> SELECT c.owner, c.object_name, c.object_type, b.SID, b.serial#, b.status, b.osuser, b.machine
從 v $ locked_object a , v $ 會話 b,dba_objects c WHERE b.SID = a.session_id AND a.object_id = c.object_id;
輸出:
OWNER OBJECT_NAME OBJECT_TYPE SID SERIAL# STATUS ----- ------------- ---------- ------ ------- ----------- APPLSYS FND_CONCURRENT_QUEUES TABLE 152 3 INACTIVE APPLSYS FND_CONCURRENT_REQUESTS TABLE 466 7 INACTIVE
然後試圖找出哪個會話阻止了另一個會話來殺死它:
sql>SELECT l1.SID ||' IS BLOCKING '|| l2.SID FROM v$lock l1, v$lock l2 WHERE l1.BLOCK =1 AND l2.request > 0 AND l1.id1=l2.id1 AND l1.id2=l2.id2;
但我沒有返回行。
Internet 上的一些建議指出,當數據庫中存在無效對象時會發生死鎖。所以,我通過執行重新編譯了無效對象
$ORACLE_HOME/rdbms/admin/utlrp.sql
該腳本返回了一個輸出。以下是輸出的一部分:
第 1 行的錯誤:
ORA-04063:包主體“SYS.UTL_RECOMP”有錯誤
ORA-06508:PL/SQL:找不到正在呼叫的程序單元:“SYS.UTL_RECOMP”
ORA-06512:第 4 行
這也是輸出的一部分:
OBJECTS WITH ERRORS ------------------- 1
注意:我在應用更新檔後遇到了這個問題。自從檢測到死鎖以來已經超過 5 天了,儘管大多數關於死鎖的建議都說 oracle 將自行管理髮布。不需要顯式釋放。
關於如何解決這個問題的任何想法?
我將在這里為將來可能遇到此類錯誤的人編寫解決方案。
我通過重新編譯無效對象解決了這個錯誤。