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
3GoldenGate软件安装
3.1组和用户创建
源端是oracle生产数据库,已经存在oracle和dba,复用该用户和组。
目标端是mysql,已经存在mysql和dba,复用该用户和组。
3.2GoldenGate安装目录检查
安装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.4GoldenGate软件启动测试
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
4GoldenGate部署
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.4goldengate创建用户并授权
源端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 mysql@192.168.61.131
Connecting
to 192.168.61.131...
mysql@192.168.61.131'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.1Oracle到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.2Oracle到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
cal@192.168.219.35: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
5Goldengate同步测试
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.3DML测试
从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;<