ORA-04021: 等待物件鎖超時
中午一開發說更新了一個package body裡幾個procedure之後編譯一直不成功,PL/SQL Developer無響應不報錯,沒碰到過這種問題,看了alert也沒有發現異常,檢查了程式碼沒有問題,猜測是不是有可能procedure中涉及到的物件被鎖從而導致編譯不成功,查詢v$lock沒有看到blocker,然後編譯的那個會話就報錯了:
ORA-04021: timeout occurred while waiting to lock object
[oracle@ASM ~]$ oerr ora 04021
04021, 00000, "timeout occurred while waiting to lock object %s%s%s%s%s"
// *Cause: While waiting to lock a library object, a timeout occurred.
// *Action: Retry the operation later.
google了一把,一般ORA-04021是因為這個包正在被其他會話呼叫,編譯時申請不到library lock導致的,透過dba_ddl_lock 找到呼叫這個包的會話kill之後據能夠正常編譯,按照這個方法問題得到解決。
下面把這個錯誤重現了一下:
SCOTT@ora11g> create or replace procedure p1 as
2 begin
3 while true loop
4 null;
5 end loop;
6 end;
7 /
Procedure created.
SYS@ora11g> alter procedure scott.p1 compile;
Procedure altered.
SCOTT@ora11g> exec p1
SYS@ora11g> alter procedure scott.p1 compile;
alter procedure scott.p1 compile
*
ERROR at line 1:
ORA-04021: timeout occurred while waiting to lock object
SYS@ora11g> select * from dba_ddl_locks where name='P1';
SESSION_ID OWNER NAME TYPE MODE_HELD MODE_REQU
---------- ----- ----- ---------------------------------------- --------- ---------
21 SCOTT P1 Table/Procedure/Type Null None
SYS@ora11g> select sid,serial# from v$session where sid=21;
SID SERIAL#
---------- ----------
21 149
SYS@ora11g> alter system kill session '21,149';
System altered.
SCOTT@ora11g> exec p1
BEGIN p1; END;
*
ERROR at line 1:
ORA-00028: your session has been killed
ORA-00028: your session has been killed
SCOTT@ora11g>
SYS@ora11g> alter procedure scott.p1 compile;
Procedure altered.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-1171262/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RDSforMySQLInnoDB行鎖等待和鎖等待超時的處理ORMMySql
- Seata 全域性鎖等待超時 問題排查
- 故障分析 | MySQL鎖等待超時一例分析MySql
- ruby webdriver 顯性等待、隱性等待、內部超時處理Web
- MySQL 死鎖和鎖等待MySql
- 2.6.7 設定DDL鎖超時
- 【ORA-02049】超時分散式事務處理等待鎖 解決方法 推薦分散式
- 物件鎖:傳遞物件鎖物件
- MySQL鎖等待與死鎖問題分析MySql
- mysql鎖等待查詢分析MySql
- 查詢鎖等待情況
- Oracle阻塞(鎖等待)查詢Oracle
- [Q]怎麼快速查詢鎖與鎖等待
- SQL Server 頁面查詢超時(SOS_SCHEDULER_YIELD等待)SQLServer
- 使用兩個context實現CLOSE包的超時等待Context
- python redis 分散式鎖 自動超時PythonRedis分散式
- 檢視MySQL鎖等待的原因MySql
- ORACLE鎖等待的處理方法Oracle
- synchronized類鎖與物件鎖synchronized物件
- 8 鎖物件物件
- ORA-04021錯誤分析
- tempdb大量閂鎖等待問題分析
- oracle bug 6825287導致DX鎖等待Oracle
- 批量解決oracle鎖等待的方法Oracle
- 【EM】鎖等待故障模擬及排查
- Monitor的擴充套件支援string的超時鎖套件
- ORACLE 11g新特性-允許DDL鎖等待DML鎖Oracle
- C# 物件鎖C#物件
- uc/os-iii學習筆記---同時等待多個核心物件筆記物件
- MySQL資料庫故障分析-鎖等待(一)MySql資料庫
- mysql InnoDB鎖等待的檢視及分析MySql
- MySQL 5.5 -- innodb_lock_wait 鎖 等待MySqlAI
- DB2檢視鎖等待的SQLDB2SQL
- 檢視長時間鎖定物件的程式,並kill掉物件
- 設定mysql 事務鎖超時時間 innodb_lock_wait_timeoutMySqlAI
- Redis分散式鎖(二):鎖超時後導致多個執行緒獲得鎖的解決方案Redis分散式執行緒
- C# 物件鎖——MonitorC#物件
- java 執行緒鎖物件鎖的理解Java執行緒物件