使用ogg实现oracle到mysql的数据传输

梁铭图 2019-06-07 21:33:00

作者介绍

梁铭图,新炬网络首席架构师,十多年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有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还有不熟的地方,希望大家可以多多提提意见。

 

最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告