mysql 同步 Oracle_搭建简单的Oracle到MySQL同步_投资百晓生的博客-程序员秘密

技术标签: mysql 同步 Oracle  

最近做了一次使用OGG工具将Oracle数据同步到MySQL的实验,中间掺杂了mycat的简单使用,在这里将整个过程进行简单的回顾和梳理。

1dc94ed59a8af011987756625b1bbedf.png

实验环境:

9c612e62d050faa0f87cb2e0bca15bea.png

实验目标:

将A服务器上的Oracle数据通过OGG同步到C库上的MySQL库。但由于C服务器不能直接访问,需要通过B服务器的Mycat代理层访问。所以最终实现需要在A和B上面搭建OGG同步,并在B上面把数据分发到C上。

实验核心问题:

1、涉及到Oracle到MySQL的异构库同步,需要构建库表之间的关系映射

2、因为OGG不是直连目标库,涉及到通过代理层分发目标数据的问题

3、涉及到mycat工具,需要针对mycat进行必要的配置

实验过程:

一、环境搭建

Oracle、MySQL和Mycat的搭建不在本次实验的重点范围,这里不再赘述。

1.1、A上的OGG环境搭建

(1)上传OGG介质到A服务器并解压

cd /app/ogg/ogg_home

unzip 122022_ggs_Linux_x64_MySQL_64bit.zip

(2)采用静默安装方式安装OGG

cd fbo_ggs_Linux_x64_shiphome/Disk1/response/

修改配置文件

cp oggcore.rsp oggcore.rspbak

vi oggcore.rsp

oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2

#不要修改这个值!!

INSTALL_OPTION=ORA11g

#根据系统是12c还是11g选择ORA12c或者ORA11g

SOFTWARE_LOCATION=/app/ogg/ogg_home

#写上goldengate的安装目录

START_MANAGER=false

#是否在配置完成后自动启动mgr进程,是就选true,否就选false

MANAGER_PORT=

#在start_manager为true时添加,选择mgr启动端口号

DATABASE_LOCATION=

#在start_manager为true时添加,写上$ORACLE_HOME的值

INVENTORY_LOCATION=

#指定inventory目录的位置,在使用windows操作系统时是一个可选参数。这里由于安装过Oracle所以不需填写

UNIX_GROUP_NAME=

#指定一个组,windows系统时不需要写,这里由于安装过Oracle所以不需填写

开始静默安装

./runInstaller -silent -responseFile /app/ogg/ogg_home/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp

安装完成后,安装命令执行页面会输出以下内容:

The installation of Oracle GoldenGate Core was successful.

Please check '/oracle/app/oraInventory/logs/silentInstall2016-07-08_11-26-16AM.log' for more details.

Successfully Setup Software.

(3)配置ogg子目录

./ggsci

GGSCI (A) > create subdirs

Creating subdirectories under current directory /app/ogg/ogg_home

Parameter files /app/ogg/ogg_home/dirprm: created

Report files /app/ogg/ogg_home/dirrpt: created

Checkpoint files /app/ogg/ogg_home/dirchk: created

Process status files /app/ogg/ogg_home/dirpcs: created

SQL script files /app/ogg/ogg_home/dirsql: created

Database definitions files /app/ogg/ogg_home/dirdef: created

Extract data files /app/ogg/ogg_home/dirdat: created

Temporary files /app/ogg/ogg_home/dirtmp: created

Credential store files /app/ogg/ogg_home/dircrd: created

Masterkey wallet files /app/ogg/ogg_home/dirwlt: created

Dump files /app/ogg/ogg_home/dirdmp: created

(4)进入数据库创建用户及授权,创建测试表

sqlplus / as sysdba

SQL> create user goldengate identified by ogg_123;

SQL> grant resource to goldengate;

SQL> grant select any table to goldengate;

SQL> grant select any dictionary to goldengate;

SQL> grant alter any table to goldengate;

SQL> grant create session to goldengate;

SQL> grant CREATE SESSION, ALTER SESSION to goldengate;

SQL> grant CONNECT,SELECT ANY TRANSACTION to goldengate;

SQL>create table goldengate.test_ogg (a varchar(100),b int);

1.2、B上的OGG环境搭建

(1)上传OGG介质到B服务器并解压(OGG的安装介质需要根据OS和DB的类型选择)

cd /app/ogg

tar -xvf ggs_Linux_x64_MySQL_64bit.zip

MySQL版本的OGG介质解压完无需安装,可以直接使用

(2)进入ogg目录配置子目录

GGSCI (B) > create subdirs

Creating subdirectories under current directory /app/ogg

Parameter files /app/ogg/dirprm: created

Report files /app/ogg/dirrpt: created

Checkpoint files /app/ogg/dirchk: created

Process status files /app/ogg/dirpcs: created

SQL script files /app/ogg/dirsql: created

Database definitions files /app/ogg/dirdef: created

Extract data files /app/ogg/dirdat: created

Temporary files /app/ogg/dirtmp: created

Credential store files /app/ogg/dircrd: created

Masterkey wallet files /app/ogg/dirwlt: created

Dump files /app/ogg/dirdmp: created

二、A上的OGG配置

(1)配置管理进程

GGSCI (A) >edit param mgr

PORT 7809

DYNAMICPORTLIST 7800-7810

USERID goldengate PASSWORD ogg_123

AUTORESTART ER *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 60

LAGREPORTMINUTES 10

LAGCRITICALMINUTES 10

PURGEOLDEXTRACTS /app/ogg/ogg_home/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 12

(2)配置全局参数文件

GGSCI (A) > edit param /app/ogg/ogg_home/globals

GGSCHEMA GOLDENGATE -->数据库中的OGG用户

(3)配置提取进程参数

GGSCI (A) > edit params ex1

extract ex1

tranlogoptions dblogreader

DYNAMICRESOLUTION -->建议使用大写

userid goldengate,password ogg_123

exttrail /app/ogg/ogg_home/dirdat/xs -->建议使用绝对路径

table goldengate.test_ogg;

GGSCI (A) > add extract ex1,tranlog,begin now,threads 1 -->根据redo日志的thread设置

GGSCI (A) > add exttrail /app/ogg/ogg_home/dirdat/xs,extract ex1 megabytes 1000

(4)配置投递进程参数

GGSCI (A)> edit param dp1

extract dp1

passthru

rmthost 192.168.133.84,mgrport 7809 -->B的IP地址

rmttrail /app/ogg/dirdat/xs -->建议使用绝对路径,使用B的路径

GGSCI (A) > add extract dp1 exttrailsource /app/ogg/ogg_home/dirdat/xs

GGSCI (A) > add rmttrail /app/ogg/dirdat/xs,extract dp1

(5)配置定义文件

由于同步的是异构数据库,所以需要生成一个定义文件作为两个数据库之间库表的关系映射

GGSCI (A) > edit param t1

defsfile /app/ogg/ogg_home/dirdef/t1.prm

(6)生成定义文件:

[A ogg]$ ./defgen paramfile /app/ogg/ogg_home/dirprm/t1.prm

***********************************************************************

Oracle GoldenGate Table Definition Generator for Oracle

Version 11.2.0.4.0 OGGCORE_12.2.0.1.0_PLATFORMS_140727.2135.1

Linux, x64, 64bit (optimized), Oracle 11g on Feb 21 2017 00:53:39

Starting at 2018 14:45:39

Operating System Version:

Linux

Version #1 SMP Tue Jan 29 11:47:41 EST 2013, Release 2.6.32-358.el6.x86_64

Node: A

Machine: x86_64

soft limit hard limit

Address Space Size : unlimited unlimited

Heap Size : unlimited unlimited

File Size : unlimited unlimited

CPU Time : unlimited unlimited

Process id: 32025

** Running with the following parameters **

defsfile dirdef/t1.prm

userid goldengate,password ***********

Retrieving definition for goldengate.test_ogg.

Definitions generated for 1 table in dirdef/t1.prm. --->生成需要的定义文件

(7)把定义文件传到B上

scp /app/ogg/ogg_home/dirdef/t1.prm b:/app/ogg/dirdef

(8)开启数据库的最小附加日志 -->必须开,可在线开启

[A oracle] sqlplus / as sysdba

SQL> alter database add supplemental log data;

(9)打开ENABLE_GOLDENGATE_REPLICATION 参数 -->11.2.0.4之后必须开启

SQL>ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

(10)开启数据库归档

-->建议开,不开虽然也可以同步,但是容易出问题,特别是RAC环境

SQL> shutdown immediate

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

三、B上的OGG配置

GGSCI (B) > edit param mgr

dynamicportlist 7840-7914

autorestart extract *,retries 5,waitminutes 7

purgeoldextracts /app/ogg/dirdat/*,usecheckpoints,minkeepdays 10

lagreporthours 1

laginfominutes 30

lagcriticalminutes 45

accessrule,prog server,allow

(2)启动管理进程

GGSCI (B) > start mgr

GGSCI (B) > info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

(3)配置checkpoint table

由于配置checkpoint table 需要在MySQL中新建两张表,但通过mycat连接MySQL的会话不能直接建表,所以要先修改mycat的配置文件

cp /app/mycat/conf/schema.xml /app/mycat/conf/schema.xmlbak

vi /app/mycat/conf/schema.xml

在下面这部分内容添加需要建表的信息

添加完成后在ggsci中继续配置

GGSCI (B) > edit param ./globals

CHECKPOINTTABLE ogg_db.checkpoint

在OGG中登陆到MySQL添加checkpoint table

GGSCI (B) > dblogin SOURCEDB [email protected],userid ogg_user password ogg_123

-->使用C的IP地址连到mysql,注:192.168.46.230这个不是C的物理IP,而是mycat的VIP

GGSCI (B) > add checkpointtable ogg_db.checkpointtab

GGSCI (B) > info checkpointtable ogg_db.checkpointtab

(4)配置复制进程

GSCI (B) > edit param rep1

replicat rep1

sourcedefs /app/ogg/dirdef/t1.prm

TRAGETDB ogg_db,userid root,password ogg_123

reperror default,discard

discardfile /app/ogg/dirrpt/rep1.dsc,append,megabytes 1000

map goldengate.test_ogg, ogg_db.TEST_OGG;

-->MySQL中表名默认区分大小写,所以这里需要注意表名的大小写区别。

GGSCI (B) > add replicat rep1,exttrail /app/ogg/dirdat/xs,checkpointtable ogg_db.checkpointtab

(5)修改从源数据库复制过来的定义文件权限

[B]# chown -R ogg:oggadm /app/ogg/dirdef/t1.prm

(6)在MySQL中创建测试表

先修改mycat的配置文件

cp /app/mycat/conf/schema.xml /app/mycat/conf/schema.xmlbak2

添加完成后进入MySQL创建测试表

[B]#mysql -uogg_user -p -h192.168.46.230 -P3306

MySQL>create table ogg_db.TEST_OGG (a varchar(100),b int);

至此,所有配置已经完成,接下来开始验证配置是否可行。

四、开启同步操作

(1)B上先启动复制进程

[B]#./ggsci

GSCI (B) > info all

GSCI (B) > start rep1

(2)A上启动抽取及投递进程

[A]#./ggsci

GSCI (A) > info all

GSCI (A) > start mgr

GSCI (A) > start ex1

GSCI (A) > start dp1

观察A、B两库的dirdat/目录

[A]ls -l dirdat/

--rw-r------ 1 oracle:oinstall 0 Jun 12 16:09 xs0000000000

[Bls -l dirdat/

--rw-r------ 1 ogg:oggadm 0 Jun 12 16:09 xs0000000000

A已完成投递文件初始化,B也已经接收到投递文件

测试添加数据:

[A] sqlplus / as sysdba

SQL> insert into goldengate.test_ogg values ('a',1);

SQL> commit;

--rw-r------ 1 oracle:oinstall 1921 Jun 12 16:14 xs0000000001

--rw-r------ 1 ogg:oggadm 1921 Jun 12 16:14 xs0000000000

A已生成新的投递文件,B也接收到了投递文件

查看C上的表数据情况

[B]mysql -uogg_user -p -h192.168.46.230 -P3306

MySQL>select * from ogg_user.TEST_OGG;

+--------+-------+

| A | B |

| a | 1 |

1 row in set (0.00 sec)

至此,Oracle到MySQL同步搭建完成。

五、安装配置遇到的问题小结:

1、ERROR OGG-02091 Operation not supported because enable_goldengate_replication is not set to true.

问题分析:enable_goldengate_replication 这个参数在11.2.0.4和12.1.0.2以后才出现,目的是为了让OGG更好地监控,只有设置为true之后才能使用ogg的一些功能。

解决方案:

ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

2、 ERROR OGG00868 Oracle GoldenGate Capture for Oracle, t1.prm: The number of Oracle redo threads (1) is not the same as the number of checkpoint threads (2). EXT

问题分析:配置抽取进程时配置的thread跟redo的thread对应不上

先将原来Add的extract 删掉,

GGSCI(A)> delete extract ex1

然后重新配置如下,

GGSCI(A) > add extract ex1,tranlog,threads 1,begin now

GGSCI(A) > add exttrail /app/ogg/ogg_home/dirdat/xs,extract ex1,megabytes 1000

GGSCI(A) > start extract ex1

3、ERROR OGG-00770 Failed to connect to MySQL database engine for HOST localhost,

DATABASE ogg_db, USER ogg_user, PORT 3306.

问题分析:由于一开始配置的targetdb 是ogg_db,所以ogg复制进程默认在本地服务器登陆MySQL。但是此时需要连接的是C库的MySQL。

修改复制进程:

[B]./ggsci

GGSCI(B) > edit param rep1

修改targetdb 为 [email protected]

删除并重新启动rep1

GGSCI(B) >dblogin sourcedb [email protected] userid ogg_user ,password ogg_123;

GGSCI(B) >delete replicat rep1

GGSCI(B) > start rep1

4、start ex1和start dp1之后。dp1无法读取dirdat/xs0000000000文件

问题现象:

GGSCI(A) >stats dp1

...

Log Read Checkpoint File /app/ogg/ogg_home/dirdat/xs000000000

First Record RBA 0

解决方案:alter extract ex1 etrollover;

小结:

1、这次实验中是用新建的测试表进行同步,没有涉及搬数据的过程;所以在生产环境搭建时需要额外步骤初始化数据。

2、mysql库表默认区分大小写可能导致入库时目标表找不到,而且容易跟其他问题混淆,所以建议一律用大写表名。

3、通过代理层同步数据时,需要注意源库和目标库OGG的IP地址配置;具体表现为:源库OGG位置的源端地址一律为代理层服务器IP,目标库OGG上配置targetdb时带上最终目标库的IP

4、OGG版本建议目标库OGG版本大于或等于源库OGG版本

5、源库在不开启归档的情况虽然可以发起同步,但是同步过程容易出现因找不到归档文件而导致抽取进程abended的问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29532927/article/details/113137890

智能推荐

脉冲星 10 月脉动 | Pulsar 2.5.0 功能预览,Pulsar Meetup 上海站报名中_StreamNative的博客-程序员秘密

????️阅读本文需要 8 分钟> PIP-45 Pluggable metadata interface该方案提供一个统一的可插拔的接口,抽象出 Pulsar 的元数据实现。重构...

工欲善其事,必先利其器_bravegogo的博客-程序员秘密

-37 内存泄露监测http://www.alonemonkey.com/2016/05/15/fbretaincycledetector-analyse/ FBRetainCycleDetector源码分析https://blog.csdn.net/java2013liu/article/details/52242969精准 iOS 内存泄露检测工具MLeaksFind...

03 类加载机制解析四:打破双亲委派机制_wyaoyao93的博客-程序员秘密

文章目录1 打破双亲委派机制1 打破双亲委派机制上节自定义的类加载器,实现了加载指定目录的class,但是还是遵循了双亲委派机制如何打破双亲委派机制很简单,我们已经知道了双亲委派机制就是在ClassLoader的loadClass方法实现的,只要我们重写该方法就可以了呗package study.wyy.jvm.classLoader;import java.io.FileInputStream;public class MyClassLoader extends ClassLoader

JSP带中文请求参数乱码的解决方法_RabbitEatPumpkin的博客-程序员秘密_jsp 带中文

<br />一、在请求页面的请求参数需要用encodeURI进行转码,然后在接收请求的页面需要进行字符集转换。<br />本例中的请求和接收页面的字符集都是UTF-8:<br />1.请求的JSP页面用JavaScript的encodeURI()方法将参数转码:<br />function toView(param){<br />     var encodeparam = encodeURI(param) ;<br />     window.location.href="/naias/advAna_fo

构建NVDLA vp时的错误_chifredhong的博客-程序员秘密

1、make: * No rule to make target错误ake[4]: *** No rule to make target '/home/chifred/NVDLA/NVDLA_debug/vp_large/libs/qbox/dtc/libfdt/fdt.c', needed by 'libfdt/fdt.o'。 停止。Makefile:342: recipe for t...

数组与Object的关系及其反射类型,数组反射应用实例,通过Array类实现数组的反射_wjw_java的博客-程序员秘密

package com.lianxi;import java.lang.reflect.Array;import java.util.Arrays;/** * 数组与Object的关系,及其反射类型 * * Array:可以对数组进行反射的类 * * 数组的反射: * 相同数据类型,相同维度的数组的Class都属于同一个 * * @author zjw */p

随便推点

uniapp 自定义基座调试(Android)_一个博客的博客-程序员秘密

1、Android Studio -》src-》main-》assets-》data-》dcloud_control.xml添加 debug=“true” syncDebug=“true”

Contributor等你解锁! | PPSIG报名开始啦~_飞桨PaddlePaddle的博客-程序员秘密

点击左上方蓝字关注我们开源的开放性使得诸多的开发者可以加入其中,自2016年开源以来,飞桨一直致力于建设开源开放的开发者社区,也正是有了众多contributor们的加入,飞桨社区得以不断...

洛谷P1296 奶牛的耳语_水蛙菌的博客-程序员秘密

题目链接题目描述在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中。一共有 nn 头奶牛,其中第 ii 头牛在直线上所处的位置可以用一个整数坐标 pi (0 ≤ pi ≤ 108) 来表示。在无聊的日子里,奶牛们常常在自己的牛栏里与其它奶牛交流一些八卦新闻。每头奶牛发出的声音响度是一样的,而由于声波的能量衰减,某头奶牛发出的声音只能被与它距离不超过 d(0 ≤ d ≤ 104 ) 的奶牛所听到,这样这对奶牛就称为可以相互交流的。现在给出所有奶牛的位置和声音所能传播的最远距离 d ,请你编个程序来计算你的养

【iOS取证篇】iPhone6及以下版本进入恢复模式和DFU模式操作方法_蘇小沐的博客-程序员秘密

过程中,如果手机没有任何反应,或者电脑上打开的iTunes显示无法识别设备等,均为进入DFU模式失败,需要重新操作。此方法不排除因后续iOS系统升级或其它原因等而失效,取证时应找相关设备再次验证后再对检材操作!由于本人能力有限,纯粹做个记录,文中如有不妥和错漏之处欢迎批评指正。【著作所有权归作者蘇小沐所有,转载请注明文章出处】名称时间开始编辑日期2021 年 11 月 18 日最后编辑日期2022 年 11 月 28 日。

Mifare S50与Mifare S70_River-D的博客-程序员秘密

射频识别技术漫谈(13)——Mifare S50与Mifare S70

HDU 2093 考试排名 (水题)_xcatf的博客-程序员秘密

考试排名Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19617Accepted Submission(s): 6788Proble...

推荐文章

热门文章

相关标签