在sql plus中引用oracle的存储过程,存储过程中使用到了临时表,在sql plus 未关闭的情况下,在报表中调用同一个存储过程时,提示ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效。将sql plus关闭后,报表正常。
同事在测试环境创建一个表的索引时,抛出ORA-00054的错误
create index picture_user_idx on picture (userid);
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
很明显这张表被锁了,我让他过两分钟在试试。可过了一会去执行还是抱同样的错。只能去看看谁锁住这张表了。
SELECT
s.username,
decode(l.type, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL) LOCK_LEVEL,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#
FROM gv$session s, gv$lock l, dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
and object_name='TCOM_TRUNKORDER';
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
#kill -9 234563
SQL> alter table prp_emp modify(ename varchar2(20));
Table altered