-- Create sequence 
create sequence SEQ_****
minvalue 10000001
maxvalue 99999999
start with 10000001
increment by 1
cache 20;测试环境还好  没发现跳号,
但是在生产环境居然跳号了。
无奈改成cache 5;
很不解其中原因, 都想nocache了。测试环境没有负载均衡,生产有  莫非有关系?

解决方案 »

  1.   

    客户端每次请求都跳号,每次跳cache那么多
      

  2.   

    -- 想要用序列实现字段递增且不跳号,唯一的方法是nocache! 但是这会影响插入速度!
      

  3.   

    会不会请求了sequence的序号但是使用时插入出错,所以导致跳号?
    未必是sequence造成的,检查下自己的程序逻辑.
      

  4.   

    那检查下有没有其他地方引用该sequence?
      

  5.   

    -- 查看有哪些对象引用了这个序列(当然:如果你是直接写的SQL代码的话,就只能查看代码啦)
    -- 而我一般是用存储过程插入数据,在存储过程中引用这个序列(每次取序列的下一个值...)music@SZTYORA> select name, type,
      2         referenced_name, referenced_type
      3  from   user_dependencies
      4  where referenced_name=upper('musicLogUser_seq');NAME                           TYPE            REFERENCED_NAME                REFERENCED_TYPE
    ------------------------------ --------------- ------------------------------ ------------------------------
    MUSICLOGUSER_INS_PROC          PROCEDURE       MUSICLOGUSER_SEQ               SEQUENCE
      

  6.   

    应该没有的,程序中只有一个地方引用,负载均衡是不是相当多处引用了呢?
    也不对啊  数据库中还有很多sequence、虽然也跳号 但都是极少情况才跳的。
    我也是闲下来才想这个问题。。
      

  7.   


    要么是其他地方调用此sequence,否则不会乱跳号的
      

  8.   

    cache的解释,cache 20 就是一次拿20个数据放在内存连绵,用的话从内存中取,如果没有取完。但是突然关机,清内存这样的操作会把这些数据清掉,如果还要用这个序列,就要重新再拿20个数据放到内存,跳号的原意应该是cache的问题。
      

  9.   

    cache的解释,cache 20 就是一次拿20个数据放在内存中,用的话从内存中取,如果没有取完。但是突然关机,清内存这样的操作会把这些数据清掉,如果还要用这个序列,就要重新再拿20个数据放到内存,跳号的原因应该是cache的问题。
      

  10.   

    每次重启oracle服务都会重新取cache个数目到cache中,你可以设置sequence为no cache来解决这个问题