针对没有主键的情况,GoldenGate 大概提供了3种方案,大致如下:
默认使用所有列当主键,通过 keycols 来实现,这种其实存在一定的问题,在这次的项目中直接否定。
通过在源端表中添加 ogg_key_id 列的方式来实现,这可能会影响应用,因此也直接否定。
通过在目标端的表中添加 rowid 类型的伪列,来实现。通过测试,发现这种相对靠谱,如下是我的测试过程.
我这里测试的 ogg 抽取 9208 Dataguard standby,同步到10205的例子。
另外,我们这里 9i 的环境和 10g 环境均在同一个主机.
1. 源端
说明:这里我模拟的是 9i 环境超过32列的情况.
—创建测试表
—源端 OGG 配置
2. 目标端
—创建测试表
—目标端 OGG 配置
3. 启动进程
–源端
—目标端
4. 源端插入测试数据
模拟 insert:
–源端
—目标端
模式 delete:
–源端
—目标端:
模拟 update:
—源端:
–目标端:
我们可以看到 ogg 完全是可以支持利用构造 rowid 伪列的方式来解决没有主键的问题。 然而这种方法也有一个很大的问题:迁移之后,新环境中的 row_id 伪列需要进行 drop,这个 drop 的动作是非常坑爹的。
例如我们客户这里的系统,均为 2.5TB 以上的,最大12TB的库,那么 drop column 就疯掉了。
------ The End
文章来源:【love wife & love life —Roger 的 Oracle 技术博客】
配图来源:http://betanews.com/wp-content/uploads/2015/07/encryption_padlock-600x400.jpg
2015 Oracle 技术嘉年华五折门票抢购中,长按上方图片识别二维码注册参会或者点击原文链接报名!
点击“阅读原文”查看原文章详情。