• ADADADADAD

    GoldenGate从oracle迁移数据到mysql[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:13:52

    作者:文/会员上传

    简介:

    1 软件简介 安装时应该选择最为稳定的安装版本,现在官方发布的版本主要为: Oracle GoldenGate 11.2.1.0.1 对应不同的数据库和版本,有不同的安装介质。下面是根据现网情况使用

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    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安装文件,通过下述命令实现:

    unzipggs_*.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

    下面是日志:

    Creatingsubdirectories under current directory /home/ogghome

    Parameterfiles /home/ogghome/dirprm: alreadyexists

    Reportfiles/home/ogghome/dirrpt: created

    Checkpointfiles /home/ogghome/dirchk:created

    Processstatus files/home/ogghome/dirpcs: created

    SQLscript files /home/ogghome/dirsql: created

    Databasedefinitions files/home/ogghome/dirdef: created

    Extractdata files/home/ogghome/dirdat: created

    Temporaryfiles/home/ogghome/dirtmp: created

    Stdoutfiles /home/ogghome/dirout:created

    4 GoldenGate部署

    4.1 初始化源端数据库

    4.1.1 开启归档模式

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

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

    SQL> shutdownimmediate

    SQL> startupmount

    SQL> alterdatabase archivelog

    SQL> alterdatabase open

    SQL> archivelog list

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

    4.1.2 开启附加日志

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

    SQL> alterdatabase add supplemental log data;

    SQL> altersystem switch logfile;

    SQL> selectsupplemental_log_data_min from v$database;

    4.1.3 开启强制日志模式

    SQL>alterdatabase force logging;

    SQL>SELECT FORCE_LOGGING FROM V$DATABASE;

    4.1.4 goldengate创建用户并授权

    源端oracle数据库创建账号:

    createtablespace data_goldengate datafile '+DG_DATA1' size 10240m autoextend on;

    createuser goldengate identified by password default tablespace data_goldengatetemporary tablespace temp;

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

    grantCONNECT,RESOURCE to goldengate;

    grantCREATE SESSION,ALTER SESSION to goldengate;

    grantSELECT ANY DICTIONARY,SELECT ANY TABLE to goldengate;

    grantCREATE TABLE,ALTER ANY TABLE to goldengate;

    grantunlimited tablespace to goldengate;

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

    grantALL PRIVILEGES on *.* to goldengate@'%';

    grantALL PRIVILEGES on *.* to goldengate@'localhost';

    updatemysql.user set password=password('password') where user='goldengate';

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

    ./ggsci

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

    Successfullylogged into database.

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

    Loggingof supplemental redo log data is disabled for table XIANYEZHAO.CALENDAR_DETAIL.

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

    Loggingof supplemental redo data enabled for table XIANYEZHAO.CALENDAR_DETAIL.

    GGSCI(localhost.localdomain) 4> info trandataXIANYEZHAO.CALENDAR_DETAIL

    Loggingof supplemental redo log data is enabled for table XIANYEZHAO.CALENDAR_DETAIL.

    Columnssupplementally logged for table XIANYEZHAO.CALENDAR_DETAIL: SEQNO.

    4.2 配置ASM访问方式

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

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

    ASMinstances appear with a blocked status from the 'lsnrctl services'command (seebelow). To remotely access a 'blocked service' you need toadd (UR=A) to the tnsconnect string (plus you will need a password filefor the asm instance).

    Tnsnames.oraentry:----

    下面是监听状态,使用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> EDITPARAMS MGR

    PORT 7809

    PURGEOLDEXTRACTS ./dirdat,USECHECKPOINTS

    ggsci> STARTMGR

    ggsci> INFO MGR

    4.5 创建Extract: ext_cal

    4.5.1 增加extract

    addextract ext_cal, tranlog, begin now, THREADS 2

    EXTRACTadded.

    4.5.2 设定exttrail

    addexttrail ./dirdat/ca, extract ext_cal, megabytes 100

    EXTTRAILadded.

    4.5.3 配置extract

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

    editparams ext_cal

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

    EXTRACText_cal

    SETENV(NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")

    SETENV(ORACLE_SID="g139bak2")

    useridgoldengate, password password

    TRANLOGOPTIONSASMUSER sys@asm,ASMPASSWORD ******

    EXTTRAIL./dirdat/ca

    TRANLOGOPTIONSLOGRETENTION DISABLED

    TRANLOGOPTIONSBUFSIZE 2048000

    tranlogoptionsaltarchivedlogformat threadid 1 g139bak_%S_%T_%R.log

    tranlogoptionsaltarchivedlogformat threadid 2 g139bak_%S_%T_%R.log

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

    --DDLINCLUDE mapped

    --DDLOPTIONSADDTRANDATA

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

    DISCARDROLLOVERAT 6:00

    REPORTROLLOVERAT 6:00

    REPORTCOUNTEVERY 1 HOURS,RATE

    TRANLOGOPTIONSALTARCHIVELOGDEST /archivelog2

    FETCHOPTIONSMISSINGROW ABEND

    STATOPTIONSREPORTFETCH

    WARNLONGTRANS1H,CHECKINTERVAL 10m

    DYNAMICRESOLUTION

    TABLEXIANYEZHAO.CALENDAR_DETAIL;

    TABLEXIANYEZHAO.CALENDAR_INFO;

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

    下面是查看内容:

    GGSCI(gb139bak02) 5> view report ext_cal

    4.6 创建投送进程: dp_cal

    4.6.1 增加extract

    addextract dp_cal, exttrailsource ./dirdat/ca

    4.6.2 设定extract投递rmttrail

    addrmttrail ./dirdat/ca, extract dp_cal

    4.6.3 配置extract

    editparams dp_cal

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

    EXTRACTdp_cal

    passthru

    DYNAMICRESOLUTION

    RMTHOST192.168.219.35, MGRPORT 7809, COMPRESS

    RMTTRAIL./dirdat/ca

    TABLEXIANYEZHAO.CALENDAR_DETAIL;

    TABLEXIANYEZHAO.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

    $ vical.prm

    DEFSFILE/home/ogghome/dirdef/cal.def

    USERIDgoldengate PASSWORD password

    TABLEXIANYEZHAO.CALENDAR_DETAIL;

    TABLEXIANYEZHAO.CALENDAR_INFO;

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

    /home/ogghome/defgenPARAMFILE /home/ogghome/dirprm/cal.prm

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

    Oracle GoldenGate Table DefinitionGenerator for Oracle

    Version 11.2.1.0.1OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230

    Linux, x64, 64bit (optimized), Oracle 10g onApr 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

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

    OperatingSystem 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

    AddressSpace Size : unlimitedunlimited

    HeapSize : unlimitedunlimited

    FileSize : unlimitedunlimited

    CPUTime : unlimitedunlimited

    Processid: 2014

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

    ** Running with the followingparameters **

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

    DEFSFILE/home/ogghome/dirdef/cal.def

    USERIDgoldengate PASSWORD ********

    TABLEXIANYEZHAO.CALENDAR_DETAIL;

    Retrievingdefinition for XIANYEZHAO.CALENDAR_DETAIL

    TABLEXIANYEZHAO.CALENDAR_INFO;

    Retrievingdefinition for XIANYEZHAO.CALENDAR_INFO

    Definitionsgenerated for 2 tables in /home/ogghome/dirdef/cal.def

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

    [oracle@localhostdirdef]$ sftp mysql@192.168.61.131

    Connectingto 192.168.61.131...

    mysql@192.168.61.131'spassword:

    sftp>cd /home/ogghome/dirdef

    sftp>!ls

    sftp>put cal.def

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

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

    修改mysql端定义文件的权限

    chownmysql:dba /home/ogghome/dirdef/cal.def

    chmod755 /home/ogghome/dirdef/cal.def

    4.8 初始化数据

    4.8.1 Oracle到oracle导出方式

    1、查看系统改变号:

    colcurrent_scn for 999999999999999999999999999999

    selectcurrent_scn from v$database;

    --1138506

    2、导出导入数据:

    setlinesize 133

    coldirectory_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.logTABLES=test.t3 FLASHBACK_SCN=1138506

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

    --REMAP_SCHEMA=TEST:TEST

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

    用SCN 启动Replicat

    startrep_cal, aftercsn 1138506

    4.8.2 Oracle到mysql方式

    使用goldengatedirect load的方式:

    源端:

    ADD EXTRACT einixyz,SOURCEISTABLE

    EXTRACT einixyz

    userid goldengate, passwordpassword

    RMTHOST 192.168.219.35, MGRPORT7809, 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 PASSWORDpassword

    TABLE XIANYEZHAO.T_INI;

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

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

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

    目标端:
    ADDREPLICATrinixyz,SPECIALRUN

    replicat RINIXYZ

    sourcedefs/home/ogghome/dirdef/cal_xyz.def

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

    sourcedb cal@localhost useridgoldengate, password password

    reperror default, discard

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

    MAP XIANYEZHAO.T_INI , TARGETCAL.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选项。

    CREATETABLE CALENDAR_DETAIL

    ( SEQNODECIMAL 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

    );

    CREATEINDEX CALENDAR_DETAIL_IDX3_NEW ON CALENDAR_DETAIL (DETAILSEQNO);

    CREATEUNIQUE INDEX PK_CALENDAR_DETAIL ON CALENDAR_DETAIL (SEQNO);

    CREATEINDEX CALENDAR_DETAIL_IDX1_NEW ON CALENDAR_DETAIL (STARTSENDTIME);

    CREATEINDEX CALENDAR_DETAIL_IDX2_NEW ON CALENDAR_DETAIL (UIN);

    ALTERTABLE CALENDAR_DETAIL ADD CONSTRAINT PK_CALENDAR_DETAIL PRIMARY KEY(SEQNO);

    CREATETABLE CALENDAR_INFO

    ( SEQNODECIMAL 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

    );

    CREATEINDEX CALENDAR_INFO_IDX6_NEW ON CALENDAR_INFO (SPECIALAPPID);

    CREATEINDEX CALENDAR_INFO_IDX1_NEW ON CALENDAR_INFO (UIN);

    CREATEINDEX CALENDAR_INFO_IDX7_NEW ON CALENDAR_INFO (LABELID);

    CREATEINDEX CALENDAR_INFO_IDX4_NEW ON CALENDAR_INFO (STARTTIME);

    CREATEINDEX CALENDAR_INFO_IDX8_NEW ON CALENDAR_INFO (GID);

    CREATEINDEX SPECIALTYPE_INDEX ON CALENDAR_INFO (SPECIALTYPE);

    CREATEUNIQUE INDEX PK_CALENDAR_INFO ON CALENDAR_INFO (SEQNO);

    CREATEINDEX CALENDAR_INFO_IDX5_NEW ON CALENDAR_INFO (ENDTIME);

    CREATEINDEX CALENDAR_INFO_IDX3_NEW ON CALENDAR_INFO (ENDDATE);

    CREATEINDEX CALENDAR_INFO_IDX2_NEW ON CALENDAR_INFO (STARTDATE);

    ALTERTABLE CALENDAR_INFO ADD CONSTRAINT PK_CALENDAR_INFO PRIMARY KEY (SEQNO);

    4.9.2 在目标端配置replicat进程

    ggsci> EDITPARAMS ./GLOBALS

    CHECKPOINTTABLE goldengate.ggschkpt

    ggsci> exit

    ggsci> dblogin sourcedbcal@192.168.219.35:3306,userid goldengate, password password

    ggsci> add checkpointtable cal.checkpt

    Successfullycreated checkpoint table cal.checkpt.

    4.9.3 创建Replicat

    add replicatrep_cal, exttrail ./dirdat/ca ,checkpointtable cal.checkpt

    4.9.4 配置replicat

    editparams rep_cal

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

    REPLICATrep_cal

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

    sourcedbcal@localhost userid goldengate, password password

    SQLEXEC"select CURRENT_TIME();" EVERY 10 MINUTES

    REPORTAT 6:00

    gettruncates

    STATOPTIONSRESETREPORTSTATS

    reperror(default,abend)

    discardrolloverat 6:00

    numfiles1000

    MAXLONGLEN8000

    dynamicresolution

    allownoopupdates

    SOURCEDEFS./dirdef/cal.def

    GROUPTRANSOPS100000

    MAXTRANSOPS100000

    REPORTCOUNTEVERY 1 MINUTES RATE

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

    MAPXIANYEZHAO.CALENDAR_DETAIL ,TARGET CAL.CALENDAR_DETAIL ,KEYCOLS( SEQNO );

    MAPXIANYEZHAO.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 StatusGroup Lag at Chkpt Time Since Chkpt

    MANAGER RUNNING

    REPLICAT RUNNINGREP_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) ,typefrom calendar_detail group by type;

    COUNT(1) TYPE

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

    1783 3

    10259 0

    update calendar_detail settype=1;

    mysql> select count(1) ,typefrom 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;<

    GoldenGate从oracle迁移数据到mysql.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: goldengatemysqloracle