建了一个序列,如下:
-- Create sequence 
create sequence CDR_DATA_SEQ
minvalue 1
maxvalue 9999
start with 1001
increment by 1
cache 1000
cycle;现在,登录sqlplus执行:select cdr_data_seq.nextval from dual;
得出值为1001,再次执行,得出1002,正常。
退出sqlplus后,注销主机,再次登录执行取序列号,结果为:
2001,2002(注,这个是主机上一个文件的序列号,有的时候还是好的,有的时候每次取出的值直接跳了1000,刚好等于cache值,使得大量文件名字重复,不得其解。)我在oracle上测试了其他序列号,不会有出现这种情况,感觉很诡异,求达人释疑,不甚感激!

解决方案 »

  1.   


    我想应该是cache的问题,但是不知道是什么问题。因为
    1、内容相同的其他的几个序列号,不会有这个问题。
    2、同一个序列号,在不同的oracle实例上,测试结果不同。不知道oracle是怎么实现这个序列号的?????
      

  2.   

    官方文档中对于cache的注释:
    Specify how many values of the sequence the database preallocates and keeps in memory for faster access.当指定了cache参数时(没指定时默认为20),每次取序列值时oracle会一次性指定数量的序列放到内存中以加快读取速度。当内存中缓存的序列丢失,比如刷新共享池、关闭数据库等,会造成跳号
    可以指定nocache来避免