GoldenGate实施步骤
一、GoldenGate实施环境
source database:oracle 11.2.0.3
target database:oracle 11.2.0.3
需要配置的进程如下:
source database:extract、data pump
target database:replicat
说明如下:
1、主提取进程首先将trail生成在本地,然后datapump读取本地trail再发送到目标服务器,即便网络故障,主提取进程仍然能随着事务生成trail文件,而datapump则会暂时停止传输,等待网络通畅后在将堆积的本地trail文件发送至目标服务器,从而实现了断点传输的功能。在实际应用中,每一个同步流程都应该配置datapump以应对网络问题。
2、配置进程检查点(checkpoint):检查点记录了进程读写的位置信息用以数据恢复,目的是为了防止进程因系统、网络崩溃而导致的数据丢失。oracle推荐将复制进程的检查点信息存放到数据库表中进行管理:
首先在./globals参数文件中加入:
CHECKPOINTTABLE [<owner>.<table>] --指定的检查点记录表
然后运行:
GGSCI> DBLOGIN USERID <db_user>, PASSWORD <pw>
GGSCI> ADD CHECKPOINTTABLE [<owner>.<table>] --生成这个检查点记录表
3、GoldenGate的DDL同步只支持两边一致的数据库,限制条件较多(如不能进行字段映射、转换等),具体可以参考官方文档。DDL的抓取不是通过日志抓取来捕获的,而是通过触发器来实现,所以对源数据库的性能影响要比单纯的数据抓取要大很多,可谓屏弃了GoldenGate的优势。尽量不要使用GoldenGate的DDL复制功能,在大多数业务系统中,实际上不会有频繁的数据库结构变动,完全可以通过手工的方式进行维护。确实有大量DDL操作的环境,如果可以,还是推荐物理DG之类的替换方案;确实要使用GoldenGate的DDL复制,请详细参考官方文档的限制和说明。
4、如果需要配置DDL支持,需运行如下几个脚本:marker_setup.sql,ddl_setup.sql,role_setup.sql,grant GGS_GGSUSER_ROLE to <user>; ddl_enable.sql
5、配置source和target端tnsnames.ora
6、查询是否有不支持的数据类型
7、是否有压缩表和不支持的表类型
8、禁用容灾端数据库的外键,trigger和有DML操作的JOB
二、GoldenGate软件安装,
2.1 Unix下安装 在source database 和 target database 都执行如下操作:
# su - oracle
/home/oracle> mkdir goldengate
在此goldengate下面解压下载的安装包
/home/oracle>cd goldengate
/home/oracle/goldengate> ldd ggsci
将列出所有需要的lib和当前缺少的
添加环境变量
在/home/oracle/. profile文件里添加如下内容:
export PATH=/home/oracle/goldengate:$PATH
export LIBPATH =/home/oracle/goldengate:$ORACLE_HOME/lib;
export GGATE=/home/oracle/goldengate
注:
IBM AIX:LIBPATH
HPUX: SHLIB_PATH
SOLARIS/LINUX:LD_LIBRARY_PATH
使环境变量生效
source /home/oracle/. profile
2.2创建目录 使用ggsci工具,创建必要的目录
/home/oracle/goldengate > ./ggsci
--调用ggsci 工具
GGSCI> create subdirs
Creating subdirectories under currentdirectory /home/oracle/goldengate
Parameter files /home/oracle/goldengate/dirprm: created
Report files /home/oracle/goldengate/dirrpt: created
Checkpoint files /home/oracle/goldengate/dirchk: created
Process status files /home/oracle/goldengate/dirpcs: created
SQL script files /home/oracle/goldengate/dirsql: created
Database definitions files /home/oracle/goldengate/dirdef: created
Extract data files /home/oracle/goldengate/dirdat: created
Temporary files /home/oracle/goldengate/dirtmp: created
Veridata files /home/oracle/goldengate/dirver: created
Veridata Lock files /home/oracle/goldengate/dirver/lock: created
Veridata Out-Of-Sync files /home/oracle/goldengate/dirver/oos: created
Veridata Out-Of-Sync XML files/home/oracle/goldengate/dirver/oosxml: created
Veridata Parameter files /home/oracle/goldengate/dirver/params: created
Veridata Report files /home/oracle/goldengate/dirver/report: created
Veridata Status files /home/oracle/goldengate/dirver/status: created
Veridata Trace files /home/oracle/goldengate/dirver/trace: created
Stdout files /home/oracle/goldengate/dirout: created
以上就是GG 的安装,在source 和target database 都执行。
三、配置Source database
注意:只配置Source database,而非target database
归档模式、附加日志、强制日志
Oracle数据库需要开启归档日志,并开启最小附加日志模式。
SQL>archive log list;(需要mount状态,并重启数据库,步骤略)
SQL> select supplemental_log_data_min from v$database; --查看是否开启了最小附加日志模式
SQL> alter database add supplemental log data; --开启最小附加日志模式
实际生产应用中,最好同时打开ORACLE的强制日志模式, 以防止源数据库因直接路径加载忽略redo生成而导致这部分数据无法同步:
SQL> select force_logging from v$database;
SQL> Alter database force logging;
开启最小附加日志模式还不够,还需要打开表级的补全日志, 可以在GoldenGate中使用add trandata命令强制重做日志记录主键值, 以保证在目标端能成功复制:
GGSCI> dblogin userid username,password pw --GoldenGate中登录OARCLE数据库
GGSCI>add trandata username.<tablename> --表名可以使用通配符
注:此方法必须要求表有主键值或者非空唯一索引键, 如果需要同步的只是一个用户或者某几个用户下的某些表, 则推荐此方法即可,如下步骤则不需要。
GGSCI> add trandata coss3.per_test,nokey,cols(sampletime, objectid)
--无主键指定字段补全的示例
也可以在数据库中打开:
SQL> alter table <tablename> add supplemental log data (primary key) columns;
千万不要小看这步日志设置,其实在GoldenGate的配置中,这步是最容易出错的环节。 如果开启DDL复制做冗灾备份,最好直接在数据库级别打开补全日志:
SQL> alter database add supplemental log data (primary key,unique,foreign key) columns;
检查一下,全是YES就OK了(整个数据库级别补全)
SQL> select supplemental_log_data_min,
supplemental_log_data_pk,supplemental_log_data_ui
from v$database;
关于Oracle补全日志,如果表中无主键, 则补全一个非空唯一索引列, 如果非空唯一索引键也没, 那么会补全除了LOB和LONG类型字段以外的所有列,更多信息请参考官方文档。
四、golden gate进程配置
4.1 在Source和Target上配置Manager Source:
GGSCI>edit param mgr --配置GoldenGate主进程参数
port 7801 --GoldenGate主进程端口号
DYNAMICPORTLIST 7802-7810 -GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端口端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出错。
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 7
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
target:
GGSCI>edit param mgr
port 7801
DYNAMICPORTLIST 7802-7810
AUTOSTART REPLICAT *
AUTORESTART REPLICAT *,RETRIES 5,WAITMINUTES 7
PURGEOLDREPLICAT S ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
保存,生成的参数文件保存在GG_HOME\ dirprm下
然后可以启动GoldenGate主控制进程:
GGSCI>start mgr
GGSCI>info all --查看进程状态
如果进程MANAGER状态显示为RUNNING则表示主进程已在运行
4.2 source端添加提取进程(extract process) 增加一个抽取:
GGSCI > add extract ext1,tranlog, begin now
GGSCI > edit params ext1
EXTRACT ext1
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
userid tianch3,password tianch3
GETTRUNCATES
REPORTCOUNT EVERY 5 MINUTES, RATE
numfiles 50000
DISCARDFILE ./dirrpt/extsa.dsc,APPEND,MEGABYTES 50
WARNLONGTRANS 2h,CHECKINTERVAL 3m
EXTTRAIL ./dirdat/sa
DYNAMICRESOLUTION
table rme_eqp;
4.3 source端添加data pump进程 GGSCI> ADD EXTRACT dpext1, EXTTRAILSOURCE ./dirdat/sa, BEGIN now
GGSCI>view params dpext1
EXTRACT dpext1
RMTHOST 172.16.1.81, MGRPORT 7801
PASSTHRU --直通模式或普通模式
numfiles 50000
RMTTRAIL ./dirdat/ra
DYNAMICRESOLUTION
table rme_eqp;
GGSCI> add rmttrail ./dirdat/ra extract dpext1
4.4 target端创建表空间及授权
Create tablespace tianch datafile size 10240m;
CREATE USER sjcktb IDENTIFIED by oracle DEFAULT TABLESPACE tianch;
GRANT CONNECT TO sjcktb;
GRANT RESOURCE TO sjcktb;
GRANT CREATE SESSION to sjcktb;
GRANT ALTER SESSION to sjcktb;
GRANT CREATE TABLE TO sjcktb;
GRANT FLASHBACK ANY TABLE TO sjcktb;
GRANT SELECT ANY DICTIONARY TO sjcktb;
GRANT SELECT ANY TABLE TO sjcktb;
GRANT ALTER ANY TABLE TO sjcktb;
GRANT UPDATE ANY TABLE TO sjcktb;
GRANT DELETE ANY TABLE TO sjcktb;
授权比较繁琐,有直接给dba权限的。
4.5 增加target进程检查点 Add a Replicat checkpoint table
GGSCI >edit params ./globals
CHECKPOINTTABLE sjcktb.checkpoint
GGSCI > dblogin userid sjcktb, password sjcktb
Successfully logged into database.
GGSCI >add CHECKPOINTTABLE sjcktb.checkpoint
4.6 配置target同步队列
GGSCI>add replicat rep1 exttrail ./dirdat/ra, checkpointtable sjcktb.checkpoint
GGSCI>view param rep1
REPLICAT rep1
USERID sjcktb,PASSWORD sjcktb
SETENV (NLS_LANG = "American_America.ZHS16GBK")
REPORT AT 01:59
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
numfiles 50000
HANDLECOLLISIONS --去重
assumetargetdefs
DISCARDFILE ./dirrpt/repsa.dsc, APPEND, MEGABYTES 50
GETTRUNCATES
ALLOWNOOPUPDATES
map rme_eqp, target sjcktb.rme_eqp;
五、start源端进程,使用数据泵初始化加载
GGSCI>start mgr
GGSCI>start extract ext1
GGSCI>start extract dpext1
GGSCI>info all
确认进程全部running
实际部署时需要注意正确的执行顺序,大致可以分为以下几步:
(1) 源端和目标端创建配置各个同步进程。
(2) 开启源端同步抓取进程,开始捕获变化。
(3) 开启初始化进程,开始数据初始化加载。
(4) 等初始化加载结束,开启目标端复制应用进程,开始实时同步应用。
六、golden gate维护
1、启动源端管理进程
GGSCI > start mgr // 启动 manager进程
2、启动所有进程
GGSCI > start ext * //启动所有抽取进程
3、查看进程状态是否为Running(表示已经启动);
GGSCI > info ext * //查看所有进程信息
4、SCI > start rep * //启动所有投递进程
5、GGSCI>info extXX,showch //查询extXX进程回滚检查点
6、GGSCI > info all //查询所有进程状态
7、GGSCI > view report rep1 //查看复制进程报告
8、GGSCI > view ggsevt //就是我们在goldengate目录下看到的ggserr.log