测试结论
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/
,如需转载,请注明出处,否则将追究法律责任。