专栏首页杨建荣的学习笔记关于sequence问题的紧急处理(r2第26天)

关于sequence问题的紧急处理(r2第26天)

今天早上收到邮件,说有一个很紧急的问题,是关于sequence的。 错误日志里面还有ORA的错误 ----- ... 7 more Caused by: java.sql.SQLException: ORA-08004: sequence TRX_1SQ.NEXTVAL exceeds MAXVALUE and cannot be instantiated 猛一看就是sequence的值越界了。 导致这个问题的原因主要有两个: 1)设置的maxvalue值过小了。 2)sequence的cycle模式没有启用 从库里查看sequence的状态。

SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- ------------ - - ---------- -----------
   TRX_1SQ                             1  999999999            1 N N        100  1000000000

从上面的结果可以看出,sequence的cycle模式没有启用,sequence值越界了。 修复问题可以有两种思路。就是设置maxvalue,或者选择开启cycle模式。 先来看看设置maxvalue,问题就来了,需要设置多大,这个得找开发确认,而开发也不确定最大能设置多大。问题又跑到了dba这边, 关于maxvalue的值,官方文档是这么描述的。最大28位。 MAXVALUE Specify the maximum value the sequence can generate. This integer value can have 28 or fewer digits. MAXVALUE must be equal to or greater than START WITH and must be greater than MINVALUE.

有了这个思路,貌似问题简单了很多。从数据库层面来说似乎行得通了,设置一个最大值即可。从业务上是不是支持更大的数值呢,这个看似需要开发来确认,但是和dba也是有一些关联的,我找到sequence相关的表,大概有5张左右的表使用了那个sequence, 查看对应的表列,可以看到有些字段是支持的,有些字段却是NUMBER(9),很明显设置maxvalue会带来更多的问题。 因为相关的几个表都是核心表,如果修改表的精度也是有潜在风险的。 这个时候就需要找开发确认,是不是应该开启cycle模式,对于现有数据是否有影响了。很快得到产品线的回馈,有同样一个问题在别的项目发生过,需要开发cycle模式。 对于dba来说,需要做的工作基本就是测试和验证了。 从生产备份库中使用dbms_metadata.get_ddl得到sequence的创建语句

SQL> CREATE SEQUENCE  "TRX_1SQ"  MINVALUE 1 MAXVALUE 999999999 INCREMENT BY 1 START WITH 1000000000 CACHE 100 NOORDER  NOCYCLE
    /
Sequence created.

--复现问题

SQL> select trx_1sq.nextval from dual;
select csm_trx_1sq.nextval from dual
       *
ERROR at line 1:
ORA-08004: sequence CSM_TRX_1SQ.NEXTVAL exceeds MAXVALUE and cannot be
instantiated

--修复问题

SQL> alter sequence CSM_TRX_1SQ cycle;
Sequence altered.

--验证问题

SQL> select csm_trx_1sq.nextval from dual;
   NEXTVAL
----------
         1
SQL> /
   NEXTVAL
----------
         2
SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- ------------ - - ---------- -----------
    TRX_1SQ                             1  999999999            1 Y N        100         101

当然了,如果要设置maxvalue的话。有一个细节需要注意的。 如果设置为28位,最高位是没有问题的。 SQL> alter sequence csm_trx_1sq maxvalue 9999999999999999999999999999; Sequence altered. SQL> select *from user_sequences where sequence_name='TRX_1SQ'; SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- TRX_1SQ 1 1.0000E+28 1 Y N 100 3

但是如果你设置了30位,也是不会报错的,提示运行成功。但是查看sequence的最大长度,却还是28位。 SQL> alter sequence csm_trx_1sq maxvalue 999999999999999999999999999999; Sequence altered. SQL> select *from user_sequences where sequence_name='CSM_TRX_1SQ'; SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- TRX_1SQ 1 1.0000E+28 1 Y N 100 3

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:r2第26天

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于导入导出sequence(r4笔记第11天)

    sequence在平时的工作中是一个默默无闻的角色。可能创建好之后很少会去修改它,它就在默默地自增长。直到一些特殊的原因导致sequence出现问题,比如提供了...

    jeanron100
  • 生产环境sql语句调优实战第六篇(r2笔记91天)

    生产环境中有大量的sql语句在运行,尽管有awr,ash做数据的收集统计,但是dba的调优工作大多数情况都是在问题已经发生后做排查的,有些sql语句可能执行的时...

    jeanron100
  • MySQL中GTID和自增列的数据测试(r12笔记第38天)

    昨天的一篇文章MySQL自增列主从不一致的测试(r12笔记第37天),今天有不少网友向我确认一些细节,我想最近正好在看GTID的东西,可以揉在一起来说说。 ...

    jeanron100
  • centOS 如何安装 lnmp 环境

    魏艾斯博客www.vpsss.net
  • 尽管领袖被捕,Cobalt 黑客组织仍然活跃

    俄罗斯安全公司 Group-IB 近期发现,专门窃取银行和金融机构资金的 Cobalt 黑客组织仍然活跃,尽管其领导人于两个月前在西班牙被捕,但其成员仍在继续针...

    周俊辉
  • Windows 2012配置故障转移(For SQLServer 2014 AlwaysOn)

    单击”管理”菜单,选择”添加角色和功能” 单击”下一步”,选择”基于角色或基于功能的安装”,单击”下一步” 选择本地服务器,单击”下一步”,直到功能模块...

    Leshami
  • MIT 深度学习导论来啦!附视频下载

    相信很多同学读过MIT的《算法导论》(Introduction to Algorithms)这本书,虽称“导论”,但其内容还是很丰富的。

    CV君
  • 利用proguard对java web工程代码混淆

    混淆jar的工具:proguard5.1  下载地址:http://download.csdn.net/detail/lk7688535/9625472 反编...

    庞小明
  • Python线程Event例子

    py3study
  • 一份不合格的12页白皮书,竟能带动一夜暴涨40倍至280亿美金的市值?被蔡文胜辟谣的美链背后有何蹊跷?

    区块链大本营

扫码关注云+社区

领取腾讯云代金券