OGG(oracle goldengate)实现oracle到mysql异构环境数据同步

环境介绍

source

数据库版本:Oracle RDBMS 11.2.0.3
goldengate版本:OGG for oracle OGG-12.2.0.1
IP:192.168.1.1
安装目录:/home/oggs
OGG数据库用户:ggs
OGG数据库表空间:oggtbs

target

数据库版本:MySQL 5.7.24
goldengate版本:OGG for mysql OGG-12.2.0.1
IP:192.168.1.2
安装目录:/home/oggt
OGG数据库用户:ggt
测试数据库:targetdb
OGG自用数据库:ogg

源端环境准备

创建操作系统账户oggora,该用户要与数据库系统账户同组以能访问相关文件。

[root@source ~]# useradd -g oinstall oggora
[root@source ~]# id oggora
uid=501(oggora) gid=500(oinstall) groups=500(oinstall)

源端数据库设置

创建ogg表空间,数据库用户,测试用户,测试表

--创建表空间,数据库OGG用户,赋权限,修改数据库参数允许OGG
SQL> CREATE TABLESPACE oggtbs DATAFILE 
  '/home/oracle/oradata/oggtbs.dbf' SIZE 1024M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
Tablespace created.

SQL> create user ggs identified by 123456 default tablespace oggtbs;
User created.

SQL> grant connect,resource,dba to ggs;
Grant succeeded.

SQL> exec dbms_goldengate_auth.grant_admin_privilege('ggs');
PL/SQL procedure successfully completed.

配置oracle数据库,开启归档,附加日志,force logging

SQL> create pfile='/home/oracle/init20190923.ora' from spfile;
SQL> select LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
LOG_MODE     FOR SUPPLEME
------------ --- --------
ARCHIVELOG   NO  NO

SQL> archive log list;
数据库日志模式             非存档模式
自动存档             禁用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     5
当前日志序列           7

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  801701888 bytes
Fixed Size                  2259480 bytes
Variable Size             532678120 bytes
Database Buffers          264241152 bytes
Redo Buffers                2523136 bytes
数据库装载完毕。
SQL> alter database archivelog;

数据库已更改。

SQL> alter database open;

数据库已更改。

设置源上的数据库的FORCE LOGGING

SQL> select force_logging from v$database;

FOR
---
NO

SQL> ALTER DATABASE FORCE LOGGING;

数据库已更改。

SQL> select force_logging from v$database;

FOR
---
YES

切换日志,使更改生效

SQL> alter system switch logfile;

系统已更改。

打开数据库级别的补充日志(supplemental Log)

SQL> select supplemental_log_data_min from v$database;

SUPPLEME
--------
NO

SQL> alter database add supplemental log data;

数据库已更改。

SQL> select supplemental_log_data_min from v$database;

SUPPLEME
--------
YES

SQL> select LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
LOG_MODE     FOR SUPPLEME
------------ --- --------
ARCHIVELOG   YES YES 

安装ogg软件

在源端和目标端对应目录下安装OGG软件。

安装步骤参考之前的笔记:https://blog.csdn.net/weixin_41229271/article/details/98888847

源端OGG配置

添加checkpoint

GGSCI (source) 2> dblogin userid ggs,password 123456
 
#添加GoldenGate的checkpoint表
GGSCI (source) 4> edit PARAMS GLOBALS
 
MGRSERVNAME GGMGR
checkpointtable ggs.checkpoint
 
GGSCI (source) 4> add checkpointtable ggs.checkpoint
 
Successfully created checkpoint table ggs.checkpoint.

添加附加日志

测试表建表语句:

create user scott identified by 123456;
GRANT CONNECT,RESOURCE TO SCOTT;
grant dba to scott;
CREATE TABLE DEPT
       (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
  DNAME VARCHAR2(14) ,
  LOC VARCHAR2(13) ) ;
INSERT INTO DEPT VALUES
  (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
  (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
  (40,'OPERATIONS','BOSTON');

添加所需同步的表的附加日志,示例

GGSCI (source ) 2>ADD TRANDATA scott.dept

管理进程配置

GGSCI (source) 3> edit param mgr
#端口号
PORT 7809
#允许端口范围
DYNAMICPORTLIST 7801-8200
#自启抽取进程
AUTOSTART ER *
#重启抽取进程,每三分钟一个 重复五次
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
#删除超过三天的处理过的投递文件
PURGEOLDEXTRACTS /home/oggs/dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
 
GGSCI (source) 3> start mgr
GGSCI (source) 4> info mgr

target端环境准备

创建操作系统用户

创建操作系统用户,数据库以及数据库用户。

[root@source ~]# useradd oggmy
3.创建target端测试数据库和相应的表,创建ogg的用户,赋予权限,创建ogg用到的数据库。

-- 创建测试数据库及表
-- 注意Mysql数据库是大小写敏感的,而Oracle数据库对大小写不敏感。
-- 并且Oracle数据库会把所有的小写字符内部都转换成大写
-- 所以要注意在映射到Mysql时要么Mysql中将表全部建成大写
-- 要么就是在使用Map映射是将每个表的对应关系写清楚,否则复制会失败。
mysql> create database targetdb;
mysql> use targetdb;
--在targetdb下创建对应目标表

-- 创建OGG自己用的数据库及用户
mysql> create database ogg;
mysql> grant all on *.*  to 'ggt'@'%' identified by '123456';
mysql> flush privileges

目标端安装ogg软件

[root@target ~]# mkdir -p /home/oggt
[root@target ~]# chown oggmy:oggmy /home/oggt
[root@target oggt]#  chown oggmy:oggmy /oggt/122022_ggs_Linux_x64_MySQL_64bit.zip

[oggmy@target oggt]$ unzip 122022_ggs_Linux_x64_MySQL_64bit.zip
[oggmy@target oggt]$ rm -rf 122022_ggs_Linux_x64_MySQL_64bit.zip
[oggmy@target oggt]$ tar -xvf ggs_Linux_x64_MySQL_64bit.tar
[oggmy@target oggt]$ rm -rf ggs_Linux_x64_MySQL_64bit.tar
[oggmy@target oggt]$ ./ggsci
GGSCI (target) 1> create subdirs
GGSCI (target) 1> dblogin sourcedb ogg@192.168.1.2:3306 userid ggt password 123456

GGSCI (target DBLOGIN as ggt) 2> edit params ./GLOBALS

checkpointtable ogg.checkpoint
GGSCI (target DBLOGIN as ggt) 3> view  params ./GLOBALS

checkpointtable ogg.checkpoint
	

管理进程配置

GGSCI (target) 2> edit params mgr

PORT 9900 
DYNAMICPORTLIST 9901-9920,9930 
AUTOSTART ER * 
AUTORESTART ER *,RETRIES 4,WAITMINUTES 4 
STARTUPVALIDATIONDELAY 5 
purgeoldextracts /oggt/dirdat/*,usecheckpoints,minkeephours 2 
ACCESSRULE, PROG *, IPADDR 192.168.1.*, ALLOW 
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
GGSCI (target) 2> start mgr
Manager started.

GGSCI (target) 3> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING   

创建数据定义文件

source端创建Oracle数据库需要复制同步的数据定义文件,拷贝到target端相应目录下。

-- 配置数据定义文件参数
GGSCI (source) 5> edit params defsgrdb
userid ggs password 123456
defsfile /home/oggs/dirdef/sgrdb.def
table scott.dept;

-- 生成数据定义文件
[oggora@source oggs]$ ./defgen paramfile dirprm/defsgrdb.prm

-- 拷贝生成的数据定义文件到目标端数据定义目录下
[oggora@source dirdef]$ scp /home/oggs/dirdef/sgrdb.def oggmy@192.168.1.2:/home/oggt/dirdef/

 数据初始化加载配置

       设置初始化进程。启动源端和目标端的初始化进程,初始化数据,数据初始化完成后初始化进程会自动停止。,,测试使用少量几条数据可以跳过此步,手动保持一致即可。

1.source端初始化捕获处理任务
-- 配置初始化加载捕获参数文件
GGSCI (source) 3> edit params init
extract init
userid ggs password 123456
rmthost 192.168.1.2,mgrport 9900
rmttask replicat,group repinit
table scott.dept;

-- 在source系统上执行以下命令添加一个Extract进程叫做init,确认添加成功:
dblogin userid ggs password 123456
GGSCI (source) 3> add extract init,sourceistable
#delete init
GGSCI (ogg4o.gzds.gov.cn) 15> info extract *, task

EXTRACT    INIT      Initialized   2018-03-08 22:20   Status STOPPED
Checkpoint Lag       Not Available
Log Read Checkpoint  Not Available
                     First Record         Record 0
Task                 SOURCEISTABLE

2.target端初始化捕获交付任务
-- 配置初始化加载交付参数文件
GGSCI (source) 3> edit params repinit
GGSCI (jx2.hubu.edu.cn DBLOGIN as ogg4m) 5>  view  params repinit     

replicat repinit
targetdb ogg@192.168.1.2:3306 userid ggt password 123456
--由于是异构环境,所以要指定sourcedefs参数,使用source数据库的数据定义文件。
sourcedefs /oggt/dirdef/defsgrdb.def
discardfile /oggt/dirrpt/repinit.dsc,purge
MAP USERNAME.TABLE1,target targetdb.TABLE1;


-- 在target端创建一个初始化加载交付批处理任务组,确认添加成功:
dblogin sourcedb ogg@202.114.156.132:23307 userid ggt password 123456

GGSCI (source) 3> add replicat repinit,specialrun

GGSCI (source DBLOGIN as ggt) 10> info replicat *,task

REPLICAT   REPINIT   Initialized   2018-09-13 20:41   Status STOPPED
Checkpoint Lag       00:00:00 (updated 00:00:04 ago)
Log Read Checkpoint  Not Available
Task                 SPECIALRUN

源端抽取进程配置

GGSCI (source) 5> edit  params EX_ORCL1
extract EX_ORCL1
DYNAMICRESOLUTION
SETENV (ORACLE_SID="orcl1")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ggs,password 123456
REPORT AT 01:59
REPORTROLLOVER AT 02:00
CACHEMGR, CACHESIZE 256MB
DBOPTIONS  ALLOWUNUSEDCOLUMN
WARNLONGTRANS 3h,CHECKINTERVAL 20000000s
EXTTRAIL ./dirdat/e1,format release 12.2
NUMFILES 3000
EOFDELAYCSECS 30
GETTRUNCATES
TRANLOGOPTIONS DBLOGREADER
TRANLOGOPTIONS DBLOGREADERBUFSIZE 1048576
BR BRINTERVAL 2H , BRDIR BR
GETUPDATEBEFORES
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
FETCHOPTIONS FETCHPKUPDATECOLS
TABLE scott.dept;

GGSCI (source) 5> view params EX_ORCL1
 
增加一个抽取进程EX_HJ_G,名字可以根据需要修改
	GGSCI (source) 6> add extract EX_ORCL1,tranlog,THREADS 2, begin now
EXTRACT added.
 
将EX_EMP抽取的源数据变更数据trail写到该文件夹
	GGSCI (source) 7> add exttrail ./dirdat/e1,extract EX_ORCL1
EXTTRAIL added.

源端投递进程配置

GGSCI (source) 8> edit params pm_orcl1
extract pm_orcl1
SETENV (ORACLE_SID="orcl1")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ggs, password 123456
REPORT AT 01:59
REPORTROLLOVER AT 02:00
CACHEMGR, CACHESIZE 256MB
FLUSHCSECS 30
NUMFILES 3000
EOFDELAYCSECS 30
RMTHOST 192.168.1.2,MGRPORT 9900, TCPBUFSIZE 100000, TCPFLUSHBYTES 300000, COMPRESS
RMTTRAIL /oggt/dirdat/p1,format release 12.2
GETTRUNCATES
PASSTHRU
DYNAMICRESOLUTION
GETUPDATEBEFORES
TABLE scott.dept;

GGSCI (source) 9> view params pm_orcl1
 
GGSCI (source) 10> add extract pm_orcl1,exttrailsource ./dirdat/e1
EXTRACT added.
 
GGSCI (source) 11> add rmttrail /oggt/dirdat/p1,extract pm_orcl1
RMTTRAIL added.

目标端应用进程配置

GGSCI (target) 4> edit param re_orcl1
replicat re_orcl1
--DYNAMICRESOLUTION
targetdb ogg@192.168.1.2:3306 userid ggt password 123456
--handlecollisions
--assumetargetdefs
REPORT AT 01:59
REPORTROLLOVER AT 02:00
CACHEMGR, CACHESIZE 256MB
REPERROR DEFAULT,ABEND
discardfile /oggt/dirrpt/re_orcl1.dsc,purge
DISCARDROLLOVER AT 06:00
GETTRUNCATES
NUMFILES 3000
EOFDELAYCSECS 30
--ASSUMETARGETDEFS
ALLOWNOOPUPDATES
GETUPDATEBEFORES
--NOCOMPRESSDELETES
sourcedefs /oggt/dirdef/defsgrdb.def
DBOPTIONS NOLIMITROWS
--INSERTUPDATES
--INSERTDELETES
--INSERTALLRECORDS
MAP scott.dept,target targetdb.dept;

GGSCI (target) 8> view param RE_TEST
 
GGSCI (target) 9> add replicat re_orcl1,exttrail /oggt/dirdat/p1,checkpointtable ogg.checkpoint
REPLICAT added.

启动抽取,投递,应用进程,测试数据是否同步成功。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值