【发布时间】:2020-08-03 05:19:02
【问题描述】:
尝试使用 Oracle Golden Gate (OGG) 将数据从源数据库复制到副本数据库(目标)。假设我在源数据库中有 TableA 和 B。 A 具有由触发器管理的标识列,该触发器使用序列对象添加唯一编号(旧的 Oracle 方式,在 12C 之前)。表 B 的标识列为“GENERATE ALWAYS AS IDENTITY ...”,这种方式是在 12C 中新出现的。下面是我的观察,然后是问题: (A) SourceDB TableA,插入1条记录,id=1。然后在 TargetDB TableA 中,OGG 复制 1 个插入,id=1。很好。
Source A------------------------------------Target A
id=1----------------------------------------id=1
(B) 在 TargetDB 中,手动插入 1 条记录,就完成了,id=3。好的。这里id应该是2,但是OGG跳过了2,把这个新添加的记录在Target表中的id设置为3。
Source A------------------------------------Target A
id=1----------------------------------------id=1
.-------------------------------------------id=3
(C) SourceDB TableA,插入1条记录,id=2。然后在 TargetDB TableA 中,OGG 复制 1 个插入,id=2。很好。
Source A------------------------------------Target A
id=1----------------------------------------id=1
.-------------------------------------------id=3
id=2----------------------------------------id=2
所以,除了 OGG 的良好行为之外,它看起来还不错! 但是当我尝试在 TableB 上做同样的事情时,它在步骤 B 中给了我唯一的约束错误!看起来是因为表 B 中的标识列被定义为始终生成为标识。那么,真的是因为这个吗?这种新方法比使用 sequence.nextValue 对象生成新的唯一 id 列的旧方法引起的问题更多。或者OGG有什么办法可以克服这个问题,让B表的行为与A表一样,对于步骤B?
【问题讨论】:
-
表 A 中的序列在每个站点中独立管理 ?是主动-主动场景还是复制是单向的?
-
复制是单向的。