填坑指南:一次通过Oracle序列自增解决业务编号唯一的并发问题

本文介绍了如何使用Oracle序列解决并发环境下业务编号唯一性问题,避免了全表锁导致的系统故障。通过创建序列和存储过程,实现了每日编号重置,确保每日从1开始递增。并通过并发测试验证了方案的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 背景描述

某日上午生产上突然出现应用无法连接数据库,c3p0错误connect time out,重启应用后依然不见好转,经DBA检查发现存在对某张表的for update,以及其他业务操作对该表的update操作,且这些会话均长时间未释放,查看日志也发现这些sql语句执行时间有些甚至长达100多秒,后通过DBA 手工删除会话,释放连接后系统才恢复正常,导致此事故的是系统的某一个业务功能,但却因为这个不当操作导致系统全线业务瘫痪,由于此前该功能已经运行多日,却未发现异常。

  • 代码检查

这里先贴一段代码,由于代码是在前任挖坑离职后,我后面接过来的,大家自行体会。

这段代码目的是先锁住整表,然后查出主键的maxvalue,然后根据规则对maxvalue进行+1 ,然后进行insert操作,在没请求量,不对表做update操作的情况下,单次执行确实是没什么问题,但是问题就在这张表是业务表,是会对数据进行操作的,一旦加上存在并发,哪怕这个并发都不是秒级的,这种操作都是撑不住的,关键!做这个操作的表还不止一张!其中有几张还是比较核心的业务表,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值