暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 序列行为跳过值

ASKTOM 2019-05-02
266

问题描述

你好,问一下汤姆团队。

我在2节点RAC中有一个带有标识列的表。默认情况下生成序列,缓存3000和noorder选项。

我看到一些奇怪的东西。第一个插入是id 1,这意味着它来自实例1,然后是2,3。然后它是3001的,这很好,因为它来自实例2。实际上,该表有3k行,我看到id以9001开头的行。

为什么是这样?我预计序列将是从1到3000,从3001到6000,但永远不会9000。我错过了什么吗?

谢谢。

问候,

专家解答

初始化序列时,它会将下一个 值加载到内存 (库缓存) 中。

因此,当您首次使用缓存3000访问序列时,它会为该实例生成1-3000的所有值。第二个实例将获得3001-6000的值。

如果您很少访问该序列,那么最终数据库将使这些预先生成的值老化。意味着你失去了他们。下一次访问将获得6001-9000的值。

这是正常和预期的。

如果重新启动数据库实例,也会发生这种情况。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论