Oracle序列-跳过的数字

Oracle序列-跳过的数字,oracle,oracle10g,Oracle,Oracle10g,我用上面的脚本创建了一个序列。我们的夜间工作使用这些序列,所以第一天使用1,2,3,4,5,第二天开始使用21,22,23。。等等 我可以理解这是因为CACHE参数 现在问题是 三天来,它一直在跳过中间的一些数字 序列是否会决定使用这些跳过的数字?(从上面的示例6到20),如果是,在什么情况下以及有没有避免的方法?通常,跳过值是由于缓存参数。文档中指定的某些原因可能是b,因为当发生系统故障时,未在提交的DML语句中使用的所有缓存序列值都将丢失。可能丢失的值数等于CACHE参数的值。如果您想要连续

我用上面的脚本创建了一个序列。我们的夜间工作使用这些序列,所以第一天使用1,2,3,4,5,第二天开始使用21,22,23。。等等

我可以理解这是因为CACHE参数

现在问题是

三天来,它一直在跳过中间的一些数字


序列是否会决定使用这些跳过的数字?(从上面的示例6到20),如果是,在什么情况下以及有没有避免的方法?

通常,跳过值是由于缓存参数。文档中指定的某些原因可能是b,因为当发生系统故障时,未在提交的DML语句中使用的所有缓存序列值都将丢失。可能丢失的值数等于CACHE参数的值。如果您想要连续的序列值,则始终使用NOCACHE选项,而不考虑上述情况


对于最后一个问题,这些序列将不再使用,除非你在序列中提到循环选项

否,序列将继续增加(如果您指定此项,则最终循环回minvalue),但序列不能保证增加1(这是一个常见的误解)。是的,差距是由于可能重复的感谢,但我看到这些序列使用旧的数字,你可以看到我给了NOCYCLE,昨天我运行同一个作业三次,序列中的最后一个值是401,我第一次运行它创建的作业402,第二次创建391,第三次创建392。第四次跑步几个小时后,它创建了403。如何防止这种行为,我可以跳过它,只要它继续以递增的顺序创建。我是否可以重新创建序列并强制其仅以升序运行,是否有任何此类选项?是的,在这种情况下,使用NOCACHE选项重新创建或更改现有序列。它会给你连续的号码。你必须安装RAC吗?集群中的每个节点都将使用自己的缓存20(或您将缓存设置为的任何值)。节点1可能会从序列中获取编号381,然后缓存编号382-400,以便在该节点中下次使用。节点2将从序列中获取编号401和高速缓存编号402-420。根据作业在哪个节点上运行,它将获得382-400范围或402-420范围内的数字。如果您使用ORDER而不是NOORDER创建序列,则可以绕过此问题,但这会降低性能,因为两个节点需要使用锁来确保顺序。哦,是的。。我们的测试环境(发生这种情况的地方)是在RAC模式下运行的,但我们的PROD服务器是非RAC的,所以这意味着我将始终以递增的顺序获取序列。
CREATE SEQUENCE F_SQ  
START WITH 1  
MAXVALUE 999999999999999999999999999  
MINVALUE 1  
NOCYCLE  
CACHE 20  
NOORDER;