ITPub博客

首页 > 数据库 > Oracle > oracle 11.2.0.4 sequence之dba_sequences last_number含义测试之一

oracle 11.2.0.4 sequence之dba_sequences last_number含义测试之一

原创 Oracle 作者:wisdomone1 时间:2017-06-23 20:35:52 0 删除 编辑
测试结论
1,查看dba_sequences之last_number含义
Last sequence number written to disk. If a sequence uses caching, the number written to disk is the last number placed in the sequence cache. 
This number is likely to be greater than the last sequence number that was used.


a,last_number为写入到磁盘的最后的序列值
b,如果序列使用cache,last_number为存储在CACHE中最大或最后的序列值
c,last_number的值很可能会大于已使用序列的最后的值




2,可见只要序列的当前值sequence_name.currval不超过last_number,则LAST_NUMBER不会发生变化




测试明细


1,数据库版本
SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


2,dba_sequences官方定义
SQL> desc dba_sequences;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SEQUENCE_OWNER                            NOT NULL VARCHAR2(30)
 SEQUENCE_NAME                             NOT NULL VARCHAR2(30)
 MIN_VALUE                                          NUMBER
 MAX_VALUE                                          NUMBER
 INCREMENT_BY                              NOT NULL NUMBER
 CYCLE_FLAG                                         VARCHAR2(1)
 ORDER_FLAG                                         VARCHAR2(1)
 CACHE_SIZE                                NOT NULL NUMBER
 LAST_NUMBER                               NOT NULL NUMBER


3,创建序列
SQL> create sequence seq_zxy;


Sequence created.


4,查看刚创建的序列信息,可见last_number为1
SQL> select sequence_owner,sequence_name,min_value,max_value,increment_by,cycle_flag,order_flag,cache_size,last_number from dba_sequences where sequence_owner='SYS'
  2  and sequence_name='SEQ_ZXY';


SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SYS                            SEQ_ZXY                                 1 1.0000E+28            1 N N         20           1


5,currval不能直接使用,必须先要nextval之后再使用currval
SQL> select seq_zxy.currval from dual;
select seq_zxy.currval from dual
       *
ERROR at line 1:
ORA-08002: sequence SEQ_ZXY.CURRVAL is not yet defined in this session




SQL> select sequence_owner,sequence_name,min_value,max_value,increment_by,cycle_flag,order_flag,cache_size,last_number from dba_sequences where sequence_owner='SYS'
  2  and sequence_name='SEQ_ZXY';


SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SYS                            SEQ_ZXY                                 1 1.0000E+28            1 N N         20           1


SQL> 


SQL> select seq_zxy.nextval from dual;


   NEXTVAL
----------
         1




SQL> select sequence_owner,sequence_name,min_value,max_value,increment_by,cycle_flag,order_flag,cache_size,last_number from dba_sequences where sequence_owner='SYS'
  2  and sequence_name='SEQ_ZXY';


SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SYS                            SEQ_ZXY                                 1 1.0000E+28            1 N N         20          21


SQL> 


SQL> select seq_zxy.nextval from dual;


   NEXTVAL
----------
         2




SQL> select sequence_owner,sequence_name,min_value,max_value,increment_by,cycle_flag,order_flag,cache_size,last_number from dba_sequences where sequence_owner='SYS'
  2  and sequence_name='SEQ_ZXY';


SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SYS                            SEQ_ZXY                                 1 1.0000E+28            1 N N         20          21


6,变化sequence cache_size,可知cache size变化后last_number也会变化
SQL> alter sequence seq_zxy cache 200;


Sequence altered.




SQL> select sequence_owner,sequence_name,min_value,max_value,increment_by,cycle_flag,order_flag,cache_size,last_number from dba_sequences where sequence_owner='SYS'
  2  and sequence_name='SEQ_ZXY';


SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SYS                            SEQ_ZXY                                 1 1.0000E+28            1 N N        200           3






7,查看dba_sequences之last_number含义
Last sequence number written to disk. If a sequence uses caching, the number written to disk is the last number placed in the sequence cache. 
This number is likely to be greater than the last sequence number that was used.


a,last_number为写入到磁盘的最后的序列值
b,如果序列使用cache,last_number为存储在CACHE中最大或最后的序列值
c,last_number的值很可能会大于已使用序列的最后的值




8,可见只要序列的当前值不超过last_number,则LAST_NUMBER不会发生变化
SQL> select seq_zxy.nextval from dual;


   NEXTVAL
----------
         4


SQL> select sequence_owner,sequence_name,min_value,max_value,increment_by,cycle_flag,order_flag,cache_size,last_number from dba_sequences where sequence_owner='SYS'
  2  and sequence_name='SEQ_ZXY';


SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SYS                            SEQ_ZXY                                 1 1.0000E+28            1 N N        200         203


SQL> 
SQL> 
SQL> select seq_zxy.nextval from dual;


   NEXTVAL
----------
         5


SQL> select sequence_owner,sequence_name,min_value,max_value,increment_by,cycle_flag,order_flag,cache_size,last_number from dba_sequences where sequence_owner='SYS'
  2  and sequence_name='SEQ_ZXY';


SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SYS                            SEQ_ZXY                                 1 1.0000E+28            1 N N        200         203


SQL> 








来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-2141184/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12689897