标签: goldengate

多主 Oracle GoldenGate 复制的全局锁定

这是一个非常复杂的场景,但我认为最先进的挑战可能会对 dba.se 的许多高端用户感兴趣。

问题

我正在使用 Oracle GoldenGate 为文档生产系统开发洲际数据复制解决方案,有点类似于 wiki。主要目标是在全球范围内提高应用程序性能和可用性。

该解决方案必须允许从多个位置同时读/写访问同一个数据池,这意味着我们需要一些聪明的方法来防止或解决没有用户交互的冲突更新。

专注于碰撞预防,我们必须允许全局锁定对象(文档、插图、一组元数据等),从而防止多个用户同时编辑来自不同位置的同一对象 - 最终导致冲突。

类似地,对象必须保持锁定状态,直到任何用户连接的数据库收到该对象的更新数据,否则用户可能会开始编辑没有最新更新的旧对象。

背景

该应用程序对延迟有些敏感,这使得从远程位置访问中央数据中心的速度变慢。像许多以内容为中心的系统一样,读/写比率在 4 比 1 的范围内,使其成为分布式架构的理想选择。如果管理得当,后者还将努力确保站点或网络中断期间的可用性。

我使用了一种有点非常规的多循环双向复制拓扑。这将复杂性保持在可管理的级别 { 2(n-1) 方式},增加了站点中断的弹性,并允许相当简单地添加或删除站点。一个小缺点是,通过中央主数据库在最远程站点之间复制事务可能需要长达 30 秒的时间。

在所有站点之间直接复制的更传统的设计会将时间缩短一半,但也会显着增加配置 { n(n-1) 方式}的复杂性。

五个位置意味着 20 路复制,而不是我设计中的 8 路复制。

此图显示了我当前跨欧洲、亚洲和北美数据中心的测试环境。生产环境预计会有更多的位置。

复制拓扑图

所有数据库都是 Oracle 11.2.0.3 和 Oracle GoldenGate 11.2.1。

到目前为止我的想法

我一直在思考通过在中央数据库的数据库链接上将一行插入到“锁定”表中来进行锁定,同时让解锁(前面提到的行的更新或删除)与更新的行一起复制数据。

在获取锁和打开对象进行编辑之前,我们必须代表用户检查中央和本地数据库中锁的可用性。编辑完成后,我们必须释放本地数据库中的锁,然后通过中央数据库将更改和锁的释放复制到所有其他位置。

但是,对高​​延迟数据库链接的查询有时会非常慢(测试显示单个插入需要 1.5 秒到 7 秒),而且我不确定我们是否可以保证删除锁的更新或删除语句是要复制的最后一条语句。

调用远程 PL/SQL 过程进行检查和锁定至少会将操作限制为单个远程查询,但 7 秒仍然是很长的时间。像两秒钟这样的事情会更容易接受。我希望可以以某种方式优化数据库链接。

还可能存在其他问题,例如在从中央数据库成功复制本地锁定表中的行之前尝试删除或更新该行。

从好的方面来说,使用这种解决方案,如果与中央数据库的通信中断,让应用程序进入只读状态,或者在数据中心不可用时重定向客户端,应该相对简单。

有没有人做过类似的事情?解决这个问题的最佳方法是什么?

就像我最初说的那样,这是一个相当复杂的解决方案,请随时询问任何不清楚或遗漏的地方。

replication oracle oracle-11g-r2 locking goldengate

6
推荐指数
1
解决办法
2405
查看次数

两个交易可以共享同一个 SCN 吗?

是否所有交易都有唯一的 SCN?两个交易可以共享一个 SCN 吗?

我对 Oracle Golden Gate 手册中的这句话感到困惑:

CSN 与事务 ID(在 Oracle GoldenGate 信息输出中显示为 XID)进行交叉检查。XID-CSN 组合唯一标识一个事务,即使在有多个事务同时提交的情况下,因此具有相同的 CSN。例如,这可能发生在具有并行性和高事务并发性的 Oracle RAC 环境中。

https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_csn.htm#GWUAD752

该文档中的表 D-1 将 GoldenGate CSN 标识为 Oracle DB SCN:

Oracle GoldenGate CSN Values Per Database

Oracle:  system_change_number
Where:   system_change number is the Oracle SCN value.
Run Code Online (Sandbox Code Playgroud)

oracle goldengate

4
推荐指数
1
解决办法
623
查看次数

标签 统计

goldengate ×2

oracle ×2

locking ×1

oracle-11g-r2 ×1

replication ×1