NOORDER如何在Oracle数据库上工作?

NOORDER如何在Oracle数据库上工作?,oracle,sequence,Oracle,Sequence,我有一个序列定义如下: CREATE SEQUENCE "myseq" MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1046 CACHE 20 NOORDER NOCYCLE ; 现在,我的客户报告说系统生成的号码是429521429524296742968,直到429724298743074308 序列在具有两个系统的群集数据库系统上运行。这种行为可能是由NOORDER关键字引起的吗? NOORDER的Oracle文

我有一个序列定义如下:

CREATE SEQUENCE  "myseq"  MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1046 CACHE 20 NOORDER  NOCYCLE ;
现在,我的客户报告说系统生成的号码是429521429524296742968,直到429724298743074308

序列在具有两个系统的群集数据库系统上运行。这种行为可能是由NOORDER关键字引起的吗?
NOORDER的Oracle文档非常简短。

此选项只是消除了单独实例之间相互协调的需要,它们将在下一版本中发布哪个值

相反,每个实例都会获得一个值缓存,可以从中独立绘制,从而提高性能

因此,在多实例系统中,您可以使用NOORDER,除非您希望序列号也指示为记录分配序列号的顺序(通常是插入顺序)


你把那些号码打对了吗?它们似乎不太可能来自具有该序列的双实例系统,除非其中只有一个实例生成了最近40000个左右的新值,而另一个实例几乎没有任何活动。

好吧,我已经从客户的电子邮件中正确键入了这些数字,不过,我无法验证他键入的数字是否正确。但至少我可以通过你的解释排除诺德是罪魁祸首。我怀疑他们漏掉了一个0。。。43007, 43008. 他们对数字有什么问题?它们当然只是键值?缺少0可以解释最后两个数字,但不能解释第一个。所以我不确定系统到底对他做了什么。我们目前的答案也是“保持冷静,忽略差距”,事实上,数字并不是真正需要严格连续的东西。差距是通过序列来预期的。这是一个常见的误解,认为他们可以没有差距。实例重启会丢弃缓存的数字,缓存可能(我认为)内存不足,回滚会“丢失”一个数字。。。出现差距有各种各样的原因。