Oracle DB序列(二)

2014-11-24 17:01:41 · 作者: · 浏览: 1
速缓存拖入到内存中。
序列中的间断
虽然序列生成器会发出没有间断的序号,但是此操作的发生与提交或回退有关。因此,如果你回退一条包含序列的语句,则会丢失相应的序号。
另一个可能导致序列出现间断的事件是系统崩溃。如果序列值已高速缓存在内存中,那么在系统崩溃时就会丢失一些值。
因为序列不直接与表相关联,所以同一序列可用于多个表。但是,如果同一序列用于多个表,则每个表的序号可能会有间断。
修改序列
更改增量值、最大值、最小值、循环选项或高速缓存选项:
sys@TEST0924> ALTER SEQUENCE  dept_deptid_seq
  2  INCREMENT BY 20
  3  MAXVALUE 999999
  4  NOCACHE
  5  NOCYCLE;

Sequence altered.

如果序列达到MAXVALUE 限制,则序列不会再分配额外的值,此时你会收到一条错误消息,指明序列超出了MAXVALUE 。要继续使用该序列,可以使用ALTER SEQUENCE语句修改该序列。
语法
ALTER  SEQUENCE sequence
[INCREMENT BY n ]
[{MAXVALUE  n | NOMAXVALUE}]
[{MINVALUE  n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE  n | NOCACHE}];

在此语法中,sequence 是序列生成器的名称。
修改序列的准则
你必须是序列的所有者或拥有序列的ALTER权限。
修改只会影响以后生成的序列号。
如果要从另一编号处重新开始,则必须删除原有序列后重新创建。
在修改过程中会执行一些验证操作。
要删除序列,请使用DROP 语句:
sys@TEST0924> DROP SEQUENCE dept_deptid_seq;

Sequence dropped.

要修改一个序列,你必须是此序列的所有者或拥有序列的ALTER权限。要删除一个序列,你必须是此序列的所有者或拥有此序列的DROP ANY SEQUENCE权限。
ALTER SEQUENCE 语句只会影响以后生成的序列号。
使用ALTER SEQUENCE 语句不能更改START WITH选项。如果要从另一编号处重新开始,则必须删除原有序列后重新创建。
在修改过程中会执行一些验证操作。例如,不能强制实施一个小于当前序列号的新MAXVALUE 。
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 90
NOCACHE
NOCYCLE;
  错误:
sys@TEST0924> ALTER SEQUENCE  dept_deptid_seq
  2  INCREMENT BY 20
  3  MAXVALUE 99
  4  NOCACHE
  5  NOCYCLE;
ALTER SEQUENCE  dept_deptid_seq
*
ERROR at line 1:
ORA-04009: MAXVALUE cannot be made to be less than the current value