当前位置: 代码迷 >> Java Web开发 >> 应用程序什么情况下会造成oracle死锁,怎么解决
  详细解决方案

应用程序什么情况下会造成oracle死锁,怎么解决

热度:108   发布时间:2016-04-13 22:31:14.0
应用程序什么情况下会造成oracle死锁,如何解决?
oracle死锁我理解就是两个用户操作同一张表,一个用户修改了,还没有提交,另一个用户也去修改了,会造成等待。
由于没有高并发经验,还真不太清楚实际环境中,什么情况会出现死锁,出现了,怎么解决,以后怎么避免?
假如一个定时程序批量插入一张表,需要一个小时,这时其他用户来访问这张表了怎么办?
求指点,谢谢!!!
------解决思路----------------------
引用:
不同的事务同一时间操作同一张表的同一条记录的时候会造成死锁。

解锁语句
select object_name 对象名称,machine as 主机,
s.program 程序,s.sid,s.serial#,p.spid as OS进程号
from v$locked_object l,dba_objects o ,v$session s ,v$process p
where l.object_id=o.object_id
and l.session_id=s.sid
and s.paddr=p.addr;

ALTER SYSTEM KILL SESSION '1377,4392' --依次填入SID和SERIAL#解锁

1 使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务; (细化处理逻辑,执行一段逻辑后便回滚或者提交,然后再执行其它逻辑,直到事物执行完毕提交)
2 设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂; 
同一时间操作同一张表的同一条记录,同一条记录,同一条记录,重要的事情要说三遍
------解决思路----------------------
引用:
假如一个定时程序批量插入一张表,需要一个小时,这时其他用户来访问这张表了怎么办?


数据库的锁有表锁,和行锁。插入表,是锁定新插入的行。

其它用户“访问”分集中情况:增加,删除,修改,查询。
增加:如过表上有唯一约束,需要等前面的事务完成好才能提交事务。否则无需等待事务。
删除:无需等待前面事务提交。(但是前面插入的数据还没有提交,读取不到也无法删除)
修改:无需等待前面事务提交。(但是前面插入的数据还没有提交,读取不到也无法修改)
查询:无需等待事务。(查询不到未提交的数据)
  相关解决方案