ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效
同事在測試環境修改一個表的字段長度時,拋出ORA-00054的錯誤
SQL> alter table prp_emp modify(ename varchar2(20));
alter table prp_emp modify(ename varchar2(20))
ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效
很明顯這張表被鎖了,我讓他過兩分鍾在試試。
可過了一會去執行還是抱同樣的錯。只能去看看誰鎖住這張表了。
SQL> SELECT /*+ rule */
2 s.username,
3 decode(l.type, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL) LOCK_LEVEL,
4 o.owner,
5 o.object_name,
6 o.object_type,
7 s.sid,
8 s.serial#
9 FROM gv$session s, gv$lock l, dba_objects o
10 WHERE l.sid = s.sid
11 AND l.id1 = o.object_id(+)
12 AND s.username is NOT NULL
13 AND O.OWNER='REPORT'
14 ;
USERNAME LOCK_LEVEL OWNER OBJECT_NAME OBJECT_TYPE SID SERIAL#
--------- ----------------- ---------- ------------- ----------- ----- ----------
REPORT TABLE LOCK REPORT PRP_EMP TABLE 140 417
果然是這個表被另一個同事鎖住了,而這個人又不在工位上。斷開了他的session后,很快執行完畢。
SQL> alter system kill session '140,417';
System altered
SQL> alter table prp_emp modify(ename varchar2(20));
Table altered