-- Create sequence 
create sequence ORA_SEQ
minvalue 100000000000
maxvalue 999999999999
start with 100000000260
increment by 1
cache 20
order;我在java程序中执行以下代码:
SELECT ORA_SEQ.NEXTVAL FROM DUAL
然后将取出来的号insert 到 user表中,为什么会出现跳号的问题?
有时候会跳20,有时候会跳6 ......
不知道是oracle自己跳号,还是程序中抛异常,导致系列号没有insert
求解:
oracle 在什么时候会跳号?麻烦详解,列举写例子!!!

解决方案 »

  1.   

    1) cache 20 内存缓存的序号,如果异常关闭服务,会遗失.
    2) JAVA程序设计的原因.
      

  2.   

    sequence 因回滚,系统崩溃(使用cache 内的值将认为已用),多表引用都将使其跳号,所以不能用于为连续序号utl_row.cast_to_row
      

  3.   

    嗯,cache的问题吧,用nocache试试吧
      

  4.   

    选用nocache的模式,不要设置cache 20  这句,
    像你这种情况,是每次都会取出20个,如果还没用完你就关闭了数据库,那么下次也不会接着用,而是会重新再取20个。这时就会出现你说的这种情况。如果你想要连续的id,还是自己维护一个表来的安稳。
      

  5.   

    问题出在设置了cache 20,数据库关闭时这20个序列成员会丢失,造成序列不连续的现象。
    序列设置nocache模式即可。
      

  6.   

    跳号如果不影响你的业务,就没关系,cache还是要的.如果不要的话,就会引起竞争了.
      

  7.   

    加noche参数即可.oracle中cache默认为20.sequence只增不减(除非循环和重建),不管语句是否成功.想要连号,还是自己通过一个counter表进行控制吧,但要注意对该表进行更新时要锁表,即注意并发性.