zl程序教程

您现在的位置是:首页 >  其他

当前栏目

采用OGG12.2同步MySQL5.7数据至Oracle11g

同步数据 oracle11g 采用 mysql5.7
2023-06-13 09:16:45 时间
参考文档:
http://blog.itpub.net/31374736/viewspace-2871626/
https://www.codepeople.cn/2019/06/05/MySqltoOracle-ogg-conf/
测试实施:盛夏光年

第一步: 测试环境概述

实验环境

源端软件版本

目标端软件版本

操作系统

Red Hat Enterprise Linux Server release 6.5

Red Hat Enterprise Linux Server release 6.5

IP地址

192.168.100.8 7809

192.168.100.8 7909

数据库版本

5.7.25-log MySQL Community Server (GPL)

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0

OGG管理用户

oggtest/mysql

goldengate/Ora_1234

同步数据

DEPT,EMP,SALGRADE(OGGTEST数据库)

DEPT,EMP,SALGRADE(OGGTEST用户)

GoldenGate

 第二步:MySQL/Oracle安装部署

 第三步:源端配置(MySQL)

1. 修改MySQL的配置文件my.cnf,mysql必须要要开启log-bin并且binlog必须为row模式。

   binlog_format=ROW
   log_bin=ON
   log_bin_basename=/mysql/log/3306/binlog/studydb-binlog
   log_bin_index=/mysql/log/3306/binlog/studydb-binlog.index
   # enable binlog must set server-id, you can modify if there are multiple services
   server-id=1

2. 创建测试数据

   create database oggtest;
   use oggtest;
   create table DEPT (
   DEPTNO int(2) not null,
   DNAME varchar(14),
   LOC varchar(13)
   );

   alter table DEPT add constraint PK_DEPT primary key (DEPTNO);
   
   create table EMP (
   EMPNO int(4) not null,
   ENAME varchar(10),
   JOB varchar(9),
   MGR int(4),
   HIREDATE date,
   SAL int(7 ),
   COMM int(7 ),
   DEPTNO int(2)
   );

   alter table EMP add constraint PK_EMP primary key (EMPNO);
   alter table EMP add constraint FK_DEPTNO foreign key (DEPTNO) references DEPT (DEPTNO);
   insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK');
   insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS');
   insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO');
   insert into DEPT (DEPTNO, DNAME, LOC) values (40, 'OPERATIONS', 'BOSTON');
   commit;

   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7369, 'SMITH', 'CLERK', 7902, str_to_date('17-12-1980', '%d-%m-%Y'), 800, null, 20);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7499, 'ALLEN', 'SALESMAN', 7698, str_to_date('20-02-1981', '%d-%m-%Y'), 1600, 300, 30);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7521, 'WARD', 'SALESMAN', 7698, str_to_date('22-02-1981', '%d-%m-%Y'), 1250, 500, 30);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7566, 'JONES', 'MANAGER', 7839, str_to_date('02-04-1981', '%d-%m-%Y'), 2975, null, 20);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7654, 'MARTIN', 'SALESMAN', 7698, str_to_date('28-09-1981', '%d-%m-%Y'), 1250, 1400, 30);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7698, 'BLAKE', 'MANAGER', 7839, str_to_date('01-05-1981', '%d-%m-%Y'), 2850, null, 30);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7782, 'CLARK', 'MANAGER', 7839, str_to_date('09-06-1981', '%d-%m-%Y'), 2450, null, 10);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7788, 'SCOTT', 'ANALYST', 7566, str_to_date('19-04-1987', '%d-%m-%Y'), 3000, null, 20);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7839, 'KING', 'PRESIDENT', null, str_to_date('17-11-1981', '%d-%m-%Y'), 5000, null, 10);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7844, 'TURNER', 'SALESMAN', 7698, str_to_date('08-09-1981', '%d-%m-%Y'), 1500, 0, 30);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7876, 'ADAMS', 'CLERK', 7788, str_to_date('23-05-1987', '%d-%m-%Y'), 1100, null, 20);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7900, 'JAMES', 'CLERK', 7698, str_to_date('03-12-1981', '%d-%m-%Y'), 950, null, 30);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7902, 'FORD', 'ANALYST', 7566, str_to_date('03-12-1981', '%d-%m-%Y'), 3000, null, 20);
   insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7934, 'MILLER', 'CLERK', 7782, str_to_date('23-01-1982', '%d-%m-%Y'), 1300, null, 10);
   commit;

   CREATE TABLE  salgrade (
   grade INT PRIMARY KEY,
   losal INT,
   hisal INT
   );

   INSERT INTO salgrade VALUES(1,700,1200);
   INSERT INTO salgrade VALUES(2,1201,1400);
   INSERT INTO salgrade VALUES(3,1401,2000);
   INSERT INTO salgrade VALUES(4,2001,3000);
   INSERT INTO salgrade VALUES(5,3001,9999);
   commit;

3. 创建同步用户

   mysql> create user oggtest@'%' identified by 'mysql';
   mysql> grant all privileges on oggtest.* to  oggtest@'%';
   mysql> flush privileges;

4. 源端ogg软件安装

   mkdir -p /ogg/gg21c
   tar -xvf ggs_Linux_x64_MySQL_64bit.tar
   chown -R mysql:mysql /ogg/
   cd /ogg/gg21c
   ./ggsci
   create subdirs
   GGSCI (performance) 2> create subdirs
   Creating subdirectories under current directory /ogg/gg12c
   Parameter files                /ogg/gg12c/dirprm: created
   Report files                   /ogg/gg12c/dirrpt: created
   Checkpoint files               /ogg/gg12c/dirchk: created
   Process status files           /ogg/gg12c/dirpcs: created
   SQL script files               /ogg/gg12c/dirsql: created
   Database definitions files     /ogg/gg12c/dirdef: created
   Extract data files             /ogg/gg12c/dirdat: created
   Temporary files                /ogg/gg12c/dirtmp: created
   Credential store files         /ogg/gg12c/dircrd: created
   Masterkey wallet files         /ogg/gg12c/dirwlt: created
   Dump files                     /ogg/gg12c/dirdmp: created

5. 配置mgr管理进程

   dblogin sourcedb oggtest@192.168.100.8:3306 userid oggtest password mysql
   注释:oggtest这个是数据库库名称 userid 是指登录账号 password 是指登录密码
   GGSCI (performance) 4> view param mgr
   port 7809
   dynamicportlist  7800-7900
   purgeoldextracts ./dirdat/*,usecheckpoints, minkeepdays 7

6. 配置抽取进程

   add extract e_mysql,tranlog,begin now
   add exttrail ./dirdat/my,extract e_mysql,MEGABYTES 500
   GGSCI (performance) 6> view param e_mysql
   extract e_mysql
   setenv (MYSQL_HOME="/mysql/app/mysql/")
   tranlogoptions altlogdest /mysql/log/3306/binlog/studydb-binlog.index
   sourcedb oggtest@192.168.100.8:3306, userid oggtest,password mysql
   exttrail ./dirdat/my,FORMAT RELEASE 12.2
   discardfile ./dirrpt/emy.dsc,append,megabytes 1024
   dynamicresolution
   gettruncates
   TABLE oggtest.*;
   注释:MYSQL_HOME是指你自己的MYSQL安装目录,FORMAT RELEASE 12.2是指支持的ogg版本是12.2可以删除。

7. 配置投递进程

   ggsci-> ADD EXTRACT p_mysql, EXTTRAILSOURCE ./dirdat/my
   ggsci-> ADD RMTTRAIL ./dirdat/or, EXTRACT p_mysql, MEGABYTES 500
   GGSCI (performance) 8> view param p_mysql
   extract p_mysql
   rmthost 192.168.100.8,mgrport 7909
   rmttrail ./dirdat/or
   passthru
   gettruncates
   TABLE oggtest.*;

8. 异构平台配置defgen

   root@performance dirprm# cat mydef.prm 
   defsfile ./dirdef/defgen.prm
   sourcedb oggtest@192.168.100.8:3306 userid oggtest password mysql
   TABLE oggtest.*;

   ./defgen paramfile dirprm/mydef.prm
   将生成的def传送到目标端,ogg软件dirdef目录下,由于测试环境在一台机器,此处直接cp。
   cp defgen.prm /oracleogg/gg12c/dirdef

 第四步:目标端配置(Oracle)

1. ogg软件安装部署(略)

2. 创建测试用户,并同步源端测试数据

   create user oggtest identified by Ora_1234 default tablespace TBS_OGG temporary tablespace TEMP quota unlimited on TBS_OGG;

   --同步源端测试数据
   DROP TABLE OGGTEST.DEPT;
   CREATE TABLE OGGTEST.DEPT (
     DEPTNO NUMBER(11,0) NOT NULL,
     DNAME NVARCHAR2(14),
     LOC NVARCHAR2(13)
   )
   LOGGING
   NOCOMPRESS
   PCTFREE 10
   INITRANS 1
   STORAGE (
     INITIAL 1048576 
     NEXT 1048576 
     MINEXTENTS 1
     MAXEXTENTS 2147483645
     BUFFER_POOL DEFAULT
   )
   PARALLEL 1
   NOCACHE
   DISABLE ROW MOVEMENT
   ;

   -- ----------------------------
   -- RECORDS OF DEPT
   -- ----------------------------
   INSERT INTO OGGTEST.DEPT VALUES ('10', 'ACCOUNTING', 'NEW YORK');
   INSERT INTO OGGTEST.DEPT VALUES ('20', 'RESEARCH', 'DALLAS');
   INSERT INTO OGGTEST.DEPT VALUES ('30', 'SALES', 'CHICAGO');
   INSERT INTO OGGTEST.DEPT VALUES ('40', 'OPERATIONS', 'BOSTON');

   -- ----------------------------
   -- TABLE STRUCTURE FOR EMP
   -- ----------------------------
   DROP TABLE OGGTEST.EMP;
   CREATE TABLE OGGTEST.EMP (
     EMPNO NUMBER(11,0) NOT NULL,
     ENAME NVARCHAR2(10),
     JOB NVARCHAR2(9),
     MGR NUMBER(11,0),
     HIREDATE DATE,
     SAL NUMBER(11,0),
     COMM NUMBER(11,0),
     DEPTNO NUMBER(11,0)
   )
   LOGGING
   NOCOMPRESS
   PCTFREE 10
   INITRANS 1
   STORAGE (
     INITIAL 1048576 
     NEXT 1048576 
     MINEXTENTS 1
     MAXEXTENTS 2147483645
     BUFFER_POOL DEFAULT
   )
   PARALLEL 1
   NOCACHE
   DISABLE ROW MOVEMENT
   ;

   -- ----------------------------
   -- RECORDS OF EMP
   -- ----------------------------
   INSERT INTO OGGTEST.EMP VALUES ('7369', 'SMITH', 'CLERK', '7902', TO_DATE('1980-12-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '800', NULL, '20');
   INSERT INTO OGGTEST.EMP VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', TO_DATE('1981-02-20 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1600', '300', '30');
   INSERT INTO OGGTEST.EMP VALUES ('7521', 'WARD', 'SALESMAN', '7698', TO_DATE('1981-02-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1250', '500', '30');
   INSERT INTO OGGTEST.EMP VALUES ('7566', 'JONES', 'MANAGER', '7839', TO_DATE('1981-04-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '2975', NULL, '20');
   INSERT INTO OGGTEST.EMP VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', TO_DATE('1981-09-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1250', '1400', '30');
   INSERT INTO OGGTEST.EMP VALUES ('7698', 'BLAKE', 'MANAGER', '7839', TO_DATE('1981-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '2850', NULL, '30');
   INSERT INTO OGGTEST.EMP VALUES ('7782', 'CLARK', 'MANAGER', '7839', TO_DATE('1981-06-09 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '2450', NULL, '10');
   INSERT INTO OGGTEST.EMP VALUES ('7788', 'SCOTT', 'ANALYST', '7566', TO_DATE('1987-04-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '3000', NULL, '20');
   INSERT INTO OGGTEST.EMP VALUES ('7839', 'KING', 'PRESIDENT', NULL, TO_DATE('1981-11-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '5000', NULL, '10');
   INSERT INTO OGGTEST.EMP VALUES ('7844', 'TURNER', 'SALESMAN', '7698', TO_DATE('1981-09-08 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1500', '0', '30');
   INSERT INTO OGGTEST.EMP VALUES ('7876', 'ADAMS', 'CLERK', '7788', TO_DATE('1987-05-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1100', NULL, '20');
   INSERT INTO OGGTEST.EMP VALUES ('7900', 'JAMES', 'CLERK', '7698', TO_DATE('1981-12-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '950', NULL, '30');
   INSERT INTO OGGTEST.EMP VALUES ('7902', 'FORD', 'ANALYST', '7566', TO_DATE('1981-12-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '3000', NULL, '20');
   INSERT INTO OGGTEST.EMP VALUES ('7934', 'MILLER', 'CLERK', '7782', TO_DATE('1982-01-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1300', NULL, '10');

   -- ----------------------------
   -- TABLE STRUCTURE FOR SALGRADE
   -- ----------------------------
   DROP TABLE OGGTEST.SALGRADE;
   CREATE TABLE OGGTEST.SALGRADE (
     GRADE NUMBER(11,0) NOT NULL,
     LOSAL NUMBER(11,0),
     HISAL NUMBER(11,0)
   )
   LOGGING
   NOCOMPRESS
   PCTFREE 10
   INITRANS 1
   STORAGE (
     INITIAL 1048576 
     NEXT 1048576 
     MINEXTENTS 1
     MAXEXTENTS 2147483645
     BUFFER_POOL DEFAULT
   )
   PARALLEL 1
   NOCACHE
   DISABLE ROW MOVEMENT
   ;

   -- ----------------------------
   -- RECORDS OF SALGRADE
   -- ----------------------------
   INSERT INTO OGGTEST.SALGRADE VALUES ('1', '700', '1200');
   INSERT INTO OGGTEST.SALGRADE VALUES ('2', '1201', '1400');
   INSERT INTO OGGTEST.SALGRADE VALUES ('3', '1401', '2000');
   INSERT INTO OGGTEST.SALGRADE VALUES ('4', '2001', '3000');
   INSERT INTO OGGTEST.SALGRADE VALUES ('5', '3001', '9999');

   -- ----------------------------
   -- PRIMARY KEY STRUCTURE FOR TABLE DEPT
   -- ----------------------------
   ALTER TABLE OGGTEST.DEPT ADD CONSTRAINT SYS_C006187 PRIMARY KEY (DEPTNO);

   -- ----------------------------
   -- CHECKS STRUCTURE FOR TABLE DEPT
   -- ----------------------------
   ALTER TABLE OGGTEST.DEPT ADD CONSTRAINT SYS_C006184 CHECK (DEPTNO IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

   -- ----------------------------
   -- PRIMARY KEY STRUCTURE FOR TABLE EMP
   -- ----------------------------
   ALTER TABLE OGGTEST.EMP ADD CONSTRAINT SYS_C006189 PRIMARY KEY (EMPNO);

   -- ----------------------------
   -- CHECKS STRUCTURE FOR TABLE EMP
   -- ----------------------------
   ALTER TABLE OGGTEST.EMP ADD CONSTRAINT SYS_C006185 CHECK (EMPNO IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

   -- ----------------------------
   -- INDEXES STRUCTURE FOR TABLE EMP
   -- ----------------------------
   CREATE INDEX OGGTEST.FK_DEPTNO
     ON OGGTEST.EMP (DEPTNO ASC)
     LOGGING
     VISIBLE
   PCTFREE 10
   INITRANS 2
   STORAGE (
     INITIAL 1048576 
     NEXT 1048576 
     MINEXTENTS 1
     MAXEXTENTS 2147483645
     BUFFER_POOL DEFAULT
   );

   -- ----------------------------
   -- PRIMARY KEY STRUCTURE FOR TABLE SALGRADE
   -- ----------------------------
   ALTER TABLE OGGTEST.SALGRADE ADD CONSTRAINT SYS_C006188 PRIMARY KEY (GRADE);
   
   -- ----------------------------
   -- CHECKS STRUCTURE FOR TABLE SALGRADE
   -- ----------------------------
   ALTER TABLE OGGTEST.SALGRADE ADD CONSTRAINT SYS_C006186 CHECK (GRADE IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

3. 修改数据库参数并创建复制用户

   create user goldengate identified by Ora_1234 default tablespace TBS_OGG temporary tablespace TEMP quota unlimited on TBS_OGG;
   GRANT CONNECT TO GOLDENGATE;
   GRANT ALTER ANY TABLE TO GOLDENGATE;
   GRANT ALTER SESSION TO GOLDENGATE;
   GRANT CREATE SESSION TO GOLDENGATE;
   GRANT FLASHBACK ANY TABLE TO GOLDENGATE;
   GRANT SELECT ANY DICTIONARY TO GOLDENGATE;
   GRANT SELECT ANY TABLE TO GOLDENGATE;
   GRANT RESOURCE TO GOLDENGATE;
   GRANT DROP ANY TABLE TO GOLDENGATE;
   GRANT DBA TO GOLDENGATE;
   GRANT EXECUTE ON DBMS_FLASHBACK TO GOLDENGATE;
   GRANT EXECUTE ON DBMS_FLASHBACK TO GOLDENGATE;
   EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('GOLDENGATE');

   参数修改:
   alter system set enable_goldengate_replication=true;(11.2.0.4及以后版本)
   如不设置复制进程将会挂起:
   2022-06-02 17:50:54  ERROR   OGG-02091  Oracle GoldenGate Delivery for Oracle, r_mysql.prm:  Operation not supported because enable_goldengate_replication is not set to true.
   2022-06-02 17:50:54  ERROR   OGG-01668  Oracle GoldenGate Delivery for Oracle, r_mysql.prm:  PROCESS ABENDING.

4. 配置mgr管理进程

   dblogin userid goldengate,password Ora_1234
   GGSCI (performance) 4> view param mgr
   port 7909
   dynamicportlist  7909-8000
   purgeoldextracts ./dirdat/*,usecheckpoints, minkeepdays 7

5. 配置复制进程

   ADD CHECKPOINTTABLE GOLDENGATE.CHKPTAB
   add replicat r_mysql,exttrail ./dirdat/or,checkpointtable GOLDENGATE.CHKPTAB
   GGSCI (performance) 2> view param r_mysql
   replicat r_mysql
   sourcedefs ./dirdef/defgen.prm
   userid goldengate,password Ora_1234
   reperror default,discard
   discardfile ./dirrpt/repmy.dsc,append,megabytes 500
   dynamicresolution
   map oggtest.emp, target oggtest.emp;
   map oggtest.dept, target oggtest.dept;
   map oggtest.salgrade, target oggtest.salgrade;

 第五步:启动所有OGG进程并检查状态

GGSCI (performance) 10> info all
---MySQL
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
EXTRACT     RUNNING     E_MYSQL     00:00:00      00:00:05    
EXTRACT     RUNNING     P_MYSQL     00:00:00      00:00:06
GGSCI (performance as goldengate@orcl) 42>  info all
---Oracle
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
REPLICAT    RUNNING     R_MYSQL     00:00:00      00:00:03

 第六步:验证同步是否正常

源端做增删改操作验证目标端数据是否同步变更:
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (10000, 'BIUBIUBIU', 'CLERK', 8888, str_to_date('18-08-1995', '%d-%m-%Y'), 2000, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (10086, 'YIDONG', 'DBA', 8889, str_to_date('16-06-1996', '%d-%m-%Y'), 3000, null, 40);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (10010, 'LIANTONG', 'Developer', 8890, str_to_date('18-08-1998', '%d-%m-%Y'), 4000, null, 10);
mysql> insert into dept values (50,'DBA','NANKING');
mysql> commit;
mysql> update dept set dname='TESTDBA' where deptno=50;
mysql> commit;
mysql> delete from dept where deptno=50;
mysql> commit;

至此:采用OGG12.2同步MySQL数据至Oracle实施完成。(测试环境仅供参考)