简单的sql语句执行很久没反应,数据库表锁死
今天在update一条数据的时候,一条最简单的sql如下:
update t_role r
set r.status = 0
where r.id = 'xxxxxxxx'
就这么一条sql死活就“正在执行”。。。。。
还是找度娘找到解决方案,原来是表被锁死了。
解决方案如下:
-
查看锁表进程SQL语句
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid; -
杀掉锁表进程:
如有记录则表示有lock,记录下SID和serial# ,将记录的SID替换下面的?号,即可解除LOCK
alter system kill session ‘?,?’;