Oracle DB序列(二)
速缓存拖入到内存中。
序列中的间断
虽然序列生成器会发出没有间断的序号,但是此操作的发生与提交或回退有关。因此,如果你回退一条包含序列的语句,则会丢失相应的序号。
另一个可能导致序列出现间断的事件是系统崩溃。如果序列值已高速缓存在内存中,那么在系统崩溃时就会丢失一些值。
因为序列不直接与表相关联,所以同一序列可用于多个表。但是,如果同一序列用于多个表,则每个表的序号可能会有间断。
修改序列
更改增量值、最大值、最小值、循环选项或高速缓存选项:
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