EBS_DBA_问题:主键insert引起的死锁

今天业务用户发现问题,有一批请求一直在运行状态,
 
 
 
 
 
初步判断是由死锁引起的,于是查看一下锁的状态:
发现:
Insert Into Qgl_Docnum
  (Ledger_Id,
   Legal_Entity,
   Period_Name,
   Period_Num,
   Je_Source,
   Je_Category,
   Max_Doc_Number)
Values
  (:B1, :B7, :B2, :B6 || :B5, :B3, :B4, 0)
是由这一段sql引起的,
然后看这张表的表结构,发现主键为:
 
 
询问开发人员,发现开发人员动了测试环境该表的表结构,并且主键发生了变动:
 
LEDGER_ID, LEGAL_ENTITY, PERIOD_NAME,Je_Source,Je_Category
 
然后解决问题的思路:
将测试环境的表1(测试)备份为表2,将生产环境的表1(生产)复制到测试环境表3(测试),
 
 
问题原因:
1 insert不会造成死锁
2 oracle会自动处理死锁
3 大量insert时,建议分批提交
 
insert我看文章说也会发生锁,唯一情况是在有主键的表上,且两条insert语句主键相同时发生
 
我感觉如果两个session同时插一个主键,应该是不会冲突,因为谁先用谁就可以占用主键。

如果两个session每个都插入一批再提交,也许会主键冲突,比如
比如session a用主键1,2
session b用主键2,1
 
 
 
 
 
 
posted @ 2016-10-09 09:23  BIT10  阅读(384)  评论(0编辑  收藏  举报