GoldenGate是Oracle在数据迁移和数据同步方面要重点发展的产品,当然支持异构是其最大亮点。与Dataguard对比,GoldenGate在战略上是更高层次的产品,这点从GoldenGate的购买中甚至包含Dataguard的License就可见一斑,从功能上来说,GoldenGate针对Dataguard的最大优势当然是支持异构,但是,GoldenGate也不会取代Dataguard,原因很简单,Dataguard支持同步复制,而GoldenGate从原理上来说实现不了,因此,这两个产品都会持续发展下去,但从重要性来讲,GoldenGate的发展要重要于Dataguard的发展,事实上,Dataguard也已经很成熟了,而GoldenGate发展空间巨大,至少从配置管理上来说,纯命令行方式早晚会被取代,可以持续改进的东西有很多。

而针对stream复制,GoldenGate的优势就太多了,不说支持异构平台了,首先它的性能非常卓越,通过解析日志的内容来同步数据,效率非常高,不依赖于数据库的运行,而stream复制,我们知道,要用到stream_pool_size的内存区域,依赖数据库的性能,并且会产生很多stream相关的等待事件,而stream复制相对GoldenGate的优点,只剩下配置简单这一点。可以这么说,对于小数据量的同步,可以选择stream复制来实现,因为配置较为简单,而对于大数据量的同步复制,应该选择GoldenGate,因为性能优越,而且经得起考验,抗压性强。当然,不管数据量的多少,在性能方面,GoldenGate都是远远高于stream方式的。

 

说到数据迁移时的初始化装载,GoldenGate提供了专门的工具Initial Load,我们也已经经过测试,是可以实现大部分数据的正确迁移的,但是需要所有的表都有主键这是要格外注意的,另外,对long和lob数据类型以及嵌套表的迁移有问题,需要其他方式去解决,对sequence也有问题,关于这个后面会有一个迁移的案例进行总结。对于初始化装载来说,可以选择的方式很多,可以选择rman,可以选择datapump,也可以使用GoldenGate自己的初始化装载工具Initial Load,我们需要知道它们的区别,来满足不同的需求:

1、rman速度最快,但跨平台和版本有问题,而且操作时需要停库;

2、datapump速度较慢,可以跨平台和版本,但操作时也需要停库;

3、GoldenGate的Initial Load,速度慢,可以跨平台跨版本,不需要停库,可以在线进行。

 

因此,如果你的生产数据库面临数据迁移的问题,而又只有很少的停机时间,那么你可以选择GoldenGate的Initial Load来实现初始化装载,因为装载的时间就算非常长,但是不影响你的生产数据库的使用,应该都是可以接受的。而如果你的生产数据库有足够的停机时间,那么毫不犹豫的选择rman来实现初始化装载吧,当然,平台要支持才行。

 

不是说我们为什么总要去关注GoldenGate的使用和发展,而是有时候确实有很多数据迁移与复制方面的需求,在严格限制停机时间的情况下,我们需要有这样一个经得起考验的工具来实现,当然,这样的工具其他厂商也有一些,但是大部分都是通过底层去调用并行datapump去实现的。