昨天加班,没写文章,感觉有点不自在呀~
遇到一个PLSQL锁表问题,
以前遇到过,没做记录,
再次遇到又查相关语句,甚是不便,
正好在此做个记录,留个印象,
有人需要直接拿走,自己也权当做个备份-.-
1.表被锁现象
某次执行for update语句,执行时间很长,多次尝试无果,
联想出现该现象之前,有做过多次改表或相关不当操作~
前台执行修改,后台数据不变,
基本可判断,改表被锁。
2.如何确定并查看被锁表?
执行下列语句,可查出相关被锁表:
select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id;
3.哪个session引起的?
执行下列语句,可查出由哪些session导致:
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;
4.如何解锁?
根据上一步查出的session,杀掉相关进程即可解锁:
执行命令:
alter system kill session'XXX,YYY';
其中XXX为sid,YYY为serial#
此时,再次执行相关表 for update语句,
问题应该已经解决~