关于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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME

--=============================================================

443
来自专栏杨建荣的学习笔记

闪回原理测试(二)(r11笔记第23天)

对于闪回部分,Oracle本身提供了非常多相关的特性,我个人对于闪回数据库这个特性最为喜爱,尤其是应用再Data Guard环境中,真是一大杀器。 ...

34410
来自专栏Jackson0714

【T-SQL性能优化】01.TempDB的使用和性能问题

1392
来自专栏Jerry的SAP技术分享

使用ABAP代码返回S/4HANA Material上维护的Attachment明细

1443
来自专栏数据库新发现

如何查询redo logfile的使用率

redo logfile的使用,不能通过v$视图查询,但是我们可以通过底层视图得到.

362
来自专栏Hongten

SQL 语句大全

1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备...

392
来自专栏杨建荣的学习笔记

redo日志文件学习(22天)

关于redo日志文件,今天因为要做redo日志的在线迁移,所以特意做了个简单的总结。 1. 如果要把redo的切换信息显示到alert日志中,需要设置个参数。...

3325
来自专栏杨建荣的学习笔记

一天内碰到的3个rac节点问题 (r6笔记第36天)

说到问题,真是层出不穷,自己也算搭建了也不少的rac环境的,但是在本地试验的时候总是会碰到一些问题,昨晚铲掉旧环境,搭建了两遍rac环境,终于在凌晨搭建好了环境...

3117
来自专栏杨建荣的学习笔记

RAC 单节点报ora-1105 ora-01606的解决

最近自己搭了一套 11g rac的环境,基于redhat 6, 11g 用了11.2.0.3.0的cluster和db的安装包。 共享存储基于nfs,没有用as...

36110
来自专栏一枝花算不算浪漫

Java应用集群下的定时任务处理方案(mysql)

4158

扫描关注云+社区