我想请教一下在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.   

    第一个问题
    再也读取不到1052这个值了,你可以在plsql里面测试
    select TESTSQC.NextVal from dual; 连续这样几次,你就看得出来了第二个问题没有试过?
      

  2.   

    给你回复了
    http://topic.csdn.net/u/20090306/14/142fd517-2ca2-4654-8960-c17a6da68c5a.html
      

  3.   

    1.nextval肯定是1053,currval是1052
    2.nextval肯定是1120,currval我想应该也是1052
      

  4.   

    sequence 不能回滚.
    cache N 只在预先放在缓冲区的个数,默认为20!不会对sequence的事务特性有影响!
    所以
    1.nextval是1053,currval是1052 
    2.nextval是1053,currval是1052 
      

  5.   

    不知道楼上的兄弟门试过没有,我同意lpc19598188,想让sequence连号好像是没有办法控制的.而且也没有什么意义.
      

  6.   


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

  7.   


    1,不是是1053,没有cache,那么这个号没有回滚段,也不记录到回滚表空间里面。所以直接nextval的话就是1053!2,理论上是1120,因为你cache了,所以你的1020到1119这些记录已经预先以脏数据的形式放到回滚段里,记录在回滚表空间里面了,所以重启数据库之后,会取到1120这个号,而从这个号开始算起。---------------------------
    若有说的不当之处,欢迎大家斧正!
      

  8.   

    to 别哥:回滾段存储是在磁盘上,不是内存,sequence  cache到内存的目的就是避免减少访问磁盘修改sequence的值的次数
      

  9.   


    当分配到1020的时候,磁盘上sequence的值已经被修改成1119了(cache100个),这提前100个取出来的值就放在内存中,在使用的时候直接从内存中取出来就行,当用完这100个号的时候,才会考虑重新取100个号放到内存中,每100个号才更新一次磁盘上sequence的值,一次加100,这就是为什么能够通过cache提高效率;如果你所说,sequence不存在回滚的问题(circle类型的sequence的号会循环重新开始除外),那么放在undo segment里面有什么作用呢?sequence存储在system表空间,不管是否断电,system表空间都是在磁盘上的,不会因为掉电而丢失(磁盘损坏或者system表空间的数据文件被删除等等除外)
      

  10.   

    to :xiaoxiao1984 如当分配到1020用完后,又取出了100个序号后,后来只用了50个序号,比如用到1070号;
    然后重新启动电脑,那么下次重启动电脑时是从1071开始还是从1120开始?
      

  11.   


    看重新启动电脑前,数据库的关闭方式shutdown normal/immediate 等正常关闭方式,从1071开始shutdown abort 等不正常关闭方式,从1120开始;取决于shared_pool里面的值写回磁盘了没有