ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

oracle中表加锁死锁的现象、原因及解决方案

2020-08-14 21:33:07  阅读:290  来源: 互联网

标签:加锁 数据库 object 中表 死锁 SESSION SID 操作


一、表加锁、死锁出现的现象

 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  

标签:加锁,数据库,object,中表,死锁,SESSION,SID,操作
来源: https://www.cnblogs.com/liuxiaochong/p/13496803.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有