使用OGG实现Oracle到MySQL数据迁移

一.环境信息

名称源端目标端
OGG版本OGG 19.1.0.0.4For OracleOGG 19.1.0.0.3 For MySQL
数据库版本Oracle 11.2.0.4MySQL 5.7
OGG_HOME/home/oracle/ogg/opt/ogg
IP地址172.24.104.214172.24.104.207
数据库用户scottorcl
mgr进程mgrmgr
extract进程exirei
datapump进程expump

二.ogg软件安装

三.安装前准备

1.源端OGG配置

基础环境配置:

查看当前环境是否满足要求:
SQL> SELECT NAME,LOG_MODE,OPEN_MODE,PLATFORM_NAME,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
如果条件不满足则实行该部分:
#### 开启归档(开启归档需要重启数据库)
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list;
 
#### 开启附加日志和强制日志
SQL> alter database add supplemental log data;
SQL> alter database force logging;
SQL> alter system switch logfile;
 
#### 启用OGG支持11.2.0.4或以上需要执行。
SQL> show parameter enable_goldengate_replication
SQL> alter system set enable_goldengate_replication=true;
 
#### 再次查看当前环境是否满足要求
SQL> SELECT NAME,LOG_MODE,OPEN_MODE,PLATFORM_NAME,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE

创建oracle用户:

创建ogg用户
#### 查看当前数据库已存在的表空间,可使用已有表空间或新建单独的表空间
SQL> SELECT TABLESPACE_NAME, CONTENTS FROM DBA_TABLESPACES;
 
#### 查看当前表空间文件数据目录
SQL> SELECT NAME FROM V$DATAFILE;
 
#### 创建一个新的OGG用户的表空间
SQL>CREATE TABLESPACE OGG_DATA DATAFILE '/u01/app/oracle/oradata/orcl/ogg01.dbf' SIZE 1G autoextend on next 100M maxsize 30G;
 
#### 创建ogg用户且指定对应表空间并授权
CREATE USER ogg IDENTIFIED BY ogg DEFAULT TABLESPACE OGG_DATA;
grant connect,resource,unlimited tablespace to ogg;
grant create session,alter session 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 select any transaction to ogg;
grant sysdba to ogg;
grant execute on dbms_streams_adm to ogg;
grant execute on dbms_flashback to ogg;
exec dbms_goldengate_auth.grant_admin_privilege('OGG');

2.目标端OGG配置

MySQL数据库OGG用户创建

mysql> create user 'ogg'@'%' identified by 'ogg';
mysql> grant all on *.* to 'ogg'@'%';
 
#### 提前创建好ogg存放checkpoint表的数据库
mysql> create database ogg;

四.正式配置

1.源端OGG 管理进程(MGR)配置

#### 编辑/创建mgr配置文件
ggsci> edit params mgr
 
PORT 7809
DYNAMICPORTLIST 8000-8050
-- AUTOSTART extract
-- AUTORESTART extract,retries 4,waitminutes 4
STARTUPVALIDATIONDELAY 5
ACCESSRULE, PROG *, IPADDR 172.24.104.*, ALLOW
ACCESSRULE, PROG SERVER, ALLOW
PURGEOLDEXTRACTS /home/oracle/ogg/dirdat/*, USECHECKPOINTS,MINKEEPFILES 3
 
#### 启动并查看mgr状态
ggsci> start mgr
ggsci> info all
ggsci> view report mgr

2.目标端OGG 管理进程(MGR)配置

#### 编辑/创建mgr配置文件
ggsci> edit params mgr
 
PORT 7809
DYNAMICPORTLIST 8000-8050
-- AUTOSTART extract
-- AUTORESTART extract,retries 4,waitminutes 4
STARTUPVALIDATIONDELAY 5
ACCESSRULE, PROG *, IPADDR 172.24.104.*, ALLOW
ACCESSRULE, PROG SERVER, ALLOW
PURGEOLDEXTRACTS /opt/ogg/dirdat/*, USECHECKPOINTS,MINKEEPFILES 3

 
#### 启动并查看mgr状态
ggsci> start mgr
ggsci> info all
ggsci> view report mgr

3.源端OGG 表级补全日志(trandata)配置

#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
 
#### 使用ogg用户登录appdb实例(TNS配置)对scott所有表增加表级补全日志
ggsci> dblogin userid ogg@orcl,password ogg
ggsci> add trandata scott.*

4.源端OGG 抽取进程(extract)配置

#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
 
#### 创建一个新的增量抽取进程,从redo日志中抽取数据
ggsci> add extract exti,tranlog,begin now
 
#### 创建一个抽取进程抽取的数据保存路径并与新建的抽取进程进行关联
ggsci> add exttrail /home/oracle/ogg/dirdat/ms,extract exti,megabytes 1024
 
#### 创建抽取进程配置文件
ggsci> edit params exti
extract exti
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
setenv (ORCLE_SID = "orcl")
userid ogg@orcl,password ogg
discardfile /home/oracle/ogg/dirrpt/exti.dsc,append,megabytes 1024
exttrail /home/oracle/ogg/dirdat/ms
statoptions reportfetch
reportcount every 1 minutes,rate
warnlongtrans 1H,checkinterval 5m
table scott.*;
 
#### 启动源端抽取进程
ggsci> start exti
ggsci> info all
ggsci> view report exti

5.源端OGG 传输进程(pump)配置

pump进程启动时需要与目标端的mgr进程进行连接,所以需要优先将目标端的mgr提前配置好,否则会报错连接被拒绝,无法传输抽取的日志文件到目标端对应目录下.
如果要关闭备份端的MGR进程一定要先关闭源端的PUMP进程,不至于
ABEND掉,出现未知的错误。
也就是
启动:先启动目标端mgr进程,再启动pump进程
关闭:先关闭源端pump进程,再关闭目标端mgr进程

#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
 
#### 增加一个传输进程与抽取进程抽取的文件进行关联
shell> add extract extpump,exttrailsource /home/oracle/ogg/dirdat/ms
 
#### 增加配置将抽取进程抽取的文件数据传输到远程对应目录下
#### 注意rmttrail参数指定的是目标端的存放目录,需要目标端存在该目录路径
shell> add rmttrail /opt/ogg/dirdat/ms,extract extpump
 
 
#### 创建传输进程配置文件
shell>edit params extpump
extract extpump
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
setenv (ORCLE_SID = "orcl")
userid ogg@orcl,password ogg
RMTHOST 172.24.104.207,MGRPORT 7809
RMTTRAIL /opt/ogg/dirdat/ms
discardfile /home/oracle/ogg/dirrpt/extpump.dsc,append,megabytes 1024
table scott.*;
 
#### 启动源端抽取进程
#### 启动前确保目标端mgr进程已开启
ggsci> start extpump
ggsci> info all
ggsci> view report extpump

6.源端OGG 异构mapping文件(defgen)生成

#### 创建mapping文件配置
shell> cd $OGG_HOME
shell> vim ./dirprm/mapping_scott.prm 
defsfile ./dirdef/scott.def,purge
userid ogg@orcl,password ogg
table scott.*;
 
#### 基于配置生成scott用户的mapping文件
#### 默认生成的文件保存在$OGG_HOME目录的dirdef目录下
shell> ./defgen paramfile ./dirprm/mapping_scott.prm
 
#### 将该文件拷贝至目标端对应的目录
shell> scp ./dirdef/scott.def root@172.24.104.207:/opt/ogg/dirdef

7.目标端OGG 检查点日志表(checkpoint)配置

#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
 
ggsci> edit param ./GLOBALS
checkpointtable ogg.ggs_checkpoint
 
 
ggsci> dblogin sourcedb ogg@172.24.104.207:3306 userid ogg
ggsci> add checkpointtable ogg.ggs_checkpoint

8.目标端OGG 回放线程(replicat)配置

#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
 
#### 添加一个回放线程并与源端pump进程传输过来的trail文件关联,并使用checkpoint表确保数据不丢失
ggsci> add replicat repi,exttrail /opt/ogg/dirdat/ms,checkpointtable ogg.ggs_checkpoint
 
#### 增加/编辑回放进程配置文件
ggsci> edit params repi
replicat repi
targetdb orcl@172.24.104.207:3306,userid ogg,password ogg
sourcedefs /opt/ogg/dirdef/scott.def
discardfile /opt/ogg/dirrpt/repi.dsc,append,megabytes 1024
HANDLECOLLISIONS
MAP scott.*,target orcl.*;

注意:replicat进程只需配置完成,无需启动,待全量数据抽取完毕后启动目标端回放进程即可完成数据准实时同步。

8.源端OGG 全量抽取进程(extract)配置

#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
 
#### 增加/编辑全量抽取进程配置文件
#### 其中RMTFILE指定抽取的数据直接传送到远端对应目录下
#### 注意:RMTFILE参数指定的文件只支持2位字符,如果超过replicat则无法识别
ggsci> edit params extinit
SOURCEISTABLE
SETENV (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
SETENV (ORACLE_SID=orcl)
SETENV (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
USERID ogg@orcl,PASSWORD ogg
RMTHOST 172.24.104.207,MGRPORT 7809
RMTFILE /opt/ogg/dirdat/ms,maxfiles 100,megabytes 1024,purge
TABLE scott.*;
 
#### 启动并查看抽取进程正常
shell> nohup ./extract paramfile ./dirprm/extinit.prm reportfile ./dirrpt/extinit.rpt &
 
## 查看日志是否正常进行全量抽取
shell> tail -f ./dirrpt/extinit.rpt

8.目标端OGG 全量回放进程(replicat)配置

#### 切换至ogg软件目录并执行ggsci进入命令行终端
shell> cd $OGG_HOME
shell> ggsci
 
ggsci> edit params repinit
SPECIALRUN
END RUNTIME
TARGETDB orcl@172.24.104.207:3306,USERID ogg,PASSWORD ogg
EXTFILE /opt/ogg/dirdat/ms
DISCARDFILE ./dirrpt/repinit.dsc,purge
MAP scott.*,TARGET orcl.*;
 
#### 启动并查看回放进程正常
shell> nohup ./replicat paramfile ./dirprm/repinit.prm reportfile ./dirrpt/repinit.rpt &
 
#### 查看日志是否正常进行全量回放
shell> tail -f ./dirrpt/repinit.rpt

检查mysql数据库的数据是否与初始化抽取进程记录数一致。

9.启动目标端OGG 回放线程(replicat)

向原数据库插入几条数据
启动目标端ogg回放线程(replicat)

start repi

检查目标数据库是否有刚才新增的测试数据。

五.新增表同步

1.源端捕获进程参数文件中曾加相应的表

由于原来的参数为table scott.*;已经包含了所有的表,这里不需要增加。

edit params exti

2.目标端传输进程参数文件中加相应的表

由于原来的参数为MAP scott.,target orcl.;已经包含了所有的表,这里不需要增加。

edit params repi

3.源端数据库增加附加日志

GGSCI (template) 2> dblogin userid ogg,password ogg;
Successfully logged into database.

GGSCI (template as ogg@orcl) 3> add trandata scott.*
GGSCI (template as ogg@orcl) 4>info trandata scott.*

4.重启源端ext 和pum进程;

这里没有修改无需重启。

5.源端OGG 异构mapping文件(defgen)重新生成并拷贝至目标目录

shell> cd $OGG_HOME
shell> vim ./dirprm/mapping_scott.prm 
defsfile ./dirdef/scott.def,purge
userid ogg@orcl,password ogg
table scott.*;
shell> ./defgen paramfile ./dirprm/mapping_scott.prm
shell> scp ./dirdef/scott.def root@172.24.104.207:/opt/ogg/dirdef

6.目标端停止回放进程stop repi

stop repi

7.目标端创建表结构

8.源端创建测试数据

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值