作者介绍
梁铭图,新炬网络首席架构师,十多年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有Oracle OCM、Togaf企业架构师(鉴定级)、IBM CATE等认证,曾获dbaplus年度MVP以及华为云MVP等荣誉,并参与数据资产管理国家标准的编写工作。在数据库运维管理和架构设计、运维体系规划、数据资产管理方面有深入研究。
概述
Oracle GoldenGate,是由Oracle官方提供的用于解决异构数据环境中数据复制的一个商业工具。相比于其它迁移工具OGG的优势在于可以直接解析源端Oracle的redo log,因此能够实现在不需要对原表结构做太多调整的前提下完成数据实现同步,甚至可以将数据变化 实时抽取并推送到kafka等消息中间件。
本篇文章主要介绍如何使用OGG实现Oracle到MySQL数据的传输。
OGG逻辑架构
在OGG使用过程中主要涉及以下进程及文件:
-
Manager进程:需要源端跟目标端同时运行,主要作用是监控管理其它进程。
-
Extract进程:运行在源端,主要是捕获数据的变化,负责全量、增量数据的抽取。
-
Trails文件:临时存放在磁盘上的数据文件。
-
Data Pump进程:运行在数据库源端,属于Extract进程的一个辅助进程。
-
Collector进程:接收源端传输过来的数据变化,并写入本地Trail文件中。
-
Replicat进程:读取Trail文件中记录的数据变化,创建对应的DML语句并在目标端回放。
oracle源端安装配置ogg
1)安装ogg
安装ogg
unzip 123014_fbo_ggs_Linux_x64_shiphome.zip -d /data/ogg
export DISPLAY=192.168.37.4:0.0 调取图形化界面
cd /data/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/
./runInstaller
配置环境变量
export OGG_HOME=/data/ogg/12.3
export PATH=$PATH:$OGG_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib:$OGG_HOME
2)创建对应ogg用户及权限
创建ogg用户并授权:
create user ogg identified by "ogg123";
create tablespace ogg datafile '+data' size 1g autoextend off;
alter user ogg default tablespace ogg;
@sequence.sql
alter system archive log current;
赋权:
grant connect,resource,unlimited tablespace to ogg;
grant execute on utl_file to ogg;
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on DBMS_FLASHBACK to ogg;
@marker_setup.sql@ddl_setup.sql
@role_setup.sqlgrant ggs_ggsuser_role to ogg;
@ddl_enable.sql
@ddl_pin ogg
alter system set enable_goldengate_replication=true scope=both;
开启归档模式
Alter database archivelog;
开启最小附加日志
Alter databaseadd supplemental log data;
打开数据库级别force_logging属性
Alter database force logging
3)配置ogg
①进入ogg控制台,创建ogg工作目录
ggsci
create subdirs
②增加表级附加日志
dblogin userid ogg,password ogg123
add trandata OSSO. AC_OPERATOR
查看表级别附加日志是否增加成功:
INFO TRANDATA OSSO.*
③配置管理进程mgr
配置mgr进程:
GGSCI (BCPDEM-VM as ogg@shsnc) 6> edit params mgr
PORT 7809
DYNAMICPORTLIST 7800-7890
AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
# PURGEOLDEXTRACTS定时清理日志文件,这里配置相对路径,方便以后进行ogg迁移
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
④配置抽取进程
创建抽取进程
add EXTRACT ext1,tranlog,begin now,threads 1
add exttrail ./dirdat/e1/et,extract ext1,megabytes 1024
Megabytes:指定队列大小。
创建抽取数据目录
cd $OGG_HOME/dirdat
mkdir e1
配置抽取进程:
GGSCI (BCPDEM-VM as ogg@shsnc) 11> edit params ext1
EXTRACT ext1
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1")
setenv (ORACLE_SID = "shsnc")
USERID ogg, PASSWORD ogg123
EXTTRAIL ./dirdat/e1/et
DISCARDFILE ./dirrpt/ext1.dsc, APPEND, MEGABYTES 1024
REPORTCOUNT EVERY 1 MINUTES, RATE
REPORTROLLOVER AT 6:00
DISCARDROLLOVER AT 6:00
TRANLOGOPTIONS ALTARCHIVELOGDEST +ARCH
TRANLOGOPTIONS DBLOGREADER
DBOPTIONS ALLOWUNUSEDCOLUMN
WARNLONGTRANS 1H, CHECKINTERVAL 10m
DYNAMICRESOLUTION
FETCHOPTIONS USESNAPSHOT
TABLE OSSO. AC_OPERATOR;
⑤配置传输进程
创建传输进程
add extract dpex1,exttrailsource ./dirdat/e1/et,begin now
add rmttrail ./dirdat/e1/rt,extract dpex1
配置传输进程:
GGSCI (BCPDEM-VM as ogg@shsnc) 11> edit params dpex1
extract dpex1
setenv(NLS_LANG="SIMPLIFIED CHINESE.AL32UTF8")
passthru
setenv(ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1")
setenv(ORACLE_SID=shsnc)
userid ogg,password ogg123
rmthost 188.0.104.77,mgrport 7809
rmttrail ./dirdat/e1/rt
DISCARDFILE ./dirrpt/dpex1.dsc,APPEND,MEGABYTES 1024
table OSSO.AC_OPERATOR;
mysql目标端安装配置ogg
1)安装ogg
安装ogg
unzip /apps/svr/package/ogg/123015_ggs_Linux_x64_MySQL_64bit.zip -d /apps/svr/package/ogg/
tar -xvf /apps/svr/package/ogg/ggs_Linux_x64_MySQL_64bit.tar -C /apps/tools/ogg/
配置环境变量
PATH添加ogg工作目录
:/apps/tools/ogg
2)创建对应ogg用户及权限
检查目标端mysql数据库,是否存在对应同步的表
show databases;
创建ogg同步需要的库,用于存放checkpoint表
create database ogg;
创建ogg用户
grant all privileges on osso.* to 'ogg'@'%' identified by 'ogg123';
grant all privileges on osso.* to 'ogg'@'localhost' identified by 'ogg123';
grant all privileges on ogg.* to 'ogg'@'%' identified by 'ogg123';
grant all privileges on ogg.* to 'ogg'@'localhost' identified by 'ogg123';
flush privileges;
3)配置ogg
①进入ogg控制台,创建ogg工作目录
ggsci
create subdirs
②配置管理进程mgr
配置mgr进程:
GGSCI (MYSQL-TEST-1) 17> edit params mgr
port 7809
dynamicportlist 7809-7890
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
③配置ogg参数
配置global,添加checkpoint表
GGSCI (MYSQL-TEST-1) 18> edit params ./GLOBALS
ENABLEMONITORING
allowOutputDir ./dirdat
GGSCI (MYSQL-TEST-1) 19> edit params ./globals
checkpointtable ogg.checkpoint_table
配置检查点
#登录
GGSCI (MYSQL-TEST-1) 3> dblogin sourcedb ogg@188.0.104.77:3306 userid ogg password ogg123
#添加checkpoint表
GGSCI (MYSQL-TEST-1 DBLOGIN as ogg) 4> add checkpointtable ogg.checkpoint_table
#查看检查点
GGSCI (MYSQL-TEST-1 DBLOGIN as ogg) 5> info checkpointtable ogg.checkpoint_table
④配置复制进程
创建复制进程
add replicat rep1,exttrail ./dirdat/e1/rt,checkpointtable ogg.checkpoint_table
配置复制进程
GGSCI (MYSQL-TEST-1) 16> edit params rep1
replicat rep1
TARGETDB ogg@188.0.104.77:3306,userid ogg,password ogg123
DISCARDFILE ./dirrpt/rep1.dsc,append,megabytes 1024
DDL INCLUDE MAPPED
DDLERROR DEFAULT DISCARD
DDLOPTIONS REPORT
map OSSO. AC_OPERATOR,target OSSO. AC_OPERATOR;
4)ogg日常维护命令
查看ogg进程:info all
查看某个进程:info 进程名
管理进程:start/stop/delete 进程名
查看进程日志报告:view report 进程名
修改进程参数:edit params 进程名
修改全局参数:edit params ./GLOBAL
5)参数说明
目标端mysql初始化数据,oracle和mysql是两个不同的数据库,在初始化的时候就会遇到很多问题:
-
比如,oracle数据库是区分大小写的,但是mysql数据库通常是配置不区分大小写的。
-
oracle数据库支持number、varchar2类型,但导入时需转换成varchar、decimal类型。
-
所以需先对数据进行过滤,避免出现主键冲突或数据类型不支持的情况。
-
后面ogg配置部署完成后,可通过修改目标端ogg的复制进程参数,直接指定进程从哪个SCN号同步数据。
在配置ogg时,配置的日志等路径,建议配置成相对路径,方便以后可以快速迁移ogg。
oracle到mysql的ogg属于异构的ogg,因此需要借助defgen命令生成的映射文件, 也就是两个表的映射关系,并把文件传到目标端相应位置下,才能完成数据库同步。因此需要注意字符集问题, 源端和目标端配置的字符集需一致,setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8"),否则可能会导致同步失败。
上述对ogg实现oracle到mysql的数据同步,只是一个初步的理解,对部署搭建ogg还有不熟的地方,希望大家可以多多提提意见。
来源:oschina
链接:https://my.oschina.net/u/4263597/blog/4294229