1、查询被锁的资源,比如出现这样的报错,是资源被锁住了。
-54,ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
使用下面语句查询被锁的资源:
SELECT B.OWNER TABLEOWNER,
B.OBJECT_NAME TABLENAME,
C.OSUSER LOCKBY,
C.USERNAME LOGINID,
C.SID SID,
C.SERIAL# SERIAL
FROM V$LOCKED_OBJECT A, DBA_OBJECTS B, V$SESSION C
WHERE B.OBJECT_ID = A.OBJECT_ID
AND A.SESSION_ID = C.SID;
根据上面查到的sid、serial#,使用下面语句kill掉session。
alter system kill session 'sid,serial#';
比如ALTER SYSTEM KILL SESSION '133,47586';
2、拼接出kill session字符串。
select 'alter system kill session '''||s.sid||','||s.serial#||''';' from v$locked_object l, v$session s where l.SESSION_ID=s.SID;