Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle缺少序列号_Oracle_Auto Increment - Fatal编程技术网

Oracle缺少序列号

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文档说,“如果发生系统故障,所有未在

我正在使用序列在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文档说,“如果发生系统故障,所有未在提交的DML语句中使用的缓存序列值都将丢失。”有人能解释一下这是怎么回事吗?提前谢谢

当从序列中提取新值时,DB需要将此信息写入磁盘,因此如果出现故障-重启后不会发生冲突

将每个数字都写入磁盘是不有效的

为了解决Oracle可以缓存值的问题,所以当您请求一个值时,DB将提取一些预定义的数字集(在您的情况下为5000)并将该信息写入磁盘。如果出现DB故障,这些值将永远不会被重用

您还指定了NOORDER。这意味着您可以将数字从序列中取出来。 它比使用命令更有效

其他材料: