Oracle数据库SEQUENCE溢出异常预防测试

本文探讨了Oracle数据库中序列号溢出可能导致的问题,包括ID变为负数、保存错误和空指针异常。介绍了测试方法,如设置不同序列参数并检查其行为,并提出在系统设计中需要注意序列的最大值、初始值以及类型转换,以避免潜在风险。同时,列举了一系列测试案例以确保序列的健壮性。
摘要由CSDN通过智能技术生成

      在系统实现中,经常需要用到序列号来记录操作执行的顺序或者打印时间戳等。因为序列号等我们只取正值,所以一般都使用无符号数以表示更大的范围。虽然一般的32位或者64位无符号数表示的范围很大,甚至可以确保在系统的生命周期内都不会用完,但是作为一个健壮的系统还是需要考虑无符号数达到最大后,重新归零的溢出问题。

事件背景:

      数据库在sequence没有超过INTEGER类型上限时,系统程序代码中那些错误的和无意义的类型转换、实体类和BEAN用INTEGER类型作为主键的情况是不会引起错误的,一旦超过INTEGER类型上限时,这些场景下就会发生ID变成负数的情况,从而发生保存到数据库中的外键是负数或者根据ID查询不到数据继而产生空指针异常!

测试方法:

     1.  删除原有HIBERNATE_SEQUENCE

      2.  重新创建HIBERNATE_SEQUENCE        

          CREATE SEQUENCE HIBERNATE_SEQUENCE

          INCREMENT BY 1

          START WITH 999999999999999999

          NOMAXVALUE

          NOCYCLE

          CACHE 20;

          在创建的初始值为18位9的前提下,数据可插入上千条没有问题;

      3.  再次重新创建HIBERNATE_SEQUENCE        

          CREATE SEQUENCE HIBERNATE_SEQUENCE

          INCREMENT BY 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗涧幽火

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值