环境介绍
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软件。
安装步骤参考之前的笔记:
源端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.
启动抽取,投递,应用进程,测试数据是否同步成功。