专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

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

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

 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

文章永久链接:https://tech.souyunku.com/45863

未经允许不得转载:搜云库技术团队 » Oracle中表加锁死锁的现象、原因及解决方案

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们