定义了一个sequence如下:MAXVALUE 90000000, MINVALUE 70000000,CYCLE, CACHE 100, NOORDER;在实际使用一段时间后,发现该sequence 的last_number的最后两位为非0和1的数值,如46,根据之前所知,last_number的数值取决于cache和last_number本身,那么如果每次都是以100个序号为一批提取的话,last_number的最后两位应该始终是01,但如今为何出现其它数值呢?注:该sequence已经历了一次到顶后的循环,其所在的数据库在期间也曾经历过正常关闭和启动。谢谢!

解决方案 »

  1.   

    MAXVALUE 90000000, MINVALUE 70000000
    那么包含  20000001个值.没循环一次cache里的最大value就减1.
    第一次99
    第二次98
    ...
      

  2.   


    CREATE SEQUENCE test_seq
    START WITH 70000000
    INCREMENT BY 1
    MAXVALUE 90000000
    NOCYCLE
    CACHE 100;
      这个意思吗
      

  3.   

    “MAXVALUE 90000000, MINVALUE 70000000
    那么包含 20000001个值.没循环一次cache里的最大value就减1.
    第一次99
    第二次98
    ...

    没明白你的解释,你是指每循环一次,所能用到的序号总数就少1?我测试过一个小范围的循环sequence,从10到50,cache为10,多次循环后,last_number的末尾都是0,没有出现其它数值
      

  4.   

    测试了下,从处理机制讲,没道理出现46.
    oracle是按照cache截取sequence的.比如sequence长度为21,从10到30,cache为10.未使用时,        last_number=10
    第一次截取,10-19,last_number=20
    第二次截取,20-29,last_number=30
    第三次截取,30   ,last_number=31
    第四次截取,10-19,last_number=10
    -----以下循环.