【问题标题】:Oracle DB getting same sequences across different Environments?Oracle DB 在不同的环境中获得相同的序列?
【发布时间】:2014-11-19 20:13:01
【问题描述】:

我在 Oracle 中有一个模式,其中也有很多链接模式,

我有四个基本环境 Dev/Prod/INT/UAT。

我希望有一种机制,当在 Prod SCHEMA 中为单个模式进行插入时,所有四个 env 上的序列生成都会给我相同的值。

例如,假设表 A 具有由 Oracle 序列生成器生成的 Id 列,我希望在我的所有其他 Oracle 数据库实例上跨 Dev/UAT/INT 生成完全相同的值作为 PROD。

为什么我需要这个,

我对各种链接模式的 UAT/Dev/INT 转储做了很多 Prod,并且没有相同的序列,数据不足以进行分析,因为 我不想一次又一次地进行父模式转储

任何关于相同的细节都有帮助

thnx

【问题讨论】:

  • 恐怕我不明白这个问题。在父模式下拥有“子模式”是什么意思?我猜这只是意味着你有多个模式,可能有一些跨模式外键。我不明白你试图实现的行为。是否要确保在 dev 中插入的第 n 行获得与在 prod 中插入的第 n 行相同的序列值?您想确保在 dev 和 prod 中同时完成的插入获得相同的序列值吗?我不明白“父模式转储”完成了什么或如何涉及序列。
  • 那么如果你在 prod 中插入 1000 行,但在 dev 中只插入 2 行,那么 dev 序列应该生成哪些值? 1和2? 999和1000? 42 和 81?
  • 我不想为所有模式做一个完整的数据库到数据库转储;你是对的,可能 parent child 不是在这里使用的正确术语,我希望 Cross schema 外键仍然有效

标签: sql database oracle


【解决方案1】:

如果您在一个 DB 上仅使用一个序列,即从不同的 DB 调用,则每次调用“nextval”时,它将计数 +1。如果您无法在一个会话中执行所有命令,则无法使用序列来完成。您可以创建自己的并根据需要处理(增加)它们。

【讨论】:

    【解决方案2】:

    这不是序列的意图。如果您在各种实例上以相同的顺序插入相同的行,那么它们应该以相同的序列值结束,但这不是您想要依赖的东西。如果您希望能够跨多个实例比较数据,则应基于自然键(即数据本身)而不是合成键(序列)进行比较。

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      相关资源
      最近更新 更多