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

一、环境

两台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@localhostGRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTIONGRANT 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_nameValuelog_binON

1 row in set (0.00 sec)

mysql> show master status;FilePositionBinlog_Do_DBBinlog_Ignore_DBmysql-bin.000003487 

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_chenstudent

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;idname2jia3xinxin

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.studentG,查看,改表名就行。

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的数据迁移。

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

  1. oracle至mysql该指南的数据模式()任意数据源之间的跨导应用

    为了产生的一些资源的库的释放.需要API模块迁移到mysql在,需要引导数据. 试用oracle to mysql工具.当迁移错误不说,如此大量的数据的,有了这样简陋的工具是不太可靠. 意外的发现工具 ...

  2. 数据库迁移之从oracle 到 MySQL

    方式一: 手动方式导入导出 手动的方式导入, 就是操作步骤会比较繁琐一些. 对Table 的结构和数据: 1. 使用 SQL Developer 把 oracle 的 table 的schema 和 ...

  3. 数据库迁移之从oracle 到 MySQL最简单的方法

    数据库迁移之从oracle 到 MySQL最简单的方法 因工作需要将oracle数据库换到MySQL数据库,数据量比较大,百万级别的数据,表也比较多,有没有一种既快捷又安全的方法呢?答案是肯定的,下面 ...

  4. oracle或mysql定时增量更新索引数据到Elasticsearch

    利用kettle Spoon从oracle或mysql定时增量更新数据到Elasticsearch https://blog.csdn.net/jin110502116/article/details ...

  5. FW 数据库迁移之从oracle 到 MySQL

    方式一: 手动方式导入导出 手动的方式导入, 就是操作步骤会比较繁琐一些. 对Table 的结构和数据: 1. 使用 SQL Developer 把 oracle 的 table 的schema 和 ...

  6. Oracle使用goldengate分别向Oracle和mysql双路的单向复制

    一.Oracle分别向Oracle和mysql双路的单向复制是在: ORACLE-mysql的单向复制基础上做的.http://blog.csdn.net/q947817003/article/det ...

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

    原文链接:http://www.csdn.net/article/2013-11-/2817426-interview-financial-case-yuerbao-aliyun07 余额宝.百度百发 ...

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

    [Linux]将Oracle安装目录从根目录下迁移到逻辑卷 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到 ...

  9. ORACLE VS MYSQL

    ORACLE VS MYSQL 一.历史 1.  Oracle: 中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学 ...

随机推荐

  1. EntityFramework Code-First-------领域类配置之DataAnnotations

    EF Code-First提供了一个可以用在领域类或其属性上的DataAnnotation特性集合,DataAnnotation特性会覆盖默认的EF约定. DataAnnotation存在于两个命名空 ...

  2. Ajax全接触(2)

    例子简介 1.查询员工信息,可以通过输入员工编号查询员工基本信息: 2.新建员工信息,包含员工姓名,员工编号,员工性别,员工职位: 实现: 1.纯html页面,用来实现员工查询和新建的页面: 2.ph ...

  3. Knowledge Point 20180305 数据在计算机中的表示

    计算机发明的初衷就是用于帮助我们加工和处理数据,虽然时至今天计算机看起来无所不能,但它根本上还是在做数据的加工和处理,数据的机器层次表示将直接影响到计算机的结构和性能. 在计算机中,采用数字化方式来表 ...

  4. PThread 学习笔记

    POSIX 线程,也被称为Pthreads,是一个线程的POSIX标准: pthread.h int pthread_create(pthread_t * thread, pthread_attr_t ...

  5. Flask—02-Flask会话控制与模板引擎

    会话控制原理 说明:概念百度说明的很详细,请自行百度 cookie 说明: 由于HTTP协议无状态无连接的特点,导致一个用户在同一网站做连续操作时,需要不断的提供身份信息:为了解决这个问题,我们可以通 ...

  6. React中setState同步更新策略

    setState 同步更新 我们在上文中提及,为了提高性能React将setState设置为批次更新,即是异步操作函数,并不能以顺序控制流的方式设置某些事件,我们也不能依赖于this.state来计算 ...

  7. django-单表操作

    #######单表操作######## 前面视图层,模板层.路由层都写了大概,项目肯定是会和数据库打交道,那就讲讲orm的单表查询吧,直接写过一点点,不太全面. 1.项目刚创建好,我们需要在setti ...

  8. leetcode笔记(六)740. Delete and Earn

    题目描述 Given an array nums of integers, you can perform operations on the array. In each operation, yo ...

  9. java 代码调用函数

    sql 中调用函数 getDistance(lng1 float, lat1 float, lng2 float, lat2 float) 例如: SELECT id, f_seller_id sel ...

  10. lnmp配置支持thinkphp和nginx路由url重写

    ThinkPHP3.2.3项目放到lnmp环境之后只能打开首页,或者通过传参方式打开控制器,否则就一直显示404页面.搞了一上午,终于解决了 step1: 修改php.ini cgi.fix_path ...