问题描述
我创建了一个序列,但它没有按序列顺序插入 ID。
例如:
-
首先我创建了一组记录序列号,生成为 1、2、3、4
-
我再次创建了一组从 8、9、10 开始的记录 seq
-
我第三次创建了另一组记录 seq id 生成为 5、6、7 (这是不正确的,我希望 seq id 继续为 11、12、13)
我下面的序列创建查询有什么问题?
CREATE SEQUENCE "LEASE_REPAYMENT_SEQ"
MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1
START WITH 146724 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ;
解决方法
如果您检查序列定义,您会看到您将其定义为 NOORDER
。
如果您不想保证按请求顺序生成序列号,请指定 NOORDER。这是默认设置。
所以你看到的是预期的行为,我假设你的数据库是一个 RAC
实例(因为这种效果只能在 RAC
上观察到)。
话虽如此,有充分的理由允许分配的 ID
的这种小混乱(这是由缓存引起的,因为每个RAC
实例拥有自己的缓存大小以供使用)。
这种方法的积极方面是不需要同步实例之间的序列 - 一项可能会产生大量开销的任务。