关闭

解决锁表问题

183人阅读 评论(0) 收藏 举报
由于多次使用for uptate使得数据库表被锁,解决方法如下:
---锁表查询的代码有以下形式
select count(*) from v$locked_object;
select * from v$locked_object;
--查看哪个表被锁
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;
--查看是哪个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;
--查看是哪个sql引起的
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id=b_sid
and b.SQL_ID=c.SQL_ID and c.SQL_ID='' order by b.logon.time;

--杀掉对应的进程
alter system kill session '389,5145';
alter system kill session '772,1385';
alter system kill session '589,1419';
alter system kill session '589,1419';
alter system kill session '1352,3435';
alter system kill session '1352,3435';
alter system kill session '1163,859';
alter system kill session '1163,859';

为了避免表再次被锁,通常尽量少的使用for update。可以使用select  t.rowid,t.* from hgjksdr t ;
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6834次
    • 积分:291
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档