oracle 在多数据中心操作的多领导者复制中处理重复主键冲突

zaq34kh6  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(150)

我有两个数据中心,每个数据中心都配置为单领导者,多追随者节点配置。因此,有两个领导者,每个数据中心一个。它们都可以接受写请求。在一个数据中心的leader节点上发生的写入以异步方式复制到其他数据中心的leader节点上。
现在,假设我有一个Oracle表transaction_logs,其中tran_id作为主键。我不能将此tran_id保持为自动递增,因为如果每个数据中心的leader节点同时收到写请求,则两个不同的写请求将使用相同的主键值,并且在从一个数据中心的leader到另一个数据中心的数据复制过程中,会因重复的主键而发生写冲突。
那么,在这种情况下,我们应该如何设计主键呢?要求是应用程序或系统应生成主键值,数据类型应为最佳,因为将在主键上创建索引。

d7v8vwbk

d7v8vwbk1#

试试这个:

  • 按序列生成ID
  • 序列的增量为10
  • 每个数据中心都有唯一的“id”,它也是序列的起始值。因此,在DC中生成ID(1,11,21,...),而其他DC生成ID(2,12,22,...)。
  • 如果你只想写入leader数据库,你可以将datacenter id设置为会话上下文的“全局”变量。因此ID生成触发器可以将其添加到由SEQUENCE生成的数字。
  • 每个表都有由触发器(creation_dc、last_updated_dc、creation_timestamp、last_update_timestamp)管理的人工列

可以指示Shareplex/GoldenGate等逻辑复制工具在检测到冲突时使用更高的时间戳值来解决冲突。
这样,您甚至可以处理多写入器架构。

相关问题