序列 id 未正确插入

问题描述

我创建了一个序列,但它没有按序列顺序插入 ID。

例如:

  • 首先我创建了一组记录序列号,生成为 1、2、3、4

  • 我再次创建了一组从 8、9、10 开始的记录 seq

  • 我第三次创建了另一组记录 seq id 生成为 5、6、7 (这是不正确的,我希望 seq id 继续为 11、12、13)

所以5、6、7是错误的,我需要生成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

Oracle Documentation

如果您不想保证按请求顺序生成序列号,请指定 NOORDER。这是默认设置。

所以你看到的是预期的行为,我假设你的数据库是一个 RAC 实例(因为这种效果只能在 RAC 上观察到)。

话虽如此,有充分的理由允许分配的 ID 的这种小混乱(这是由缓存引起的,因为每个RAC 实例拥有自己的缓存大小以供使用)。

这种方法的积极方面是不需要同步实例之间的序列 - 一项可能会产生大量开销的任务。