oracle采用sequence自动生成主键 不连续问题

oracle采用sequence自动生成主键 第一天跟第二天插入的主键不连续 有谁遇到过这种问题 怎么解决呢

昨天插入的主键 值是1 到了今天第一次插入就跑到了21了

除了这张表的插入之外 没有其他的操作使用过这个sequence序列

--创建t_article表
create table t_article(
id number not null primary key,
title varchar2(200),
content clob,
source varchar2(255),
createtime date,
updatetime date,
deploytime date
)tablespace users;

--创建一个序列
create sequence article_seq
minvalue 1 maxvalue 99999999999999
increment by 1
start with 1;

0

2个回答

检查一下此序列的缓存大小Cache Size.把设置为1就好了。如果大于1,则每次访问的时候就会生成n个序列。如果这n个序列你又没有正好用完,所以你第二次访问的时候就不连续了

4
iteye_19243
iteye_19243 谢啦 默认是cache 10的 我直接改了nocache 搞定了
接近 7 年之前 回复

检查是否有触发器绑定

0
iteye_19243
iteye_19243 没有…直接使用的…知道怎么回事了…是缓存的问题…默认是cache 10 楼上正解
接近 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle自动生成主键不连续
写了个序列,并且在触发器中指定自动生成id,但是遇到了生成主键不连续的问题。表现在隔一段时间运行时,生成的主键不连续。 创建序列的语句如下: create sequence PROJECT_ID_GENERATE increment by 1 start with 0 nomaxvalue nocycle; 从论坛中得知,遇到上述问题有如下几种情况: 1.在这段时间内,
Oracle主键自增长及自动生成sequence
有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。 一、自增长主键 --首先建一个表TEST create table TEST (   NID int PRIMARY KEY,   test1 varchar2(20),   test2 varchar2(20),   test3 varchar2(20),   test4 varchar2(20),   te
oracle sequence 是否需要顺序?
The ORDER clause is a performance killer for sequences in Oracle RAC. This clause will guarantee that the NEXTVAL is in order from the previous value no matter which instance is asking for the next
hibernate oracle主键自增长中sequence跳号无序的问题
1. 配置序列产生器相关属性 hibernate注解设置数据库主键自增长时,如果Oracle表中的主键ID没有按照正常的sequence自增长(+1)存入数据库。可以在序列产生器中加上allocationSize(步长)属性的设置,即:在@SequenceGenerator中加入allocationSize = 1就可以了  例子如下: [html] view plain
数据库性能优化3——Oracle SEQUENCE的概念、作用以及创建(使得并发插入主键唯一)...
1. Oracle Sequence的概念 Oracle使用序列来生成唯一编号,而不是使用SQLServer所用的数据类型uniqueidentifier。无论是哪种情况,主要用途都是为主键列生成一系列唯一编号。与uniqueidentifier数据类型不同,序列是与将其用于主键值的一个或多个表无关的数据库对象。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Ora...
oracle的SequenceGenerator为主键Id自动产生的序列号不是按顺序生成的解决办法
方案一: 1、 @Entity @Table(name="SYS_CACHE_CODE") public class CacheCode implements java.io.Serializable { private static final long serialVersionUID = -3594133621971143851L; public static final Strin
insert时,使用sequence为表自动生成主键
插入数据时,使用sequence为表自动生成主键1.创建sequence  create   sequence   sequence_name     minvalue   1     maxvalue   99999999  start   with   1     increment  by 1     cache   202.建立触发器,使用sequence为表自动添加主键create or...
Hibernate学习-用oracle sequence序列生成ID的配置示例
TMP_EMP中的ID是根据序列SQ_TMP_EMP来生成的,需要在TmpEmp.hbm.xml中设置:              SQ_TMP_EMP          这样运行时,Hibernate就会自动从SQ_TMP_EMP中取nextval用来填充到ID字段中 示例代码: 先创建一个工具类 + View Code
sequence跳号问题以及相应知识拓展
SEQUENCE跳号可能是事务ROLLBAK或者实例被宕过或者是SEQUENCE的CACHE被交换出去过。第一个或者第二个解决方法比较难解决(可以从业务上来避免)。第三个对于有特殊要求的SEQUENCE或者包、存储过程、触发器等等,可以使用DBMS_SHARED_POOL.KEEP方法,把他们永久保留在SHARED POOL中,从而可以实现一些特定的用途。用SEQUENCE值来生成的主键经常出现断...
mybatis使用oracle自动生成主键
下面总结了两种方式,一种是使用oracle的sys_guid函数自动生成,另一种是使用sequence,  方法一:        select sys_guid() from dual     insert into T_STORE (STORE_ID, STORE_NAME, STORE_PRICE,CREATE_DATE,END_DATE      )    values ( #{stor
Oracle数据库主键自增的两种方式(SEQUENCE和触发器)
这种语句是mybatis 逆向工程中mapper.xml已经生成好了。除非自己写的mapper可以用,逆向工程的最好不要修改。所以要想使用不带指定id自增的语句,就选择触发器来实现自增。
高并发场景下oracle触发器+序列产生序号的一些现象与思考
最近工作上因为在处理系统同步的时候遇到了一些问题,在解决过程中,发现了一些现象,所以在这里mark一下,我现有的残缺理论体系还无法支撑做出合理的解释,在网上找了一下,也没有找到类似的案例,还望各位大拿指点一二。 话不多说,直接上案例,在pl/sql上做的模拟。 原始案例(故障): 1.先创建一个表test,三个字段id,name,sno create table test(id i
hibernate中使用oracle的序列作为主键问题
@Id @SequenceGenerator(name="gen",sequenceName="SEQ_ORDER_MAIN" ) @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="gen") @Column(name = "ID", unique = true, nullable = false)按照上面
数据库性能优化3——Oracle SEQUENCE的概念、作用以及创建(使得并发插入主键唯一)
1. Oracle Sequence的概念 Oracle 使用序列 来生成唯一编号,而不是使用 SQL Server 所用的数据类型 uniqueidentifier。无论是哪种情况,主要用途都是为主键列生成一系列唯一编号。与 uniqueidentifier 数据类型不同,序列是与将其用于主键值的一个或多个表无关的数据库对象。 Oracle 序列是原子对象,并且是一致的。也就是说,一旦您
Oracle 主键自增 Native Sequence两种方式
在hibernate中实现oracle的自动增长 http://kuangbaoxu.javaeye.com/blog/192434 关键字: hibernate oracle sequence native 根据hibernate的文档,有两种方式实现实体对象的主键自动增长。 第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个s
oracle中事务与sequence获取最新主键,批量insert冲突
读取excel内容做批量导入,使用mybatis中的foreach标签,其中把每一行的excel内容设置成一个bean,bean中的id用(select  sequence.nextval() from dual)得到,但是如果这个时候使用事务的话会造成冲突,无法连续得到id,这个时候要在mybatis中标签中加一个设置 useCache="false" flushCache="true"
RAC环境下的sequence详解(原创)
在RAC环境中,序列的Cache问题可能会对性能有着决定性的影响,缺省的序列Cache值为20,这对RAC环境远远不够。如果存在序列号使用的竞争,就可能在数据库中看到明显的队列等待:enq: SQ - contention在RAC情况下,可以将使用频繁的序列Cache值增加到10000,或者更高到50000,这些值在客户的环境中都有采用。这是RAC设置和RAC使用的基本常识,不可或忘。在以下测...
sequence跳号问题及解决办法
装载自:点击打开链接一、    问题及现象描述--创建序列CREATE SEQUENCE NYYTEST.S_TEST    STARTWITH 1    INCREMENTBY 1   NOMINVALUE    MAXVALUE10000   NOCYCLE   CACHE  20   NOORDERSQL> select S_TEST.nextval from dual;   NEXT...
用Mybatis在Oracle数据库中生成主键
        我们知道,mysql优化里面有一条:为每一张表都设置一个int类型的主键,它能够自增,方便分页和排序。         Oracle数据库中,它不支持主键自增,所以需要我们从序列中取得最新的序列值。         在Mybatis中,可以使用 selectKey标签,在执行SQL语句之前,为实体的ID属性赋值,然后再执行SQL。 <insert id="insert...
oracle中创建表主键id依据sequence自增长
oracle中创建表主键id依据sequence自增长
序列问题导致主键冲突
序列问题 create sequence BOSDATA.GET_PK_SEQ minvalue 1 maxvalue 999999999999999999999999999 start with 1001630254 increment by 1 cache 2000 cycle; select 'EAR' || to_char(sysdate,'YYYYMMDD')
oracle自增主键的添加[sequence](转)
1:一个sequence可以被多个表共享。 2:被多个表共享的sequence生成的数字序列始终连续,不会重新开始。 3:如果不再使用的sequence请删除。 SELECT * FROM DAYSBFJ.DAYS_CARD_UPDATE3 order by id asc --alter table DAYSBFJ.DAYS_CARD_UPDATE3 add source_Flag varc
分析oracle的sequence序列的跳号现象
从做Jforum项目以来,遇到一个很明显的现象,就是每个表的主键都出现跳号现象。具体表现在:当一次操作若干条数据时,自动增长的sequence序列总是从200的倍数开始增加,这次操作完成后,无论这时currentval是什么,隔段时间,总是又从下一个200的倍数开始了。比如说:一张表当前value是800,增加了3条记录,这时currentval应该是803。但是隔段时间以后,再次插入数据时,就从
JPA ID生成策略(转)
JPA ID生成策略 @Table Table用来定义entity主表的name,catalog,schema等属性。 属性说明: name:表名 catalog:对应关系数据库中的catalog schema:对应关系数据库中的schema UniqueConstraints:定义一个UniqueConstraint数组,指定需要建唯一约束的列.UniqueConstraint...
Oracle解决主键ID自增问题触发器序列--进阶篇
Oracle触发器解决插入时ID自增问题--进阶篇第一种 序列触发器自增第二种 直接用触发器自增ID 第一种 序列触发器自增 这个是流行的做法,废话不多说直接上码: --简单介绍一下序列参数的意思 CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1 ...
Oracle中sequences使用时发生主键冲突
转载自:http://www.itpub.net/thread-2068086-1-1.html 一,情况说明      最近现场生产环境,有十多个涉及序列的表,报主键冲突。      现场人员和公司开发人员,只是修改序列的当前值,修改完,开始好用,后来又报错。     开发人员:之前有部分功能用错序列,后来改正过来。这次确定不是用错序列,需要我们协助分析。     现场实施人员:
oracle的序列使用,创建、表中调用、主键自动生成
Oracle的序列原理是先根据需求建立个序列,然后在表insert数据时应用某个序列,因此序列是公用的。也就是说如果一个表用了一个序列,起始1递增1,如果已经递增使用到100,用另一个表也引用这个序列,那就是从100开始算了,也即是如果两张以上的表同时使用一个序列,那序列就不会安你所需的那样递增了。   1.0 例子中表名为asp_tmp,有字段id,name 主键为id #
Oracle建表,建序列,建触发器,自动生成唯一主键。dual解释
--根据数据库设计说明书创建表 --GOODS create table goods1 ( gid number(11) primary key, gname varchar2(20) not null unique, gprice number(18,1) not null, gnum number(11) not null ); --实现GOODS1表中主键自动生成(
oracle主键的自动生成
oracle数据库中不能设置主键自增,通过“序列sequence+触发器trigger”实现主键自增 1. 创建序列create sequence CHML_SEQUENCE --创建序列CHML_SEQUENCE minvalue 1 --最小值 maxvalue 99 --最大值 start with 1 --从1开始计数
Oracle Sequence 实现自增主键
由于Oracle不支持MySql的auto_increment,为了实现自动生成主键的操作在Oracle上,之前写了一篇文章是借助了 Oralce Sequence(序列)+ Oracle Trigger(触发器)来实现的:https://blog.csdn.net/libertine1993/article/details/54705928但是触发器不可靠且耗性能,于是有了这篇文章,我们利用序列...
Spring 主键序列获取
根据不同的主键产生方式,可能需要配置表名、主键字段名或序列名等信息。下面,我们以Oracle和MySql为例分别讲解使用序列及表字段产生主 键值的方式。   DataFieldMaxValueIncrementer接口定义了3个获取下一个主键值的方法:   l int nextIntValue():获取下一个主键值,主键数据类型为int;   l long nextLongVal...
hibernate 配置Oracle主键生成策略
@Id @Column(name="[id]") @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="seqhilo") @SequenceGenerator(sequenceName="userInfo_sequence", name = "seqhilo",allocationSize=1) private lon
序列作为主键使用的原理、优缺点讨论
这几天和同事一直在讨论关于表设计中主键选择的问题,用sequence作为主键究竟有什么好处,又有什么缺点,尤其是有些事务场景上下文需要用到创建的序列值,如何用?以下是总结摘要,如有疏漏,还请过路的各位大侠赐教。 1、首先说下seq.nextval主要有以下两种使用场景:(1). 如果一个事务中只是INSERT时需要序列,其他地方不会需要这个序列,那么只需要在INSERT ... VALUES (s
Oracle唯一主键ID的生成
一般常用的方法有两者,使用Sequence和使用SYS_GUID ();方法一: 1. 创建序列Sequence-- Create sequence create sequence SEQ_ID minvalue 1 maxvalue 99999999 start with 6106 increment by 1 cache 20 order; 2.insert into user(id,na
oracle批量插入,自增主键出现的问题。
两种oracle批量插入的实例。 oracle自增主键批量插入会出现错误. List categoryExpertGrades=new ArrayList(); CategoryExpertGrade c1=new CategoryExpertGrade(); CategoryExpertGrade c2=new CategoryExpertGrade()
guid跟sequence做主键的比较
转自:http://spiritfrog.iteye.com/blog/245816 今天上班,发现一个同事用oracle的sys_guid()来做从一个表中随机获取6条记录: select * from (select * from tablename order by sys_guid()) where rownum 看得出来是先创建guid,然后将表记录按照这个guid排序,再从中取
Spring boot 中 Mybatis Plus 在 Oracle 新增数据时,主键自增问题
解决办法: 1.spring boot 依赖版本改为 mybatis-plus-boot-starter 2.在配置文件中增加 #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: 1 #
关于oracle中的sequence断号问题
昨日在调试程序时,发现oracle中利用sequence生成的id有断号问题,经查证,发现是因为sequence有cache的原因,在创建序列时,缺省时20个,即一次生成20个序列号,如果此时第二个数据库连接连接后,并请求序列的话,将从第21个开始生成21-40的序号。如果这两个连接中的某一个连接断开,则不用的序列将被废弃不用了。所以出现断号问题。解决方案是:加上关键字nocache,即不使用
MyBatis 3 自动生成 主键 针对不同的数据库(oracle/sqlserver/mysql)
MyBatis自动生成的主键很多数据库支持自动生成主键的数据类型。不过这通常(并不总是)是个私有的特性。SQL Map 通过的子元素来支持自动生成的键值。它同时支持预生成(如Oracle)和后生成两种类型(如 MS-SQL Server MySQL)。 一、Oracle设置 insert id="saveUserInfo" parameterType="UserInfo">
oracle 自增序列实现 可作为主键
好记性不如烂笔头   记录如何建立oracle 自增序列
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据分析采用的基础技术 大数据采用的基础技术