Database 自动递增序列不符合顺序-较新的值有时小于上一个值?

Database 自动递增序列不符合顺序-较新的值有时小于上一个值?,database,oracle,sequence,Database,Oracle,Sequence,我知道,有时自动生成的db序列中会出现间隙,但在我去年的案例中,我生成了新值,这些值不仅符合顺序,而且比上一次生成的值(过去一年的8次)小。我们有一个复杂的计算年龄的算法,基于这个自动生成ID,但它经常出错并导致问题。下面是这些值的一个片段,请您帮助解释为什么会发生这种情况。(我无法更新Oracle,因为之前创建了一些高定制) 以下内容使用自动生成序列进行排序。注意前两个和后两个,关于序列是如何错误生成的 自动生成ID——时间戳 1046746686---2018-05-16 06:52:26

我知道,有时自动生成的db序列中会出现间隙,但在我去年的案例中,我生成了新值,这些值不仅符合顺序,而且比上一次生成的值(过去一年的8次)小。我们有一个复杂的计算年龄的算法,基于这个自动生成ID,但它经常出错并导致问题。下面是这些值的一个片段,请您帮助解释为什么会发生这种情况。(我无法更新Oracle,因为之前创建了一些高定制)

以下内容使用自动生成序列进行排序。注意前两个和后两个,关于序列是如何错误生成的

自动生成ID——时间戳

1046746686---2018-05-16 06:52:26
1046746689---2018-05-16 06:50:42
1046746690---2018-05-16 06:50:52
1046746692---2018-05-16 06:52:52
1046746705---2018-05-16 06:55:41
1046746773---2018-05-16 10:50:27

1046746774---2018-05-16 10:36:27

序列值和时间戳如何生成的可能重复?将行插入表中时,是否使用
nextval
systimestamp
?或者应用程序是否读取
nextval
,生成一个时间戳,进行一些处理,然后将两者都插入?这个问题在这个网站上经常被问到。长话短说,自动增量序列不必是连续的,以满足唯一性等标准。有一种可能性是,您的应用程序正在两个不同的数据库上运行,使用一些复制,如“金门”“用于实时复制,两个数据库具有相同的序列名称,但序列值不同。在负载平衡器中,会话有时会转到DB1,有时会转到DB2,您不必提及是否使用RAC。根据这个问题,这可能发生