orcel向mysql推送数据_使用ogg实现oracle到mysql的数据传输

概述

Oracle GoldenGate,是由Oracle官方提供的用于解决异构数据环境中数据复制的一个商业工具。相比于其它迁移工具OGG的优势在于可以直接解析源端Oracle的redo log,因此能够实现在不需要对原表结构做太多调整的前提下完成数据实现同步,甚至可以将数据变化 实时抽取并推送到kafka等消息中间件。

本篇文章主要介绍如何使用OGG实现Oracle到MySQL数据的传输。

OGG逻辑架构

049f6ad17c904889f3cb8fca45b61c69.png

在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)参数说明

1486dd16f3fa8ea54ff527d61e9f214a.png

96e559717e67676704f1d472b344f149.png

总结

目标端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还有不熟的地方,希望大家可以多多提提意见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值