GoldenGate从oracle迁移数据到mysql

 

1       软件简介

安装时应该选择最为稳定的安装版本,现在官方发布的版本主要为:

Oracle GoldenGate 11.2.1.0.1

对应不同的数据库和版本,有不同的安装介质。下面是根据现网情况使用的两个安装介质:

ogg112101_fbo_ggs_Linux_x64_ora10g_64bit.zip

ggs_Linux_x64_MySQL_64bit.tar

Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。Oracle Golden Gate可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,从而在可以在应急系统、在线报表、实时数据仓库供应、交易跟踪、数据同步、集中/分发、容灾、数据库升级和移植、双业务中心等多个场景下应用。同时,Oracle Golden Gate可以实现一对一、广播(一对多)、聚合(多对一)、双向、点对点、级联等多种灵活的拓扑结构。

 

2       整体架构

 

和传统的逻辑复制一样,Oracle GoldenGate实现原理是通过抽取源端的redo log或者archive log,然后通过TCP/IP投递到目标端,最后解析还原应用到目标端,使目标端实现同源端数据同步。以下是OracleGoldenGate的技术架构

 


 

Manager进程

Manager进程是GoldenGate的控制进程,运行在源端和目标端上。它主要作用有以下几个方面:启动、监控、重启Goldengate的其他进程,报告错误及事件,分配数据存储空间,发布阀值报告等。

 

Extract进程

 

Extract运行在数据库源端,负责从源端数据表或者日志中捕获数据。

 

Pump进程

 

pump进程运行在数据库源端。其作用是如果源端使用了本地的trail文件,那么pump进程就会把trail以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推荐的方式。pump进程本质是extract进程的一种特殊形式,如果不使用trails文件,那么就是extract进程在抽取完数据以后,直接投递到目标端。

 

Trail文件

 

       为了更有效、更安全的把数据库事务信息从源端投递到目标端。GoldenGate引进trail文件的概念。前面提到extract抽取完数据以后Goldengate会将抽取的事务信息转化为一种GoldenGate专有格式的文件。然后pump负责把源端的trail文件投递到目标端,所以源、目标两端都会存在这种文件。trail文件存在的目的旨在防止单点故障,将事务信息持久化,并且使用checkpoint机制来记录其读写位置,如果故障发生,则数据可以根据checkpoint记录的位置来重传。

 

Replicat进程

 

       Replicat进程,通常我们也把它叫做应用进程。运行在目标端,是数据传递的最后一站,负责读取目标端trail文件中的内容,并将其解析为DML或DDL语句,然后应用到目标数据库中。

 

GGSCI

 

       GGSCI是GoldenGate Software Command Interface 的缩写,它提供了十分丰富的命令来对Goldengate进行各种操作,如创建、修改、监控GoldenGate进程等等

 

灵活的拓扑结构:

 

 

2.1   GoldenGate支持列表

Databases

OS and Platforms

Capture:

Windows 2000,2003,xp

Oracle

Linux

DB2 UDB

Sun Slolaris

Microsoft SQL Server

HP NonStop

Sybase ASE

HP Ux

Teradata

HP TRU64

Ingres

IBM AIX

Enscribe

IBM z/OS

SQL/MP

 

SQL/MX

 

Delivery:

 

All listed above

 

Mysql,hp neoview,Netezza

 

And ODBC compatible databases

 

 

 

3       GoldenGate软件安装

3.1 组和用户创建

源端是oracle生产数据库,已经存在oracle和dba,复用该用户和组。

目标端是mysql,已经存在mysql和dba,复用该用户和组。

3.2 GoldenGate安装目录检查

 

 

安装Oracle GoldenGate软件前,需要事先确认安装目录属主权限正确,且所在文件系统有足够的空间存放Oracle GoldenGate软件并能支撑日常运维使用。对于存放dirdat数据目录,至少需要100GB以上的空间。对于源库是oracle rac模式,必须设置ogghome的目录的存储能让rac两台主机识别,只是mount在一个任务较轻的节点上,若是该节点出现故障,能及时挂载到另外一个节点上,增加高可用性。

 

检查安装目录所在文件系统空间信息,通过下述命令实现:

df -g /home/ogghome

 

确认安装目录属主权限信息,通过下述命令实现:

ls –ld /home/ogghome

 

3.3 解压安装文件

Oracle GoldenGate软件通过解压缩方式实现安装,

解压缩GoldenGate安装文件,通过下述命令实现:

unzip ggs_*.zip

tar -xvf  ggs_*.tar

 

3.4 GoldenGate软件启动测试

Oracle GoldenGate软件通过ggsci命令启动交互界面,当ggsci启动成功则表名安装过程无误。启动ggsci前务必进入Oracle GoldenGate软件的安装目录。

启动Oracle GoldenGate的ggsci,通过下述命令实现:

cd /home/oracle/ggs/goldengate

./ggsci

Oracle数据库的账号必须设置LD_LIBRARY_PATH环境变量,否则会报错,

LD_LIBRARY_PATH=/oracle/product/10.2/db/lib

3.5 、创建GoldenGate软件子目录

进入安装路径,创建相关目录(源端和目标端都执行),源端使用oracle用户,目标端使用mysql用户:

cd /home/ogghome

./ggsci

GGSCI> create subdirs

下面是日志:

Creating subdirectories under current directory /home/ogghome

Parameter files                /home/ogghome/dirprm: already exists

Report files                   /home/ogghome/dirrpt: created

Checkpoint files               /home/ogghome/dirchk: created

Process status files           /home/ogghome/dirpcs: created

SQL script files               /home/ogghome/dirsql: created

Database definitions files     /home/ogghome/dirdef: created

Extract data files             /home/ogghome/dirdat: created

Temporary files                /home/ogghome/dirtmp: created

Stdout files                   /home/ogghome/dirout: created

 

 

4       GoldenGate部署

4.1 初始化源端数据库

4.1.1             开启归档模式

GoldenGate是基于oracle日志变化的捕获,所以为了完整的捕获到oracle数据库的变化,有必要将归档模式开启。

SQL>      alter system set log_archive_dest_1='location=/arch' scope=both;

  SQL>  shutdown immediate

  SQL>  startup mount

  SQL>  alter database archivelog

  SQL>  alter database open

  SQL>  archive log list

注意,由于上面命令涉及停止数据库应用,应结合业务实际情况进行操作。

4.1.2             开启附加日志

在oracle中我们可以通过rowid来定位某条记录,但是目标端的数据库和源端数据库的数据库可能完全不一样,所以无法通过rowid来确定源端数据库的逻辑变化,这时附件日志supplemental log便登上了表演的舞台。数据库在开启附加日志功能后,对于源端的修改操作,oracle会同时追加能够唯一标示记录的列到redo log。这样目标端数据库就可以知道源端发生了哪些具体的变化。

 

   SQL>       alter database add supplemental log data;

   SQL>       alter system switch logfile;

   SQL>       select supplemental_log_data_min from v$database;

4.1.3             开启强制日志模式

SQL>alter database force logging;

 SQL>SELECT FORCE_LOGGING FROM V$DATABASE;

4.1.4             goldengate创建用户并授权

源端oracle数据库创建账号:

create tablespace data_goldengate datafile '+DG_DATA1' size 10240m autoextend on;

create user goldengate identified by password default tablespace data_goldengate temporary tablespace temp;

 

赋予goldengate相关权限(想简单的话,可以赋予DBA权限,若是涉及安全问题,dba权限不能随便赋予)

grant CONNECT,RESOURCE to goldengate;

grant CREATE SESSION,ALTER SESSION to goldengate;

grant SELECT ANY DICTIONARY,SELECT ANY TABLE to goldengate;

grant CREATE TABLE,ALTER ANY TABLE to goldengate;

grant unlimited tablespace to goldengate;

 

目标端mysql创建账号,赋予dba权限:

grant ALL PRIVILEGES on *.* to goldengate@'%';

grant ALL PRIVILEGES on *.* to goldengate@'localhost';

 

update mysql.user set password=password('password') where user='goldengate';

4.1.5             对需要同步的表确认是否开启表级附加日志

./ggsci

GGSCI (localhost.localdomain) 1> dblogin userid goldengate password password

Successfully logged into database.

 

GGSCI (localhost.localdomain) 2> info trandata xianyezhao.CALENDAR_DETAIL

Logging of supplemental redo log data is disabled for table XIANYEZHAO.CALENDAR_DETAIL.

 

GGSCI (localhost.localdomain) 3> add trandata xianyezhao.CALENDAR_DETAIL

Logging of supplemental redo data enabled for table XIANYEZHAO.CALENDAR_DETAIL.

 

 

GGSCI (localhost.localdomain) 4> info trandata  XIANYEZHAO.CALENDAR_DETAIL

Logging of supplemental redo log data is enabled for table XIANYEZHAO.CALENDAR_DETAIL.

Columns supplementally logged for table XIANYEZHAO.CALENDAR_DETAIL: SEQNO.

 

4.2 配置ASM访问方式

由于oracle redo 日志文件在ASM存储上,goldengate软件需要访问ASM

配置asm实例的tns连接字符串,由于监听状态是BLOCKED,必须添加(UR=A)才能通过ogg远程登录asm实例。下面是官方详细说明:

ASM instances appear with a blocked status from the 'lsnrctl services'command (see below). To remotely access a 'blocked service' you need toadd (UR=A) to the tns connect string (plus you will need a password filefor the asm instance).

Tnsnames.ora entry:----

下面是监听状态,使用lsnrctl status查看:

Service "+ASM" has 1 instance(s).

  Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...

下面是具体的tns连接字符串:

ASM = 

 (DESCRIPTION = 

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.219.6)(PORT = 1521)) 

    (CONNECT_DATA = 

      (SERVER = DEDICATED) 

      (SERVICE_NAME = +ASM)

      (INSTANCE_NAME = +ASM2) 

      (UR=A)

    ) 

  )

 

4.3 配置NFS文件系统

由于归档是使用文件系统,需要使用nfs文件模式,把另外一个节点的归档挂载到本地。

a.开启nfs服务:

service nfs start

查看nfs状态:

service nfs status

b.开启nfs权限:

编辑权限列表:

vi /etc/exports

/archivelog1    *(rw)

更新权限:

exportfs –a

c.创建/archivelog1,更改权限为oracle和dba,

chown oracle:dba /archivelog1

使用root用户mount上:

mount 192.168.219.3:/archivelog1 /archivelog1

4.4 在源端和目标端配置MGR

ggsci>     EDIT  PARAMS  MGR

PORT   7809

PURGEOLDEXTRACTS  ./dirdat,USECHECKPOINTS

 

ggsci>     START   MGR

ggsci>    INFO      MGR

4.5 创建Extract: ext_cal

4.5.1             增加extract

add extract ext_cal, tranlog, begin now, THREADS 2

EXTRACT added.

4.5.2             设定exttrail

add exttrail ./dirdat/ca, extract ext_cal, megabytes 100

EXTTRAIL added.

4.5.3             配置extract

下面******替换成密码:

edit params ext_cal

/********************************************************************/

EXTRACT ext_cal                                                          

SETENV (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")                                                    

SETENV (ORACLE_SID="g139bak2")                                                 

userid goldengate, password password

TRANLOGOPTIONS ASMUSER sys@asm,ASMPASSWORD ******

EXTTRAIL ./dirdat/ca    

TRANLOGOPTIONS LOGRETENTION DISABLED

TRANLOGOPTIONS BUFSIZE 2048000

tranlogoptions altarchivedlogformat threadid 1 g139bak_%S_%T_%R.log

tranlogoptions altarchivedlogformat threadid 2 g139bak_%S_%T_%R.log

tranlogoptions altarchivelogdest instance g139bak1 /archivelog1/g139bak_archivelog, altarchivelogdest instance g139bak2 /archivelog2/g139bak_archivelog

 

--DDL INCLUDE mapped

--DDLOPTIONS ADDTRANDATA

 

DISCARDFILE ./dirrpt/ext_cal.dsc,APPEND,MEGABYTES 1000

DISCARDROLLOVER AT 6:00

 

REPORTROLLOVER AT 6:00

REPORTCOUNT EVERY 1 HOURS,RATE

 

TRANLOGOPTIONS ALTARCHIVELOGDEST /archivelog2

 

FETCHOPTIONS MISSINGROW ABEND

STATOPTIONS REPORTFETCH

 

WARNLONGTRANS 1H,CHECKINTERVAL 10m

 

DYNAMICRESOLUTION        

TABLE XIANYEZHAO.CALENDAR_DETAIL;

TABLE XIANYEZHAO.CALENDAR_INFO;

 

/********************************************************************/

 

下面是查看内容:

GGSCI (gb139bak02) 5> view report ext_cal

 

 

4.6 创建投送进程: dp_cal

4.6.1             增加extract

add extract dp_cal, exttrailsource ./dirdat/ca

4.6.2             设定extract投递rmttrail

add rmttrail ./dirdat/ca, extract dp_cal

4.6.3             配置extract

edit params dp_cal

 

/********************************************************************/

EXTRACT dp_cal

passthru

DYNAMICRESOLUTION

RMTHOST 192.168.219.35, MGRPORT 7809, COMPRESS

RMTTRAIL ./dirdat/ca

TABLE XIANYEZHAO.CALENDAR_DETAIL;

TABLE XIANYEZHAO.CALENDAR_INFO;

 

/********************************************************************/

由于没有配置目标端的mgr进程,7809没有打开,网络报错,导致进程挂掉。

GGSCI (localhost.localdomain) 48> view report dp_cal

GGSCI (gb139bak02) 65> view report dp_cal

 

 

4.7 创建定义文件

在源端编辑defgen文件

su - oracle

cd ./dirprm

$ vi cal.prm

DEFSFILE /home/ogghome/dirdef/cal.def

USERID goldengate PASSWORD password

TABLE XIANYEZHAO.CALENDAR_DETAIL;

TABLE XIANYEZHAO.CALENDAR_INFO;

 

 

 

通过执行defgen命令生成定义文件

/home/ogghome/defgen PARAMFILE /home/ogghome/dirprm/cal.prm

 

***********************************************************************

        Oracle GoldenGate Table Definition Generator for Oracle

      Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230

   Linux, x64, 64bit (optimized), Oracle 10g on Apr 23 2012 05:09:39

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

                    Starting at 2014-06-09 15:24:08

***********************************************************************

Operating System Version:

Linux

Version #1 SMP Thu Sep 5 21:21:44 EDT 2013, Release 2.6.18-371.el5

Node: gb139bak02

Machine: x86_64

                         soft limit   hard limit

Address Space Size   :    unlimited    unlimited

Heap Size            :    unlimited    unlimited

File Size            :    unlimited    unlimited

CPU Time             :    unlimited    unlimited

Process id: 2014

***********************************************************************

**            Running with the following parameters                  **

***********************************************************************

DEFSFILE /home/ogghome/dirdef/cal.def

USERID goldengate PASSWORD ********

TABLE XIANYEZHAO.CALENDAR_DETAIL;

Retrieving definition for XIANYEZHAO.CALENDAR_DETAIL

TABLE XIANYEZHAO.CALENDAR_INFO;

Retrieving definition for XIANYEZHAO.CALENDAR_INFO

Definitions generated for 2 tables in /home/ogghome/dirdef/cal.def

 

 

把生成的def文件传输到mysql端

[oracle@localhost dirdef]$ sftp [email protected]

Connecting to 192.168.61.131...

[email protected]'s password:

sftp> cd /home/ogghome/dirdef

sftp> !ls

sftp> put cal.def

Uploading cal.def to /home/ogghome/dirdef/cal.def

cal.def                                                                                         100% 1001     1.0KB/s   00:00

修改mysql端定义文件的权限

chown mysql:dba /home/ogghome/dirdef/cal.def

chmod 755 /home/ogghome/dirdef/cal.def

4.8 初始化数据

 

4.8.1             Oracle到oracle导出方式

1、查看系统改变号:

col current_scn for 999999999999999999999999999999

select current_scn from v$database;

--1138506

 

2、导出导入数据:

set linesize 133

col directory_path format a50

select * from dba_directories;

SYS                            DATA_PUMP_DIR                  /opt/oracle/app/admin/test/dpdump/

 

expdp \'/ as sysdba \' DIRECTORY=DATA_PUMP_DIR DUMPFILE=t3.dmp LOGFILE=t3.log TABLES=test.t3 FLASHBACK_SCN=1138506

 

impdp \'/ as sysdba \' DIRECTORY=DATA_PUMP_DIR DUMPFILE=t3.dmp LOGFILE=t3_imp.log TABLES=test.t3 REMAP_TABLESPACE=DATA_TEST:DATA_TEST

--REMAP_SCHEMA=TEST:TEST

 

 

3、启动应用进程的时候,需要指定aftersn号,下面是具体例子:

用SCN 启动Replicat

start rep_cal, aftercsn 1138506

 

4.8.2             Oracle到mysql方式

使用goldengatedirect load的方式:

源端:

ADD EXTRACT einixyz, SOURCEISTABLE

 

EXTRACT einixyz

userid goldengate, password password

RMTHOST 192.168.219.35, MGRPORT 7809, COMPRESS

RMTTASK REPLICAT, GROUP RINIXYZ

TABLE XIANYEZHAO.T_INI;

 

创建定义文件

在源端编辑defgen文件

su - oracle

cd ./dirprm

$ vi cal_xyz.prm

DEFSFILE /home/ogghome/dirdef/cal_xyz.def

USERID goldengate PASSWORD password

TABLE XIANYEZHAO.T_INI;

通过执行defgen命令生成定义文件

/home/ogghome/defgen PARAMFILE /home/ogghome/dirprm/cal_xyz.prm

sftp上传到目标端服务器/home/ogghome/dirdef/目录下。

目标端:
ADD REPLICAT rinixyz, SPECIALRUN

replicat RINIXYZ

sourcedefs /home/ogghome/dirdef/cal_xyz.def

SETENV (MYSQL_UNIX_PORT=/mysql/dbdata/mysql.sock)

sourcedb cal@localhost userid goldengate, password password

reperror default, discard

discardfile ./dirrpt/ext_in.dsc,APPEND,MEGABYTES 1000

MAP XIANYEZHAO.T_INI , TARGET CAL.T_INI;

 

启动数据初始化,只是需要在源端启动抽取进程即可:

start einixyz

 

4.9 目标端创建Replicat

4.9.1             手工创建数据库和表语句

创建数据库:

create database cal;

创建表,需要把oracle格式转化为mysql格式,下面是部分内容:

1.number需要转化成DECIMAL

2.varchar2需要转化成varchar

3.date需要转换成datetime

4.mysql不支持NUMBER(38,0)转换成DECIMAL(38,0),因此,需要把*转化成oracle最大的数值,38位长,DECIMAL(38,0)。

5.由于mysql分区字段必须是int类型,下面HASH (UIN)不能进行hash分区。

6.mysql索引没有并发概念,去除parallel选项。

 

 

CREATE TABLE CALENDAR_DETAIL

   ( SEQNO DECIMAL NOT NULL,

       DETAILSEQNO DECIMAL,

       LABELID DECIMAL,

       LABELTYPE DECIMAL(2,0),

       MESSTYPE DECIMAL(2,0),

       UIN VARCHAR(32),

       SERVICEID DECIMAL(8,0),

       SPSID VARCHAR(32),

       RECTARGET VARCHAR(1024),

       STARTSENDTIME DATETIME,

       SENDMSG VARCHAR(2000),

       CREATETIME DATETIME,

       MODIFYTIME DATETIME,

       TYPE DECIMAL(38,0) DEFAULT 0

   );

CREATE INDEX CALENDAR_DETAIL_IDX3_NEW ON CALENDAR_DETAIL (DETAILSEQNO);

CREATE UNIQUE INDEX PK_CALENDAR_DETAIL ON CALENDAR_DETAIL (SEQNO);

CREATE INDEX CALENDAR_DETAIL_IDX1_NEW ON CALENDAR_DETAIL (STARTSENDTIME);

CREATE INDEX CALENDAR_DETAIL_IDX2_NEW ON CALENDAR_DETAIL (UIN);

ALTER TABLE CALENDAR_DETAIL ADD CONSTRAINT PK_CALENDAR_DETAIL PRIMARY KEY(SEQNO);

 

 

CREATE TABLE CALENDAR_INFO

   ( SEQNO DECIMAL NOT NULL,

       UIN VARCHAR(32),

       GID VARCHAR(50),

       CREATORUIN VARCHAR(32),

       SERVICEID DECIMAL(10,0),

       SPSID VARCHAR(32),

       TITLE VARCHAR(600),

       SITE VARCHAR(200),

       ISATTACH DECIMAL(2,0),

       CONTENT VARCHAR(1500),

       STARTDATE DATETIME,

       ENDDATE DATETIME,

       STARTTIME DECIMAL(5,0),

       ENDTIME DECIMAL(5,0),

       STATUS DECIMAL(2,0),

       DATEDESCRIPT VARCHAR(128),

       ENABLE DECIMAL(2,0),

       AUTHSTATUS DECIMAL(2,0),

       LABELID DECIMAL,

       LABELTYPE DECIMAL(2,0),

       SPECIALAPPID DECIMAL,

       RECMYSMS DECIMAL(2,0),

       RECMYEMAIL DECIMAL(2,0),

       RECMOBILE VARCHAR(1024),

       RECEMAIL VARCHAR(1024),

       CREATETIME DATETIME,

       MODIFYTIME DATETIME,

       VERSION DECIMAL(8,0),

       EXPEND VARCHAR(50),

       COMEFROM DECIMAL(5,0),

       SPECIALTYPE DECIMAL(2,0) DEFAULT 0

   );

  

CREATE INDEX CALENDAR_INFO_IDX6_NEW ON CALENDAR_INFO (SPECIALAPPID);

CREATE INDEX CALENDAR_INFO_IDX1_NEW ON CALENDAR_INFO (UIN);

CREATE INDEX CALENDAR_INFO_IDX7_NEW ON CALENDAR_INFO (LABELID);

CREATE INDEX CALENDAR_INFO_IDX4_NEW ON CALENDAR_INFO (STARTTIME);

CREATE INDEX CALENDAR_INFO_IDX8_NEW ON CALENDAR_INFO (GID);

CREATE INDEX SPECIALTYPE_INDEX ON CALENDAR_INFO (SPECIALTYPE);

CREATE UNIQUE INDEX PK_CALENDAR_INFO ON CALENDAR_INFO (SEQNO);

CREATE INDEX CALENDAR_INFO_IDX5_NEW ON CALENDAR_INFO (ENDTIME);

CREATE INDEX CALENDAR_INFO_IDX3_NEW ON CALENDAR_INFO (ENDDATE);

CREATE INDEX CALENDAR_INFO_IDX2_NEW ON CALENDAR_INFO (STARTDATE);

ALTER TABLE CALENDAR_INFO ADD CONSTRAINT PK_CALENDAR_INFO PRIMARY KEY (SEQNO);

 

4.9.2             在目标端配置replicat进程

ggsci>     EDIT  PARAMS  ./GLOBALS

CHECKPOINTTABLE         goldengate.ggschkpt

ggsci>   exit

ggsci>   dblogin sourcedb [email protected]:3306,userid goldengate, password password

ggsci>     add checkpointtable cal.checkpt

Successfully created checkpoint table cal.checkpt.

 

4.9.3             创建Replicat

add replicat rep_cal, exttrail ./dirdat/ca ,checkpointtable cal.checkpt  

 

4.9.4             配置replicat

edit params rep_cal

 

/********************************************************************/

REPLICAT rep_cal

SETENV (MYSQL_UNIX_PORT=/mysql/dbdata/mysql.sock)

sourcedb cal@localhost userid goldengate, password password

SQLEXEC "select CURRENT_TIME();" EVERY 10 MINUTES

REPORT AT  6:00

 

gettruncates

STATOPTIONS RESETREPORTSTATS

reperror (default,abend)

discardrollover at 6:00

numfiles 1000

MAXLONGLEN 8000

dynamicresolution

allownoopupdates

SOURCEDEFS ./dirdef/cal.def

 

GROUPTRANSOPS 100000

MAXTRANSOPS 100000

REPORTCOUNT EVERY 1 MINUTES RATE

 

discardfile ./dirrpt/rep_cal.dsc, append, megabytes 1000

 

MAP XIANYEZHAO.CALENDAR_DETAIL             , TARGET CAL.CALENDAR_DETAIL              ,KEYCOLS( SEQNO );

MAP XIANYEZHAO.CALENDAR_INFO               , TARGET CAL.CALENDAR_INFO                ,KEYCOLS( SEQNO );

 /********************************************************************/

 

 

若是oracle到oracle同步,则可以使用SCN 启动Replica

start rep_cal, aftercsn 1138506

若是oracle到mysql,则直接启动:

start rep_cal

 

查看命令:

GGSCI (mysqldb1) 20> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

REPLICAT    RUNNING     REP_CAL     00:00:00      00:00:08 

 

GGSCI (mysqldb1) 21> view report rep_cal

 

5       Goldengate同步测试

5.1 开启同步进程

源端开启相关进程

GGSCI> start mgr

GGSCI> start ext_cal

GGSCI> start dp_cal

 

目标端开启相关进程

GGSCI> start mgr

GGSCI> start rep_cal

5.2 异构不支持ddl同步

从oracle同步到mysql,属于异构架构,不支持ddl同步,包括添加和删除字段,添加和删除索引,重命名表,表分析统计数据。

若是涉及到源端和目标端ddl操作,需要进行源端和目标端同时手工操作。

5.3 DML测试

从oracle同步到mysql,支持DML同步。

5.3.1             没有主键的表同步

 

CALENDAR_20131213_LOTTERY共有647581条记录,没有主键的表,每次进行插入和删除是按照100000条记录进行批处理,该值是由参数决定。

插入从15:18:43开始,到15:21:22结束,共使用159秒。

删除从15:25:07开始,到15:28:42结束,共使用215秒。

在全同步期间的产生的DML,在开始增量后,数据同步是一致。批量同步会有部分延迟,每秒同步的数据插入是4072条记录,删除是3012条记录

5.3.2             有主键的表同步

CALENDAR_INVITE_INFO表共有14358726条记录,全量同步开始时间16:36:12,在16:56:40时刻,源端插入 6645999,mysql目标端插入3887999,有2758000条记录延迟。源端全部完成插入14358726,mysql目标端插入8545999。17:19:19时刻,完成全部数据量插入,使用2587秒,每秒插入5550条左右。对比没有主键的表来说,快了36%左右。因此,要求同步的表必须添加主键。

 Update操作,calendar_detail表有12042条记录,大概3秒左右完成同步目标端,更新为1.

SQL> select count(1) ,type from calendar_detail group by type;

  COUNT(1)       TYPE

---------- ----------

      1783          3

     10259          0

update calendar_detail set type=1;

mysql> select count(1) ,type from calendar_detail group by type;

+----------+------+

| count(1) | type |

+----------+------+

|    12042 |    1 |

+----------+------+

 

 

CALENDAR_INVITE_INFO使用下面同步脚本(存储过程P_01):

declare

     row_num number ;

     cursor get_data is

       select

 SEQNO            ,

 CALSEQNO         ,

 UIN              ,

 INVITERUIN       ,

 INVITERALIAS     ,

 RECMYSMS         ,

 RECMYEMAIL       ,

 RECMOBILE        ,

 RECEMAIL         ,

 STATUS           ,

 REFUSERESION     ,

 INVITEAUTH       ,

 INVITEREMARK     ,

 INVITETIME       ,

 REMARKTIME       ,

 ENABLE           ,

 ISDELETED        ,

 BEFORETYPE       ,

 BEFORETIME       ,

 NOTIFYCONF       ,

 NEXTSENDDATE    

       from calendar01.CALENDAR_INVITE_INFO;

begin

    row_num := 1;

    for rec in get_data loop

       insert into CALENDAR_INVITE_INFO(

 SEQNO            ,

 CALSEQNO         ,

 UIN              ,

 INVITERUIN       ,

 INVITERALIAS     ,

 RECMYSMS         ,

 RECMYEMAIL       ,

 RECMOBILE        ,

 RECEMAIL         ,

 STATUS           ,

 REFUSERESION     ,

 INVITEAUTH       ,

 INVITEREMARK     ,

 INVITETIME       ,

 REMARKTIME       ,

 ENABLE           ,

 ISDELETED        ,

 BEFORETYPE       ,

 BEFORETIME       ,

 NOTIFYCONF       ,

 NEXTSENDDATE      

   )

       values(

        rec.SEQNO            ,

        rec.CALSEQNO         ,

        rec.UIN              ,

        rec.INVITERUIN       ,

        rec.INVITERALIAS     ,

        rec.RECMYSMS         ,

        rec.RECMYEMAIL       ,

        rec.RECMOBILE        ,

        rec.RECEMAIL         ,

        rec.STATUS           ,

        rec.REFUSERESION     ,

        rec.INVITEAUTH       ,

        rec.INVITEREMARK     ,

        rec.INVITETIME       ,

        rec.REMARKTIME       ,

        rec.ENABLE           ,

        rec.ISDELETED        ,

        rec.BEFORETYPE       ,

        rec.BEFORETIME       ,

        rec.NOTIFYCONF       ,

        rec.NEXTSENDDATE

      );      

      row_num := row_num + 1;

      --每2000条提交一次

      if mod(row_num, 2000) = 0 then

        commit;

      end if;

   end loop;

  commit;<

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29114615/viewspace-1220532/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29114615/viewspace-1220532/

你可能感兴趣的:(数据库,网络,ux)