技术标签: mysql 同步 Oracle
最近做了一次使用OGG工具将Oracle数据同步到MySQL的实验,中间掺杂了mycat的简单使用,在这里将整个过程进行简单的回顾和梳理。
实验环境:
实验目标:
将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的问题。
????️阅读本文需要 8 分钟> PIP-45 Pluggable metadata interface该方案提供一个统一的可插拔的接口,抽象出 Pulsar 的元数据实现。重构...
-37 内存泄露监测http://www.alonemonkey.com/2016/05/15/fbretaincycledetector-analyse/ FBRetainCycleDetector源码分析https://blog.csdn.net/java2013liu/article/details/52242969精准 iOS 内存泄露检测工具MLeaksFind...
文章目录1 打破双亲委派机制1 打破双亲委派机制上节自定义的类加载器,实现了加载指定目录的class,但是还是遵循了双亲委派机制如何打破双亲委派机制很简单,我们已经知道了双亲委派机制就是在ClassLoader的loadClass方法实现的,只要我们重写该方法就可以了呗package study.wyy.jvm.classLoader;import java.io.FileInputStream;public class MyClassLoader extends ClassLoader
<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
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...
package com.lianxi;import java.lang.reflect.Array;import java.util.Arrays;/** * 数组与Object的关系,及其反射类型 * * Array:可以对数组进行反射的类 * * 数组的反射: * 相同数据类型,相同维度的数组的Class都属于同一个 * * @author zjw */p
1、Android Studio -》src-》main-》assets-》data-》dcloud_control.xml添加 debug=“true” syncDebug=“true”
点击左上方蓝字关注我们开源的开放性使得诸多的开发者可以加入其中,自2016年开源以来,飞桨一直致力于建设开源开放的开发者社区,也正是有了众多contributor们的加入,飞桨社区得以不断...
题目链接题目描述在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中。一共有 nn 头奶牛,其中第 ii 头牛在直线上所处的位置可以用一个整数坐标 pi (0 ≤ pi ≤ 108) 来表示。在无聊的日子里,奶牛们常常在自己的牛栏里与其它奶牛交流一些八卦新闻。每头奶牛发出的声音响度是一样的,而由于声波的能量衰减,某头奶牛发出的声音只能被与它距离不超过 d(0 ≤ d ≤ 104 ) 的奶牛所听到,这样这对奶牛就称为可以相互交流的。现在给出所有奶牛的位置和声音所能传播的最远距离 d ,请你编个程序来计算你的养
过程中,如果手机没有任何反应,或者电脑上打开的iTunes显示无法识别设备等,均为进入DFU模式失败,需要重新操作。此方法不排除因后续iOS系统升级或其它原因等而失效,取证时应找相关设备再次验证后再对检材操作!由于本人能力有限,纯粹做个记录,文中如有不妥和错漏之处欢迎批评指正。【著作所有权归作者蘇小沐所有,转载请注明文章出处】名称时间开始编辑日期2021 年 11 月 18 日最后编辑日期2022 年 11 月 28 日。
射频识别技术漫谈(13)——Mifare S50与Mifare S70
考试排名Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19617Accepted Submission(s): 6788Proble...