oracl数据表造成死锁,解决方法

    今天早上查看数据表的时候发现,数据表中多了一条数据(这条数据不应该存在),像往常一样用delete where语句删除这条语句,中间卡了一下,然后一直显示正在执行中

先前也遇到过类似的情况,但是那时是因为,我删除数据没有提交事务,这次不一样,删除不了,一直卡在这里,点击取消后,有没有事务的提交与回滚。开始怀疑是因为其它的人正在操作了这张数据表,造成了琐表,就等了一段时间,后来发现还是这样的情况,没办法只好百度找解决办法,问题来了到底是琐表造成的原因,还是另有其它的原因呢?出现这种情况,大致可以分为几种:

1.因为数据量过大,造成数据删除缓慢

2.sql语句使用了for update,没有提交事务

3.其它的人正在操作这张数据表,造成琐表

排除1,2,解决办法找到琐表原因,结束进程。

一下来自百度-----------------------------

解决办法

 

-- 查出被锁的表,和锁住这个表的会话ID

select a.session_id ,b.* from v$locked_object a,all_objects b
where a.object_id=b.object_id

 

 

 

-- 查出对应的SQL语句

select vs.SQL_TEXT,vsess.sid,vsess.SERIAL#,vsess.MACHINE,vsess.OSUSER
,vsess.TERMINAL,vsess.PROGRAM,vs.CPU_TIME,vs.DISK_READS
from v$sql vs,v$session vsess
where vs.ADDRESS=vsess.SQL_ADDRESS
and vsess.sid=(上面查出来的会话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; 

 

 

--杀进程

ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';  ---上面这条语句可以查到sid以及serial

 

ok,现在问题搞定了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值