GoldenGate初始化的方式探讨

来源:互联网 发布:像素数据技术 编辑:程序博客网 时间:2024/05/01 11:09

前言

我们知道Oracle GoldenGate是从事务日志中进行数据捕获、然后投递、交付给目标数据库进行重做的系统。其提供了一种灵活的、耦合架构,可用于实现几乎所有复制场景。但是我们在实施的时候深有体会的就是最大的困难就是在创建复制目标数据库并对捕获更改数据前目标数据库的数据进行初始化。为此,Oracle也在着手解决这个问题,其中最重要的部分就是“CSN”(Commit Sequence Number)在目标端数据库中的应用,这么的”CSN”有别于我们之前常听说的“SCN”(System Change Number),但是它们在功能上是可互换的,知识语法不同,本文就是利用存储在GoldenGate中的LOGCSN达到最佳初始化的目的。

在阅读本文档之前,应该就以下几点达成一致:

l  对Oracle GoldenGate产品的基本知识和概念有了解

l  适用于Oracle GoldenGate10版本以上

l  适用Oracle数据库 9.2及以上版本

l  适用操作系统:所有Oracle GoldenGate支持Oracle数据库平台

 

什么是LOGCSN

Oracle GoldenGate版本10开始在Trail文件中引入了一个新机制,它保存了交易的提交顺序号(commitsequence number),这个机制的名字叫LOGCSN。它对应到数据库里面的系统改变号(SCN).LOGCSN可以可以在logdump中进行查看,它只存在于Translnd 0(开始事务)或3(单操作事务),如果一个事务包含多个操作,那么第一个操作必须含有一个TransID0,表示开始事务,同一事物下在之后的操作将包含Translnd 1,最后在结束该事务将包含一个TransID2,如果事务只有一个操作,那么此操作就会只包含一个TransID3。在每个文件的最后会记录一个LOGCSN号,如果LOGCSN号大于你记录的scn号 说明队列文件中这个交易记录是在你导出数据后发生的,如果LOGCSN号小于你记录的scn号 说明队列文件中这个交易记录是在你导出数据之前发生的。下面是用LOGDUMP工具查看LOGCSN号的例子:

在OGG目录下启动LOGDUMP工具


指定一个跟踪文件


打开文件后按n翻页查看,下面可以看到LOGCSN号


ATCSN与AFTERCSN

在Oracle GoldenGate 10中,我们可以在启动Replicat进程时指定LOGCSN号,应用我们希望开始应用更改的数据。LOGCSN号对应到数据库里面的系统改变号SCN号,在备份源库之前我们应该记录下当前数据库的SCN号,在目标库应用日志时就从当前这个SCN号开始应用。

如果取的SCN正好对应的是COMMIT操作:

ATCSN <csn>:使用ATCSN参数时,Replicat会把这个commit之前同一个事务的相关操作再应用一次,因为之前初始化时已经恢复了这个SCN号之前的事务,所以此时再使用ATCSN参数启动Replicat进程就会导致数据出现重复,源库和目标库数据不一致。

AFTERCSN <csn>:使用AFTERCSN参数时,则只会应用commit之后的操作。不会导致数据重复应用的情况。

如果取的SCN不是对应的commit操作:

不管是用ATCSN或AFTERCSN参数,Replicat进程都会把这个SCN号之前未完成的事务重新应用。在初始化恢复目标库时会回滚掉未提交的事务,所以不会出现数据重复。

建议使用AFTERCSN,不管在哪种情况下都能保证数据一致。

初始化前的准备

为了不会丢失任何数据,在初始化之前,必须查看数据库里是否还存在长事务。可以通过如下命令查看数据库事务的开始时间,并筛选出最小的开始时间,看是否大于Extract进程的启动时间,需要等到其开始时间大于Extract进程的启动时间后才能进行初始化。因为OGG只获取Extract启动后的变化数据。(如果是RAC环境需要查询GV$TRANSACTION视图)。

SQL>select min(start_time) from v$transaction;

常用的初始化工具

Recovery Manager(RMAN)

RMAN(Recovery Manager)是一种用于备份、还原和恢复数据库的Oracle 工具。RMAN只能用于ORACLE8I或更高的版本中。在相同平台相同版本并要求不停业务的情况下,首先选择RMAN这种初始化方式。和其他工具相比RMAN速度比较快,在不停业务的情况下,对数据库性能影响较小,实施难度不大操作方便。但是使用RMAN初始化必须将源数据库开启归档模式。

EXPDP/IMPDP(数据泵)

EXPDP/IMPDP是一个10G引入的备份工具,它能够实现逻辑备份、逻辑恢复、在数据库之间移动对象、实现表空间迁移。它能够在相同平台或不同平台下并且在不停业务的情况下快速完成初始化。但是数据泵这种方式比较耗磁盘IO,所以不建议在业务高峰期的时候使用,会影响使用性能。数据泵是从ORACLE 10G开始引入的一个工具,版本在10G以前的不能使用。

EXP/IMP(导入/导出)

上面说到EXPDP/IMPDP是从10G开始引入的逻辑备份工具,那么在10G之前的版本,ORACLE提供了EXP/IMP(导入/导出)工具,这个也是一种逻辑备份工具,用法和功能都和EXPDP和IMPDP差不多。它们的区别在于EXP是通过数据字典来获取相应对象信息,并且通过SELECT来返回对象中的数据,在EXP时会进行全表扫描,相当于做了一次块检查所以速度较慢。而EXPDP主要是通过执行DBMS_METADATA的包来获取对象的相应信息,直接是通过拷贝相应数据文件块的方式,所以效率比EXP快了很多。EXP/IMP也能在相同平台或不同平台下并且在不停业务的情况下完成初始化,但是速度较慢。不建议在大速度库使用该方法。

GoldenGate Initial Load

goldengate自己也带了一个初始化工具,它能够实现不同平台数据库之间的初始化,如:SQLSERVER到ORACLE,GoldenGateInitial Load直接初始化是Extract进程获取的源端记录直接传输给目标端的Initial Load Replicat进程。这种方式不支持LOB和LONG类型的数据。速度比较慢。

初始化方法分析比较

RMAN

优点:速度快、对主数据库性能影响较小、实施简单。

缺点:限制比较多,如:数据库必须处于归档模式,跨数据库版本、平台限制比较大。

在同平台环境下建议选择RMAN

EXPDP/IMPDP

优点:速度快、支持不同环境下的初始化,而且不会停业务。

缺点:在导出时对主数据库性能影响较大、只支持10G以后的数据库使用。

在不同平台环境下,数据库是10G以上版本的建议使用EXPDP/IMPDP。

EXP/IMP

优点:支持不同环境下的初始化,而且不会停业务、低版本数据库可以使用此工具。

缺点:在导出时对主数据库性能影响较大、速度慢。

如果数据库版本较低,源端和目标端环境又不同,建议使用EXP/IMP,但如果数据量很大操作200G,可以建议用户下班之后停机用冷备的方式来初始化。

GoldenGate Initial Load

优点:能够跨数据库平台初始化。

缺点:不支持LOB和LONG类型的字段、速度比较慢。

如果是跨数据库平台,如SQLSERVER到ORACLE,可以选用OGG自带的迁移功能GoldenGate Initial Load。

综上所述,每一种都有自己的优点和缺点,我们在选择这些工具前,应该先考虑环境,然后在针对不同环境选择最好的工具。


参考:Oracle GoldenGate Best Practices-Instantiation from an Oracle Source Database.pdf


0 0
原创粉丝点击