我想请教一下在sequence操作过程中发生掉电后,恢复是如何做的,两个例子:1.CREATE SEQUENCE TESTSQC START WITH 0 INCREMENT BY 1 MINVALUE 0 MAXVALUE 10000 CYCLE
这种情况下,没有指定cache值,如果当前通过NextVal读到值为1052的时候发生了突然掉电情况,那么在下次数据库系统恢复时,能够保证通过CurrVal获得的掉电后第一个sequence值为1052吗? 2.CREATE SEQUENCE TESTSQC START WITH 20 INCREMENT BY 1 MINVALUE 20 MAXVALUE 10000 CACHE 100 CYCLE
这种情况下,指定了cache值100, 如果通过NextVal读到值为1052的时候发生了突然掉电情况,那么在下次数据库系统恢复时,通过CurrVal获得的掉电后第一个sequence值应该是多少呢?请高人指点一下,不慎感激!

解决方案 »

  1.   

    不慎感激 = 不小心感谢了一下? 
    呵呵仅仅用sequence,就算不cache, 想要不跳号也有困难,
    比如你应用了一个事务,但是事务回退了,
    那条记录没有了,而sequence跳过去了楼主可以尝试通过其它的方式来做,
    比如把所有的序号写进一个表里,每次使用时读这个表,要是有跳号的,就补起来
      

  2.   


    同意啊,这个跟sqlserver里面的自增列是一样的,这个序号连续不连续只是一个标识而已,不是内存地址的连续!只要是往上自增的,对于数据库的查询排列来说,已经是最好的效率保障了!
      

  3.   

    1. 下一个是1053,在使用nextval之前使用currval没有值,返回错误2.  下一个是1120, 因为初始值20,cache100,那么在读取到1020的时候就已经把1020到1119之间100个值cache到内存中了,1052是直接从内存中取出的,这个时候掉电,重启后会从1120开始