Oracle

ORA-24033: 未檢測到消息的收件人

  • June 29, 2017

我使用的是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,以便稍後重新創建現有訂閱者(通過刪除現有訂閱者,然後添加新訂閱者)。

  1. 我試圖反彈應用程序和數據庫。
  2. 我編譯了應用程序架構。
  3. 我試圖找出鎖在哪里以及哪個模式阻塞了另一個,這樣我就可以終止該會話:
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 將自行管理髮布。不需要顯式釋放。

關於如何解決這個問題的任何想法?

我將在這里為將來可能遇到此類錯誤的人編寫解決方案。

我通過重新編譯無效對象解決了這個錯誤。

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