Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步

 

Oracle GoldenGate实现MySQL和Oracle的双向同步

试验环境

操作系统

Windows7 64位

Windows7 64位

IP地址

192.168.105.221

192.168.105.220

数据库

MySQL

Oracle(企业版)

数据库账号/密码

ggs/123456

ogg/root

数据表

oggtest.test

ogg.mytest

GoldenGate

OracleGoldenGate 12.3.0.1.2 for MySQL on Windows (64 bit)

Oracle GoldenGate 12.2.0.2.3 for Oracle on Windows (64 bit)

dirdat目录

D:\ogg12\dirdat

G:\OGG12\dirdat

Oracle GoldenGate的介绍

参考: https://www.cnblogs.com/qiumingcheng/p/5435907.html

Oracle GoldenGate准备

https://www.oracle.com/cn/database/technology/goldengate-downloads.html 

从该地址下载Oracle中的OGG和MySQL中适用的OGG。最好是下载相同版本的OGG(否则最后需要在抽取进程中进行版本的转换)。

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第1张图片

一、MySQL的环境准备 

1.1 开启二进制日志 

找到MySQL的配置文件my.ini(一般该文件目录在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini)中找到[mysqld]添加以下内容

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第2张图片

重启mysql服务

cmd> net stop mysql #停止服务
cmd> net start mysql #启动服务

查看数据库当前日志模式

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第3张图片

Log_bin 的值为ON说明日志的二进制模式已经开启,日志的保存路径为E:\mysqlbin\binlog.index 

1.2 创建管理用户和测试表

登录mysql数据库创建数据库表ptests,如图设置主键自增(注意一定要设置主键,否则OGG同步设置完后,只能同步新增,删除和更新无法同步)

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第4张图片

 1.3 Oracle GoldenGate for MySQL的安装

解压压缩文件后将文件123012_ggs_Windows_x64_MySQL_64bit.zip解压缩至D:\ogg12

(1)在源端服务器安装的OGG根目录按住SHift+右键cmd进入OGG根目录的命令面板

(2)运行ogg:执行ggsci

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第5张图片

(3)添加manager进行到windows服务,使之可以随windows开机自行启动

  • 手动指定服务名GGMGR(默认就是GGMGR)。用edit params ./GLOBALS命令(注意./GLOBALS为大写),进入编辑文件
# 编辑 GLOBALS文件(没有自动创建)
GGSCI (SC-201708231409) 1> edit params ./GLOBALS
  • 输入下面内容:

MGRSERVNAME GGMGR

  • 保存退出后,用install addservice命令添加服务
    E:\OGG\oggmsql>install addservice
    Service 'GGMGR' created.
    Install program terminated normally.

(4)、输入create subdirs自动创建需要用到的文件夹

GGSCI (SC-201708231409) 1> create subdirs

主要目录介绍:
dirchk:存放检查点(Checkpoint)文件
dirdat:存放Trail与Extract文件,以后详述
dirdef:通过DEFGEN工具生成的源或目标的数据定义文件
dirpcs:存放进程状态文件
dirprm:存放参数文件
dirrpt:存放进程报告文件
dirsql:存放SQL脚本文件
dirtmp:当事务所需要的内存超过已分配内存时,缺省存储于此。

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第6张图片

此处参考:https://www.jianshu.com/p/5ab57fd785ad 

二、Oracle环境准备

2.1 安装企业版Oracle

此处参考:

2.2 开启Oracle的日志归档模式

首先打开sqlplus,使用sys登录到oracle(最好使用sqlplus,其他的客户端好像不好使)

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第7张图片

  • 查看数据库当前归档模式
SQL> select log_mode from v$database;

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第8张图片

  • archive log list;查看自动归档状态和归档进程,shutdown immediate;关闭数据库,startup mount;启动到mount状态,alter database archivelog;修改数据库为归档模式,alter database open;打开数据库
SQL> archive log list;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

2.3 开启最小附加日志

SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
NO
SQL> alter database add supplemental log data;
Database altered.

2.4 打开force logging

SQL> select force_logging from v$database;
FOR
---
NO
SQL> alter database force logging;
Database altered.
SQL> select force_logging from v$database;
FOR
---
YES

此处参考:https://www.jianshu.com/p/276fede48835 

2.5 创建用户和测试表

(1)创建表空间或者使用已有的表空间

(2)创建表,设置主键

create table mytest(
         id NUMBER NOT NULL constraint pk_id primary key,
         name VARCHAR2(10) NOT NULL,
         age NUMBER(2) NOT NULL,  
         sex VARCHAR2(10) NOT NULL        
);

(3)赋予用户ogg权限

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;
grant insert any table to ogg;
grant delete any table to ogg;
grant update any table to ogg;
grant sysdba to ogg;

2.6 Oracle GoldenGate for Oracle安装

此处可参考:https://www.jianshu.com/p/276fede48835

三、配置MySQL到Oracle的同步

3.1 MySQL源端配置

(1)登录数据库

dblogin sourcedb oggtest@localhost:3306, userid ggs, password 123456

 

(2)配置mgr进程

edit param mgr

mgr.prm文件内容
PORT 7809
DYNAMICPORTLIST  7840-7914
--STARTUPVALIDATIONDELAY 5
autorestart extract *,waitminutes 2,retries 5	
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
PURGEOLDEXTRACTS D:\ogg12\dirdat\*, USECHECKPOINTS, MINKEEPDAYS 7

--启动mgr
start mgr

 

(3) 配置ext1抽取进程

(一)、配置ext1.prm文件
edit param ext1

文件内容:
EXTRACT ext1
tranlogoptions altlogdest "E:\mysqlbin\binlog.index"
SOURCEDB oggtest@localhost:3306, USERID ggs, PASSWORD 123456
DISCARDROLLOVER ON FRIDAY
DISCARDFILE D:\ogg12\dirrpt\ext1.dsc, APPEND, MEGABYTES 1024
REPORTCOUNT EVERY 30 MINUTES, RATE
EXTTRAIL D:\ogg12\dirdat\et,format release 12.2
NUMFILES 1
NOCOMPRESSDELETES
CACHEMGR CACHESIZE 1G
TABLE oggtest.test;


(二)、添加抽取进程
Add EXTRACT ext1 ,tranlog, begin now
ADD EXTTRAIL D:\ogg12\dirdat\et,EXTRACT ext1,megabytes 100

 

 

(4)配置dp1投递进程

(一)、配置dp1.prm文件
edit param dp1

文件内容:
EXTRACT dp1
RMTHOST 192.168.105.220, MGRPORT 7809,COMPRESS
RMTTRAIL G:\OGG12\dirdat\et
--PASSTHRU
NUMFILES 500
TABLE oggtest.test;


(2)、添加投递进程dp1
Add EXTRACT dp1 EXTTRAILSOURCE D:\ogg12\dirdat\et
Add RMTTRAIL G:\OGG\dirdat\et,EXTRACT dp1,MEGABYTES 100

注意: 
    G:\OGG\dirdat\et为目标端的dirdat文件目录,
    D:\ogg12\dirdat\et为源端的dirdat文件目录

 

 

(6)创建表定义文件defgen.prm

(1)配置表定义文件defgen.prm
edit param defgen.prm

文件内容:
defsfile D:\ogg12\dirdef\defgen.prm
sourcedb oggtest@localhost:3306, userid ggs,password 123456
table oggtest.test;

(2)生成defgen文件
GGSCI (DESKTOP-0G8S27V DBLOGIN as ggs) 19> exit
cmd D:\ggs\oggMySQL>defgen paramfile D:\ogg12\dirdef\defgen.prm

将源端dirdef目录下生成的文件放到目标端的dirdef目录下

(7)启动进程

(一)、启动抽取进程
start ext1
(二)、启动投递进程
start dp1


注意:启动ext1、dp1前必须将管理进程启动
启动dp1前将目标端的mgr管理进程启动起来

使用info all查看进程状态,若Status都为running状态则代表进程启动成功Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第9张图片

3.2 Oracle目标端配置

(1)登录数据库

dblogin userid ogg,password root

(2)配置管理进程mgr

(一)、配置管理进程mgr
edit param mgr

文件内容:
PORT 7809
DYNAMICPORTLIST  7840-7914
autorestart extract *,waitminutes 3,retries 5
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS G:\OGG12\dirdat\*, USECHECKPOINTS, MINKEEPDAYS 10
LAGREPORTHOURS 1
LAGINFOMINUTES 10
LAGCRITICALMINUTES 15

(二)、启动管理进程
start mgr

(3)添加表级的trandata,输入add trandata ogg.mytest 

添加表级的trandata
add trandata ogg.mytest

注:表名可以使用通配符,如add trandata ggs.*

(4)配置复制进程rep1

(一)、配置rep1.prm文件
edit param rep1

文件内容:
replicat rep1
sourcedefs G:\OGG12\dirdef\defgen.prm
userid ogg,password root
reperror default,discard
discardfile G:\OGG12\dirrpt\rep1.dsc,append,megabytes 50
allownoopupdates
dynamicresolution
map oggtest.test,target ogg.mytest;

(二)、创建checkpointtable
add CHECKPOINTTABLE ogg.checkpoint

注意:表checkpoint表的表名不能和数据库中的表名同名,否则会报错,checkpoint用来记录目标端每次读取时出现终端的记录,相当于一个读取的日志记录表。

(三)、添加复制进程rep1
add replicat rep1,exttrail G:\OGG12\dirdat\ex, checkpointtable ogg.checkpoint

(5)启动目标端的进程

--启动复制进程rep1
start rep1

可以info all命令查看进程的状态:

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第10张图片

 

四、配置Oracle 到MySQL的同步

4.1 Oracle源端配置

(1)配置管理进程mgr

  此处配置与3.2 Oracle目标端配置中管理进程配置一致。

(2)配置抽取进程ext1

(一)配置ext.prm文件
edit param ext1

文件内容:
EXTRACT ext1
USERID ogg, PASSWORD root
DISCARDFILE G:\OGG12\dirrpt\ext1.dsc,APPEND,MEGABYTES 1024
EXTTRAIL G:\OGG12\dirdat\ex
TABLE ogg.mytest;

(二)添加抽取进程ext
Add EXTRACT ext1 ,tranlog, begin now
ADD EXTTRAIL G:\OGG12\dirdat\ex,EXTRACT ext1,megabytes 100

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第11张图片

(3)配置投递进程dp1

(一)配置dp1.prm文件
edit param dp1

文件内容:
EXTRACT dp1
RMTHOST 192.168.105.220, MGRPORT 7809,COMPRESS
RMTTRAIL G:\OGG12\dirdat\ex
--PASSTHRU
NUMFILES 500
TABLE ogg.mytest;


(二)添加投递进程dp1
Add EXTRACT dp1 EXTTRAILSOURCE G:\OGG12\dirdat\ex
Add RMTTRAIL D:\ogg12\dirdat\ex,EXTRACT dp1,MEGABYTES 100

注意: 
    D:\ogg12\dirdat\ex为目标端的dirdat文件目录,
    G:\OGG12\dirdat\ex为源端的dirdat文件目录

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第12张图片

 (4)配置表定义文件odefgen


(1)配置表定义文件odefgen.prm
edit param odefgen.prm

文件内容:
Defsfile G:\OGG12\dirdef\odefgen.prm
userid ogg,password root
Table ogg.mytest;

(2)生成defgen文件
exit
defgen paramfile G:\OGG12\dirdef\odefgen.prm

将源端dirdef目录下生成的文件放到目标端的dirdef目录下
 

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第13张图片

(5)启动进程

(一)、启动抽取进程
start ext1
(二)、启动投递进程
start dp1


注意:启动ext1、dp1前必须将管理进程启动
启动dp1前将目标端的mgr管理进程启动起来

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第14张图片

4.2 MySQL目标端配置

(1)配置管理进程mgr

此处配置与3.1 Oracle源端配置中管理进程配置一致。

(2)配置复制进程rep1

(一)、配置rep1.prm文件
edit param rep1

文件内容:
replicat rep1
sourcedefs G:\OGG12\dirdef\odefgen.prm
userid ogg,password root
reperror default,discard
discardfile G:\OGG12\dirrpt\rep1.dsc,append,megabytes 50
allownoopupdates
dynamicresolution
map oggtest.test,target ogg.mytest;

(二)、创建checkpointtable
add CHECKPOINTTABLE oggtest.checkpoint

注意:表checkpoint表的表名不能和数据库中的表名同名,否则会报错,checkpoint用来记录目标端每次读取时出现终端的记录,相当于一个读取的日志记录表。

(三)、添加复制进程rep1
add replicat rep1,exttrail G:\OGG12\dirdat\ex, checkpointtable oggtest.checkpoint

(3)启动目标端的进程

--启动复制进程rep1
start rep1

可以info all命令查看进程的状态:

Windows环境下Oracle GoldenGate实现MySQL和Oracle的双向同步_第15张图片

这部分可以参考:https://www.jianshu.com/p/5ab57fd785ad

五、测试

5.1从MySQL到Oracle

1.开启源端服务并都是runing状态(mgr和ext1和dp1)

2.开启目标端服务并都是runing状态(mgr和rep1)

3.在源端的MySQL数据库中加入一条数据

4.在各个服务都运行正常的情况下,查看Mysql数据中的数据是否正常同步

原表:

目标表:

 5.2从Oracle到MySQL

1.开启源端服务并都是runing状态(mgr和ext1和dp1)

2.开启目标端服务并都是runing状态(mgr和rep1)

3.在源端的Oracle数据库中加入一条数据

4.在各个服务都运行正常的情况下,查看Mysql数据中的数据是否正常同步

原表:

目标表:

参考资源:

https://www.jianshu.com/p/5ab57fd785ad

https://www.jianshu.com/p/276fede48835

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据库)