Oracle to MySQL Goldengate实现增量迁移

第一部分:安装和基本配置

一、环境

两台rhel 6.4虚拟机,分别异构oracle到mysql数据库同步测试
Ip:192.168.0.23 部署oracle 11.2.0.4,goldgate 12.1.2.1.0 for oracle
Ip:192.168.0.25 部署mysql5.5.9,goldengate 12.1.2.1.0 for mysql

二、Oracle to Mysql需要注意的地方:

对MySQL支持的数据类型:

CHAR|DATETIME|VARCHAR|TIMESTAMP|INT|BINARYTINYINT|VARBINARYSMALL INT|TEXTMEDIUM INT|TINYTEXTBIG INT|MEDIUMTEXTDECIMAL|LONGTEXTFLOAT|BLOBDOUBLE|TINYBLOBDATE|MEDIUMBLOBTIME|LONGBLOBYEAR|ENUM|BIT(M)

不支持的数据类型

•The XML, SET, and Geometry data types and similar are not supported.
•There is limited support for the Interval data type.
Mysql字符集:
Database create database test charset utf8;
Table create table test( id int, name char(100)) charset utf8;
Column create table test ( id int, name1 char(100) charset gbk, name2 char(100) charset utf8));

Mysql用户权限:

INSERT, UPDATE, DELETE on target tables
CREATE TABLE
SELECT ANY TABLE or SELECT ON database.table

数据库引擎:

Oracle GoldenGate supports InnoDB storage engine for a source MySQL database,goldengate对mysql只支持innodb引擎,所以,在创建mysql端的表的时候,要指定表为innodb引擎。create table mysql (name char(10)) engine=innodb;
当然5.9默认的存储引擎就是InnoDB。

三、Oracle端的基础配置

1.安装oracle11g,开归档模式,略过

2.在源端安装OGG

将ogg压缩包(V47367-01.zip)解压到 /u01 下
ogg 12c的安装和以前的版本安装不同,使用了OUI的安装方式,以前的版本直接解压就可以了.所以最好要有x环境.如果没有,也支持静默安装.
安装步骤如下:
[oracle@oggtest Disk1]$ ./runInstaller
显示欢迎界面,点下一步,

gg 12c只支持 oracle 11g和oracle 12c,选择合适的oracle版本.

software location定义了ogg将要安装的位置,database location定义了oracle数据库软件的安装位置,并且定义manager的端口.

出现安装信息汇总,选择"install"安装.
把gg的安装目录分别到加LD_LIBRARY_PATH和PATH变量中.整个安装过程还是十分简单,虽然也是oui的安装方式,只是在software和database location处有可能会产生误解。
下面是oracle用户的环境变量设置

[oracle@oggtest ~]$ cat .bash_profile

bash_profile:


# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
OGG_HOME=$ORACLE_BASE/product/11.2.0/ogg12c; export OGG_HOME
ORACLE_SID=oggtt; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:$OGG_HOME:$BASE_PATH:/usr/sbin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

create subdirectories:


[oracle@oggtest ogg12c]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Aug  7 2014 09:14:25
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
GGSCI (oggtest) 1> create subdirs

Creating subdirectories under current directory /u01/app/oracle/product/11.2.0/ogg12c

Parameter files                /u01/app/oracle/product/11.2.0/ogg12c/dirprm: already exists
Report files                   /u01/app/oracle/product/11.2.0/ogg12c/dirrpt: already exists
Checkpoint files               /u01/app/oracle/product/11.2.0/ogg12c/dirchk: already exists
Process status files           /u01/app/oracle/product/11.2.0/ogg12c/dirpcs: already exists
SQL script files               /u01/app/oracle/product/11.2.0/ogg12c/dirsql: already exists
Database definitions files     /u01/app/oracle/product/11.2.0/ogg12c/dirdef: already exists
Extract data files             /u01/app/oracle/product/11.2.0/ogg12c/dirdat: already exists
Temporary files                /u01/app/oracle/product/11.2.0/ogg12c/dirtmp: already exists
Credential store files         /u01/app/oracle/product/11.2.0/ogg12c/dircrd: already exists
Masterkey wallet files         /u01/app/oracle/product/11.2.0/ogg12c/dirwlt: already exists
Dump files                     /u01/app/oracle/product/11.2.0/ogg12c/dirdmp: already exists

3.源端的相关基础配置

3.1 修改数据库为归档模式,略过。
3.2 打开辅助日志

打开辅助日志:


alter database add supplemental log data;

3.3 关闭回收站
3.2 打开辅助日志

关闭回收站:


alter system set recyclebin=off scope=both;(10G需要,11g不需要)
System altered.

3.4 创建复制用的用户,并授权

create user:


SQL> create tablespaceoggtbsdatafile '/u01/app/oracle/oradata/oggtt/oggtbs01.dbf' size 500M autoextend on;
SQL> create user ggs identified by ggs default tablespaceoggtbs;

User created.

SQL> grant dba to ggs;

Grant succeeded.
测试系统,授予了dba权限,科用以下权限替代dba权限
GRANT create table to ggs;
GRANT CONNECT TO ggs;
GRANT ALTER ANY TABLE TO ggs;
GRANT ALTER SESSION TO ggs;
GRANT CREATE SESSION TO ggs;
GRANT FLASHBACK ANY TABLE TO ggs;
GRANT SELECT ANY DICTIONARY TO ggs;
GRANT SELECT ANY TABLE TO ggs;
GRANT RESOURCE TO ggs;
GRANT DELETE ANY TABLE TO ggs;
GRANT INSERT ANY TABLE TO ggs;
GRANT UPDATE ANY TABLE TO ggs;
GRANT RESTRICTED SESSION TO ggs;
System altered.

3.5 登陆到ogg,执行初始化

初始化:


在源库上执行
第一步:
GGSCI (oggtest) 2> edit params ./globals
ggschema ggs
第二步:
[oracle@oggtest ogg12c]$ sqlplus / as sysdba
sql>@sequence.sql根据提示输入:ggs
sqlplus / as sysdba
需要设置enable_goldengate_replication
SQL> alter system set enable_goldengate_replication =true scope=both;
sql>@marker_setup.sql prompt: ggs
sql>@ddl_setup.sql prompt: ggs
sql>@role_setup.sql prompt: ggs
sql>grant GGS_GGSUSER_ROLE to ggs;
SQL>@ddl_enable.sql 10g需要安装dbms_share_pool包:
sql> @?/rdbms/admin/dbmspool.sql
sql> @ddl_pinggs;

四、Mysql端的基础配置

1.安装mysql5.5.9略过
2.给mysqlroot配置密码:

MySQL端安装:


mysql> use mysql
Database changed
mysql> UPDATE user SET Password=PASSWORD('123456') where USER='root' and host='root' or host='localhost';
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.08 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> exit

3.因为复制需要二进制日志,所以启动mysql的时候需要启用二进制日志
查看mysql是否开启了二进制文件

二进制文件:


mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      487 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.05 sec)

[root@oggtest ~]# mysqlbinlog mysql-bin.000003

初始化备库端:


[root@oggtestogg]# ./ggsci

Oracle GoldenGate Command Interpreter for MySQL
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140920.0203
Linux, x64, 64bit (optimized), MySQL Enterprise on Sep 20 2014 03:43:22
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
GGSCI (ttmysql) 1> create subdirs

Creating subdirectories under current directory /ogg

Parameter files                /ogg/dirprm: already exists
Report files                   /ogg/dirrpt: created
Checkpoint files               /ogg/dirchk: created
Process status files           /ogg/dirpcs: created
SQL script files               /ogg/dirsql: created
Database definitions files     /ogg/dirdef: created
Extract data files             /ogg/dirdat: created
Temporary files                /ogg/dirtmp: created
Credential store files         /ogg/dircrd: created
Masterkey wallet files         /ogg/dirwlt: created
Dump files                     /ogg/dirdmp: created

第一部分安装和基本配置完成。

第二部分:oracle源端配置

源端配置大致分为如下三个步骤:配置mgr,配置抽取进程,配置投递进程。
在源端先创建一张表,记得带主键:

oracle建表:


SQL> create user chen identified by chen default tablespace users;
User created.
SQL> grant dba to chen;
Grant succeeded.
SQL> conn chen/chen;
Connected.
SQL> create table student (id int ,namevarchar(20),primary key(id));

Table created.

1.登陆ogg,配置全局设置

oracle配置全局设置:


[root@oggtest ~]# su - oracle
[oracle@oggtest ~]$ cd $OGG_HOME
[oracle@oggtest ogg12c]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Aug  7 2014 09:14:25
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.

GGSCI (oggtest) 1>dblogin userid ggs password ggs
Successfully logged into database.

GGSCI (oggtest as ggs@oggtt) 2> view params ./GLOBALS

ggschema ggs
GGSCI (oggtest as ggs@oggtt) 3>

2.配置mgr

配置mgr:


GGSCI (oggtest as ggs@oggtt) 4> edit param mgr
PORT 7809
DYNAMICPORTLIST 7810-7909
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

MANAGER进程参数配置说明:
PORT:指定服务监听端口;这里以7809为例,默认端口为7809
DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口;
COMMENT:注释行,也可以用--来代替;
AUTOSTART:指定在管理进程启动时自动启动哪些进程;
AUTORESTART:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;
PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。
LAGREPORT、LAGINFO、LAGCRITICAL:
定义数据延迟的预警机制:本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。

3.启动mgr,并查看状态

启动mgr:


GGSCI (oggtest as ggs@oggtt) 5> start mgr
MGR is already running.
GGSCI (oggtest as ggs@oggtt) 6> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

4.添加并查看需要复制的表:

添加并查看需要复制的表:


GGSCI (oggtest as ggs@oggtt) 7> add trandata chen.student
Logging of supplemental redo data enabled for table CHEN.STUDENT.
TRANDATA for scheduling columns has been added on table 'CHEN.STUDENT'.

GGSCI (oggtest as ggs@oggtt) 8> info trandata chen.*
Logging of supplemental redo log data is enabled for table CHEN.STUDENT.
Columns supplementally logged for table CHEN.STUDENT: ID.
GGSCI (oggtest as ggs@oggtt) 9>

如果不执行add trandata,insert同步没有问题(ORACLE数据库),但是在同步update或delete操作时,就会因为丢失主键报同步错误。不开启表级的最小附加日志,update的redo信息不记录没有进行更新的字段信息,如主键不更新的话主键不记录在redo中,所以会导致同步失败。

5.配置抽取进程

配置抽取进程:


GGSCI (oggtest as ggs@oggtt) 9> edit params ext3
extract ext3
dynamicresolution
userid ggs,password ggs
exttrail /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs
table chen.student;
--table chen.teacher;

GGSCI (oggtest as ggs@oggtt) 10> add extract ext3,tranlog,begin now
EXTRACT added.

GGSCI (oggtest as ggs@oggtt) 11> add exttrail /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs,extract ext3
EXTTRAIL added.

ext的模板可以是:
EXTRACT extmb
setenv (NLS_LANG = "AMERICAN_AMERICA.UTF8")
SETENV (ORACLE_HOME = "/u01/oracle/product/11.2.0/db_1")
SETENV (ORACLE_SID = "orcl")
USERID ggs, PASSWORD ggs
--GETTRUNCATES
REPORTCOUNT EVERY 1 MINUTES, RATE
DISCARDFILE ./dirrpt/extmb.dsc,APPEND,MEGABYTES 1024
--THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 60000 IOLATENS 60000
DBOPTIONS ALLOWUNUSEDCOLUMN
WARNLONGTRANS 2h,CHECKINTERVAL 3m
EXTTRAIL ./dirdat/mb
--TRANLOGOPTIONS EXCLUDEUSER USERNAME
FETCHOPTIONS NOUSESNAPSHOT
TRANLOGOPTIONS CONVERTUCS2CLOBS
TABLE hr.emp;

SETENV:配置系统环境变量
USERID/ PASSWORD: 指定OGG连接数据库的用户名和密码,这里使用3.4部分中创建的数据库用户OGG;
COMMENT:注释行,也可以用--来代替;
TABLE:定义需复制的表,后面需以;结尾
TABLEEXCLUDE:定义需要排除的表,如果在TABLE参数中使用了通配符,可以使用该参数指定排除掉得表。
GETUPDATEAFTERS|IGNOREUPDATEAFTERS:
是否在队列中写入后影像,缺省复制
GETUPDATEBEFORES| IGNOREUPDATEBEFORES:
是否在队列中写入前影像,缺省不复制
GETUPDATES|IGNOREUPDATES:
是否复制UPDATE操作,缺省复制
GETDELETES|IGNOREDELETES:
是否复制DELETE操作,缺省复制
GETINSERTS|IGNOREINSERTS:
是否复制INSERT操作,缺省复制
GETTRUNCATES|IGNORETRUNDATES:
是否复制TRUNCATE操作,缺省不复制;

6.配置投递进程

配置投递进程:


GGSCI (oggtest as ggs@oggtt) 12> edit params push3
extract push3
passthru
dynamicresolution
userid ggs,password ggs
rmthost 192.168.0.25,mgrport 7809
rmttrail /ogg /dirdat/xs
table chen.student;

GGSCI (oggtest as ggs@oggtt) 13> add extract push3,exttrailsource /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs
EXTRACT added.
GGSCI (oggtest as ggs@oggtt) 14> add rmttrail /ogg/dirdat/xs,extract push3
RMTTRAIL added.

push的模板:
EXTRACT pushmb
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ggs, PASSWORD ggs
PASSTHRU
RMTHOST 192.168.0.165, MGRPORT 7809, compress
RMTTRAIL /u01/ogg/11.2/dirdat/xs
TABLE hr.ah4;

RMTHOST:指定目标系统及其Goldengate Manager进程的端口号,还用于定义是否使用压缩进行传输,本例中的compress为压缩传输;
RMTTRAIL:指定写入到目标断的哪个队列;
EXTTRAIL:指定写入到本地的哪个队列;
SQLEXEC:在extract进程运行时首先运行一个SQL语句;
PASSTHRU:禁止extract进程与数据库交互,适用于Data Pump传输进程;
REPORT:定义自动定时报告;
STATOPTIONS:定义每次使用stat时统计数字是否需要重置;
REPORTCOUNT:报告已经处理的记录条数统计数字;
TLTRACE:打开对于数据库日志的跟踪日志;
DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;
DBOPTIONS:指定对于某种特定数据库所需要的特殊参数;
TRANLOGOPTIONS:指定在解析数据库日志时所需要的特殊参数,例如:对于裸设备,可能需要加入以下参数 rawdeviceoggset 0
WARNLONGTRANS:指定对于超过一定时间的长交易可以在gsserr.log里面写入警告信息,本处配置为每隔3分钟检查一次场交易,对于超过2小时的进行警告;

7.配置define文件

因为是异构关系,所以define两个数据库之间表的关系映射,是必不可少的。

配置define文件:


GGSCI (oggtest as ggs@oggtt) 17> edit params chen
defsfile /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student
userid ggs,password ggs
table chen.student;
[oracle@oggtest ogg12c]$ ./defgen paramfile dirprm/chen.prm

并将生成的/u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student传到目的端的相应目录中去
scp /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student 192.168.0.25:/ogg/dirdef/
注意:mysql端的ogg我是装在oracle用户下的。

第三部分:mysql目标端的配置

目的端配置大致分为如下三个步骤:配置mgr,配置checkpoint table,配置应用进程
在目的端先创建一张表,记得带主键:

mysql创建表:


mysql> create database chen charset utf8;
Query OK, 1 row affected (0.00 sec)
mysql> use chen;
Database changed
mysql> create table student(id int ,name varchar(20),primary key(id)) charset utf8;
Query OK, 0 rows affected (0.11 sec)
mysql> show tables;
+----------------+
| Tables_in_chen |
+----------------+
| student        |
+----------------+
1 row in set (0.00 sec)

1.配置mgr

配置mgr:


GGSCI (oggtest) 1> edit params mgr
PORT 7809
DYNAMICPORTLIST 7810-7909
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
GGSCI (oggtest) 1> start mgr
Manager started.

GGSCI (oggtest) 2> info
ERROR: Invalid command.

GGSCI (oggtest) 3> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

2.配置checkpoint table

配置checkpoint table:


GGSCI (ttmysql) 5> edit  params  ./GLOBALS
CHECKPOINTTABLE chen.checkpoint
GGSCI (ttmysql) 8> dblogin sourcedb chen userid root,password 123456
Successfully logged into database.
GGSCI (ttmysql DBLOGIN as root) 9> add checkpointtable chen.checkpointtab
Successfully created checkpoint table chen.checkpointtab.

3.配置应用进程:

配置应用进程:


GGSCI (nosql2) 10> edit params rep3 

replicat rep3
sourcedefs /ogg/dirdef/chen.student
SOURCEDB chen,userid root,password 123456
reperror default,discard
discardfile /ogg/dirrpt/F,append,megabytes 50
map chen.student,target chen.student;

GGSCI (ttmysql DBLOGIN as root) 11> add replicat rep3,exttrail /ogg/dirdat/xs,checkpointtable chen.checkpointtab
REPLICAT added.

REPLICAT进程参数配置说明:
ASSUMETARGETDEFS:假定两端数据结构一致使用此参数;
SOURCEDEFS:假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生。
MAP:用于指定源端与目标端表的映射关系;
MAPEXCLUDE:用于使用在MAP中使用*匹配时排除掉指定的表;
REPERROR:定义出错以后进程的响应,一般可以定义为两种:
ABEND,即一旦出现错误即停止复制,此为缺省配置;
DISCARD,出现错误后继续复制,只是把错误的数据放到discard文件中。
DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;
SQLEXEC:在进程运行时首先运行一个SQL语句;
GROUPTRANSOPS:将小交易合并成一个大的交易进行提交,减少提交次数,降低系统IO消耗。
MAXTRANSOPS:将大交易拆分,每XX条记录提交一次。

4.测试

在目的端启动rep3进程,在源端启动ext3和push3进程。
在源端的student表中插入一条数据,看是否在目的端的student表中能看到。
源端进程

源端进程:


GGSCI (oggtest as ggs@oggtt) 31> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     EXT3        00:00:00      00:00:09
EXTRACT     RUNNING     PUSH3       00:00:00      00:00:09
源端插入数据
SQL> insert into student values(3,'xinxin'); 

1 row created.

目标端进程

目标端进程:


GGSCI (ttmysql DBLOGIN as root) 16> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
REPLICAT    RUNNING     REP3        00:00:00      00:00:03
查询目标端数据库
mysql> select * from student;
+----+--------+
| id | name   |
+----+--------+
|  2 | jia    |
|  3 | xinxin |
+----+--------+
2 rows in set (0.00 sec)

到此完成ogg异构oracle到mysql数据库准实时数据同步。

第四部分:总结

本测试主要描述了针对一个测试表异构从oracle到mysql实现准实时同步数据。为了实现数据同步,需要配好OGG的几个进程。
1、Manager管理进程在两端开启,监控和重启其他进程;分配数据存储和报告错误及事件(进程不能run,需要仔细查看ggserr.log,此日志在ogg安装目录下)。
2、Extract进程从日志中抓取并传输到target端事务数据;extract日志抓取根据参数配置可分为本地和异地。本文档在源端配置了两个ext进程,ext3(本地),push3(异地)。
3、Server Collector进程在target(接受)端接受数据并写入trail文件;
4、Replicat进程读取trail文件,并应用到traget数据库;
5、trail文件时gg自己抓捕信息的文件,是一个OS文件,存放在./dirdat/下,以xs00000命名,N顺序1,2,3…此文件用完可配置参数自动删除。

第五部分:新加表的同步

1、源端配置

1.1、Table chen.t1为新加表

Sqlpus下执行
Create table chen.t1 as select * from chen.student;
Alter table chen.t1 add constraint pk_id primary key (id);

1.2、配置源端抽取参数

配置源端抽取参数:


GGSCI (oggtest) 13> view params ext3

extract ext3
dynamicresolution
userid ggs,password ggs
exttrail /u01/app/oracle/product/11.2.0/ogg12c/dirdat/xs
table chen.student;
table chen.t1;

GGSCI (oggtest) 14> view params push3

extract push3
passthru
dynamicresolution
userid ggs,password ggs
rmthost 192.168.0.25,mgrport 7809
rmttrail /ogg/dirdat/xs
table chen.student;
table chen.t1;

1.3、添加需要同步的表

添加需要同步的表:


add  trandata chen.t1    --添加需要同步的表
查看是否添加成功
GGSCI (oggtest) 18> dblogin userid ggs,password ggs
Successfully logged into database.
GGSCI (oggtest as ggs@oggtt) 19> INFO TRANDATA chen.*
Logging of supplemental redo log data is enabled for table CHEN.STUDENT.
Columns supplementally logged for table CHEN.STUDENT: ID.
Logging of supplemental redo log data is enabled for table CHEN.T1.
Columns supplementally logged for table CHEN.T1: ID.
GGSCI (oggtest as ggs@oggtt) 20>

1.4重新生成异构表的关系映射

重新生成异构表的关系映射:


GGSCI (oggtest as ggs@oggtt) 20> view params chen

defsfile /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student
userid ggs,password ggs
table chen.student;
table chen.t1;

用命令生成映射(注意因为与原映射文件名相同,原映射文件需要改名备份)
[oracle@oggtest ogg12c]$ ./defgen paramfile dirprm/chen.prm
并将生成的/u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student传到目的端的相应目录中去
scp /u01/app/oracle/product/11.2.0/ogg12c/dirdef/chen.student 192.168.0.25:/ogg/dirdef/

2、目标端配置

1、目标端建chen.t1表,带主键

Show create table chen.student\G,查看,改表名就行。

2、目标端修改复制进程参数

目标端修改复制进程参数:


GGSCI (ttmysql) 8> view params rep3

replicat rep3
sourcedefs /ogg/dirdef/chen.student
SOURCEDB chen,userid root,password 123456
reperror default,discard
discardfile /ogg/dirrpt/rep4.dsc,append,megabytes 50
map chen.student,target chen.student;
map chen.t1,target chen.t1;

3、启动目标端和源端进程,查看同步情况

先info all查看进程情况
目标端:
Start mgr
Start rep3
源端:
Start mgr
Start ext3
Start push3
分别查看ggserr.log,没有报错,进程正常
查看目标端复制情况,因为源端是用create table as select建表,带有数据,但发现原数据没有同步到目标端,随后在源端insert的数据能同步到目标端。
第六部分:表数据在源端的导出和目标端的导入
前提:需要在源端配置相关mgr,ext等进程工作正常,涉及到的异构表的转换文件准备好,目标端rep进程配置好,但不启用。(以上设置参考前几部分的配置)

1、建测试表和测试SQL

建测试表和测试SQL:


SQL> conn chen/chen
Connected.
/ 以chen为应用用户 /
SQL> create table tt01 (t1 int primary key,t2 int,t3 varchar2(30));
 Table created.
/ 为别在source和target创建该测试用表,在这里我们先不考虑同步DDL/
SQL> create sequence seqt1 start with 1 increment by 1;
Sequence created.
declare    #此程序测试同步复制
rnd number(9,2);
begin for i in 1..100000
loop
insert into tt01 values(seqt1.nextt01al,i*dbms_random.value,'NANFANG  IS TESTING');
 commit;
  end loop;
   end;
PL/SQL procedure successfully completed.

SQL> begin
    loop
    delete from tt01 where rownum=1;
    commit;
   insert into tt01 values(seqt1.nextt01al,200000*dbms_random.value,'NANFANG IS UPDATING');
   commit;
   insert into tt01 values(seqt1.nextt01al,300000*dbms_random.value,'NANFANG IS UPDATING');
   commit;
   update tt01 set t2=t2+10 where rownum=1;
   commit;
   dbms_lock.sleep(1);
   end loop;
   end;
   /

2、从源端导出表数据

从源端导出表数据:


/ 注意在配置完replicat后,不要去启动它;直到完成initial load才能启动/
/ 接下来要配置initial load使用的extract和replicat /

add extract einit,sourceistable

/ 以sourceistable选项创建extract /

view params einit
extract einit
SOURCEISTABLE
userid ggs, password ggs
RMTHOST 59.202.48.46, MGRPORT 7809
RMTFILE /u01/app/gg12c/dirdat/chentt1
Table chen.tt1;

/ 之后我们需要在命令行界面下调用该extract /
extract paramfile dirprm/einit.prm
3.在目标端导入数据
首先需要在mysql下建表
use chen
create table tt01 (t1 int primary key,t2 int,t3 varchar(30));
/ 接下来我们要在target上配置initial load使用的replicat,以导入之前的EXTFILE /
ggsci下操作
add replicat rinit,specialrun

异构导入的参数配置
edit params rinit
replicat rinit
SPECIALRUN
sourcedefs /u01/app/gg12c/dirdef/chen.tt1
SOURCEDB chen,userid root,password 123456
EXTFILE /u01/app/gg12c/dirdat/chentt1
ASSUMETARGETDEFS
map chen.tt1, target chen.tt1;

/ 之后我们在命令行上调用该replicat /
os $GGHOME下操作
replicat paramfile dirprm/rinit.prm

利用OGG将原表数据的导出,再异构导入,后启动复制进程,追同步日志,这一原理能实现在线oracle到mysql的数据迁移。

时间: 2024-09-01 20:51:17

Oracle to MySQL Goldengate实现增量迁移的相关文章

PHP将数据从Oracle向Mysql数据迁移实例

为什么要迁移? 首先从运营成本考虑,用Mysql可以节约不少的费用.另一方面,Mysql的稳定性及功能不断地提高与 增强,基本上可以满足客户的需求,如支持多 节点部署,数据分区等.还有就是Mysql使用方便,比 Oracle简单易用.故客户就要求将已有的Oracle数据表与内容迁移到Mysql来. 为什么要自己写脚本? 迁移的表与数据都蛮多的,有几百张表.因此手工完成不太方便.也尝试了一些免费的迁移工具, 如:MySQLMigrationTool等,发现转移 的字段类型不太符合要求(可能是原来的

Goldengate配置oracle to mysql

以前oracle to mysql试验总是有乱码问题不能解决,后来和同事交流中,他说oracle使用ogg的11g版本,mysql使用ogg的10g版本可以解决乱码问题,开始我还是怀疑,因为想新的版本都不行,难道老版本就可以解决这个问题吗?抱着试试看的态度,做了个试验,尽然成功了,把试验的相关情况记录下来 mysql参数配置(cat /etc/my.cnf): [client] default-character-set = gbk [mysqld] lower_case_table_names

从Oracle到MySQL,余额宝云实践分享

余额宝.百度百发.腾讯财付通谋划的互联网理财工具,吹响了互联网对金融行业的进军节奏.而后,网易.和讯.京东商城.苏宁云商等二线实力企业纷纷涉水.另一边,一众金融精英也在频频转换思路,不仅银行网络中心从副行长牵头的服务部门一跃成为行长主抓的业务部门,而且高调发布互联网金融理财产品与携手互联网企业并行,力图实现金融互联网的新价值.一时之间,互联网金融热潮涌动,无数专家多视点多维度进行了深入剖析,数十篇业内深度文章从产品.渠道.市场与趋势等全面解析互联网金融本质. 天弘基金创新支持部总经理樊振华(左)

【2017DTC精彩重现】Oracle和MySQL DBA的进阶之路

分享的初衷 这个是参考了朱赟[yūn]的一段话,我觉得已经很透彻形象了,毕竟在短短的几十分钟里,你只能得到一些思想上的建议和思路,落到实处还是得靠自己.而参考和借鉴的过程也是自己修行的过程.第二句我关于坚持,有的同学说坚持是习惯,有的说是毅力,本质上来说,还是坚持的态度,是坚持做一件事情,还是坚持把一件事情做好,两者听起来相似,实则有很大的差别. 分享思路 我分了几个层面来做了一些解读.在本文中会抽取重点列出一些来. Oracle和MySQL的学习周期 其实正如我开篇所说,目前国内的使用有两个比

oracle转mysql总结(转)

ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql. 现对转换过程中出现的问题及经验总结如下: 主键生成策略 创建一个专门记录序列的表sequence,记录有当前序列号,序列的间隔如+1 创建记录当前序列的表 DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( name VARCHAR(50) NOT NULL, current_value INT NOT NULL

Ubuntu环境下将 Mysql 5.5 数据库迁移到 MariaDB 10 步骤

这篇文章是我们自己亲手实验过的,系统为 Ubuntu 14.04 server,Mysql 数据库为 Mysql 5.5,准备迁移到 Maria DB 10.1 版本,关于其他版本的迁移方法详细的说明你可以去官方查看,这里我只说说我所实验过的. 关于为什么迁移到 MariaDB,知道 Oralce 收购 Sun 的用户应该知道,当然这已经是几年以前的事情了,本人一直不是很喜欢oracle在MySQL上面的态度,自己要是安装数据库基本上都会使用 MariaDB.整个迁移过程基本无痛,也没什么需要特

使用IBM Data Movement Tool从SQL Server/Oracle到DB2的表数据迁移

SQL Server,Oracle 及 DB2 都是目前市场上很多应用程序所使用的关系型数据库,随着应用程序功能的日趋强大,应用程序的版本升级和重新安装都将要求保留原有数据.这样不同类型数据库之间的迁移成了现在应用程序功能中数据迁移部分的重点.目前市场上出现了一些数据库迁移工具(比如:IBM Data Movement Tool).互联网上针对这些工具的介绍大部分都是基于数据对象的整体迁移,也就是在数据结构迁移的基础上进行数据迁移.但是有些应用程序并不需要数据结构的迁移,而是仅仅需要表数据的迁移

【Linux】将Oracle安装目录从根目录下迁移到逻辑卷

[Linux]将Oracle安装目录从根目录下迁移到逻辑卷   1.1  BLOG文档结构图     1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Linux逻辑卷的创建和管理(重点) Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaim

mysql 利用binlog增量备份,还原实例

mysql 利用binlog增量备份,还原实例 张映 发表于 2010-09-29 分类目录: mysql 一,什么是增量备份 增量备份,就是将新增加的数据进行备份.假如你一个数据库,有10G的数据,每天会增加10M的数据,数据库每天都要备份一次,这么多数据是不是都要备份呢?还是只要备份增加的数据呢,很显然,我只要备份增加的数据.这样减少服务器的负担. 二,启用binlog vi my.cnf log-bin=/var/lib/MySQL/mysql-bin.log,如果是这样的话log-bin