Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3127634
  • 博文数量: 206
  • 博客积分: 3409
  • 博客等级: 中校
  • 技术积分: 4066
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-24 10:21
个人简介

● ITPUB名人堂嘉宾 ● ChinaUnix社区博客专家 ● ChinaUnix社区Oracle板块版主 ● 优酷网认证音乐牛人:EricGuitar ● SDOUG 核心成员 ●E-mail:gaoqiangdba@163.com

文章分类

全部博文(206)

文章存档

2021年(11)

2020年(7)

2019年(7)

2016年(5)

2015年(36)

2014年(23)

2013年(15)

2012年(23)

2011年(61)

2010年(18)

分类: Oracle

2020-04-26 20:06:55

在项目中,发现在同事编写存储过程导致分布式锁超时的报错,报错的内容:
ORA-02049: timeout: distributed transaction waiting for lock.


原因是在调整存储过程的时候,由于少复制了最后的commit语句,导致了同时对同一张表操作的另一个语句(通过db-link连接过来的)需要等待该表上的锁释放。


对于分布式锁的超时的定义,官方有以下描述:
DISTRIBUTED_LOCK_TIMEOUT:specifies the amount of time (in seconds) for distributed transactions to wait for locked resources.
该参数等于分布式锁超时的时间,超过这个时间事务一般会自动回滚。该值如果为60,则代表默认等待时间是60秒,超过60秒之后会回滚事务。


从本次操作过程来看,表面上是commit漏写导致了问题,实际上引申出了事务对于表对象的影响和规范行问题,总结如下:
1、建议在编写存储过程的时候,尽量使用短事务。
2、代码审核要认真仔细。
3、如果有条件,可以使用审核平台等工具,用软件进行审核有助于保证SQL语句审核质量的稳定性。
阅读(3074) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~