oracle中表加锁死锁的现象、原因及解决方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了oracle中表加锁死锁的现象、原因及解决方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1607字,纯文字阅读大概需要3分钟。
内容图文
![oracle中表加锁死锁的现象、原因及解决方案](/upload/InfoBanner/zyjiaocheng/871/a5a73f79fd424bd3af3ea549b9780289.jpg)
一、表加锁、死锁出现的现象
1、对数据库操作update、insert、delete时候,数据库无法更新,操作等待时长,操作结果不发生改变; 2、在程序中,底层(数据访问层)操作时候不成功,数据库连接超时,无法操作,或者操作等待时长等现象。 加锁原理:如果一个操作在进行修改一表,它没完成,另一个操作也操作这张表时候就需要等待,前面操作结束之后才可进行操作。二、表加锁、导致死锁原因
1、可能在Oracle中可以有计时器,在频繁操作数据库update、insert、delete语句。
?2、可能在.net程序中使用到timer控件,频繁地操作数据库update、insert、delete语句。
3、可能使用到事务处理(Tran),没有提交事务(CommintTran)或者没有回滚事务(Rollback)
【注释】:在SqlServer数据库里面有一个隐式事务,关闭时候,每次修改插入都需要手动提交,不然就会导致死锁。
三、解决方案
步骤为: 1、执行下面SQL,先查看哪些表被锁住了: 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; ? 2、查处引起死锁的会话 ?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; ?这里会列出SID SELECT s.username, l.OBJECT_ID, l.SESSION_ID, s.SERIAL#,?l.ORACLE_USERNAME, l.OS_USER_NAME, l.PROCESS?FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;? ? 3、 查出SID和SERIAL#: 查V$SESSION视图: SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID'; 这一步将得到PADDR ? 4、查V$PROCESS视图: SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR'; 这一步得到SPID ? 5、杀掉进程 sid,serial#,这里的两个数是根据数据库查询得到的 alter system kill session'210,11562'; ? 参考:http://blog.sina.com.cn/s/blog_afe87e0d0101dcru.html ?内容总结
以上是互联网集市为您收集整理的oracle中表加锁死锁的现象、原因及解决方案全部内容,希望文章能够帮你解决oracle中表加锁死锁的现象、原因及解决方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。