生产服务升级的时候,需要修改表字段。报ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效的错误。
试着停掉批处理的服务,执行还是报错。
查了一下是由于有其他用户正在执行DDL操作,处于锁表状态。执行:
select sid, serial#, username, osuser from v$session where sid in(select session_id from v$locked_object);
查到被锁的sid和serial#,一共14条,单条解锁:
ALTER system KILL session'sid,serial';
需要执行14遍,有点麻烦。又找了一下,批量解锁的语句:
select a.object_name,b.session_id,c.serial#,'alter system kill session '''||b.session_id||','||c.serial#||'''; ' as a,c.program,c.username,c.command,c.machine,c.lockwait
from all_objects a,v$locked_object b,v$session c where a.object_id=b.object_id and c.sid=b.session_id;