Oracle缺少序列号
我正在使用序列在Oracle中生成自动增量id。每次插入之前,我都有一个触发器从序列中提取数字Oracle缺少序列号,oracle,auto-increment,Oracle,Auto Increment,我正在使用序列在Oracle中生成自动增量id。每次插入之前,我都有一个触发器从序列中提取数字 CREATE SEQUENCE "my_SEQ" MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 5000 NOORDER NOCYCLE; 我发现少了5000个(和缓存一样)。例如,我的第一次尝试给了我id 1,当我稍后回来时,第二次插入生成了一个id 5001。Oracle文档说,“如果发生系统故障,所有未在
CREATE SEQUENCE "my_SEQ" MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 5000 NOORDER NOCYCLE;
我发现少了5000个(和缓存一样)。例如,我的第一次尝试给了我id 1,当我稍后回来时,第二次插入生成了一个id 5001。Oracle文档说,“如果发生系统故障,所有未在提交的DML语句中使用的缓存序列值都将丢失。”有人能解释一下这是怎么回事吗?提前谢谢 当从序列中提取新值时,DB需要将此信息写入磁盘,因此如果出现故障-重启后不会发生冲突 将每个数字都写入磁盘是不有效的 为了解决Oracle可以缓存值的问题,所以当您请求一个值时,DB将提取一些预定义的数字集(在您的情况下为5000)并将该信息写入磁盘。如果出现DB故障,这些值将永远不会被重用 您还指定了NOORDER。这意味着您可以将数字从序列中取出来。 它比使用命令更有效 其他材料: