• GoldenGate异构的安装部署(从Oracle到MySQL)


     

    部署环境说明

     

     

    源端

    主机IP

    192.168.56.110

    主机名

    ggdb01

    数据库主目录

    /u02/app/oracle/product/11.2.0.4/dbhome_1

    数据库版本

    11.2.0.4

    Goldengate主目录

    /u02/app/goldengate

    Goldengate版本

    11.2.1.0.15

     

     

    目标端

    主机IP

    192.168.56.131

    主机名

    mysqldb01

    数据库主目录

    /usr/local/mysql

    数据库版本

    5.7.26

    Goldengate主目录

    /u02/app/goldengate

    Goldengate版本

    11.2.1.0.1

    准备操作系统用户

    在源端和目标端主机上,安装部署GoldenGate软件的操作系统用户,必须对软件的安装目录具有读写权限,同时还需要对数据库的在线日志和归档日志拥有读权限。除此之外,该操作系统用户还需要足够的系统资源权限。

    在本示例中,源端使用oracle操作系统用户,目标端使用mysql操作系统用户。

    安装GoldenGate软件

    安装GoldenGate软件的过程非常简单,只需要将软件包解压缩到软件目录,最后在GGSCI命令行接口中输入create subdirs命令即可,详细的安装命令如下所示。

    $ cd /u02/app/goldengate

    $ unzip p17650070_1121015_Linux-x86-64.zip

    $ tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

    $ ./ggsci

    GGSCI > create subdirs

    至此,GoldenGate软件安装完成。

    源端系统配置

    略。。

    目标端系统配置

    创建GoldenGate管理数据库

    在MySQL中,数据库就相当于Oracle数据库的schema。在本示例中,可以在目标端MySQL实例下创建ggate数据库,GoldenGate自身产生的所有数据对象都存放在该数据库中。

    root@localhost [(none)]>create database ggate;

    Query OK, 1 row affected (0.01 sec)

    root@localhost [(none)]>

    创建GoldenGate管理用户

    root@localhost [(none)]>create user ggate@'localhost' identified by 'ggate_5678';

    Query OK, 0 rows affected (0.01 sec)

    root@localhost [(none)]>grant all on *.* to ggate@'localhost';

    Query OK, 0 rows affected (0.01 sec)

    root@localhost [(none)]>

    配置GoldenGate软件

    源端配置Manager进程

    要使用GoldenGate,必须先配置Manager进程,指定Manager进程使用的TCP/IP端口号,还可以在Manager进程的参数文件中指定Trail文件维护和其他属性参数。

    (1)、配置Manager进程,命令如下所示。

    $ ./ggsci

    GGSCI > info all

    Program     Status      Group       Lag           Time Since Chkpt

    MANAGER     STOPPED

    GGSCI > edit params mgr

    (2)、在Manager进程的参数文件中添加以下内容。

    PORT 7809

    userid ggate, password ggate_5678

    AUTOSTART ER *

    AUTORESTART ER *, RETRIES 3

    PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24, MINKEEPFILES 10

    LAGREPORTMINUTES 15

    LAGCRITICALMINUTES 30

    该参数文件指定Manager进程的通信端口为7809,同时设置为该GoldenGate实例下的所有Extract和Replicat进程会随着Manager进程一起自动启动,除此之外,还允许自动删除历史的Trail文件。

    (3)、启动Manager进程。

    GGSCI > start mgr

    Manager started.

    GGSCI > info all

    Program     Status      Group       Lag at Chkpt  Time Since Chkpt

    MANAGER     RUNNING                                          

    GGSCI >

    进程的状态为RUNNING,表示Manager进程已经正常运行。

    源端添加表级别附加日志

    例如,对test用户下的所有表都添加附加日志,命令如下所示。

    GGSCI > dblogin userid ggate, password ggate_5678

    GGSCI > add trandata test.*

    目标端配置checkpoint表

    在目标端数据库上,建议配置checkpoint表,表名为ggate.checkpoint,它用来保存GoldenGate进程的检查点信息,具体步骤如下所示。

    (1)、修改GoldenGate软件主目录下的GLOBALS文件,命令如下所示。

    GGSCI > edit params ./GLOBALS

    注意文件名必须为大写的GLOBALS。

    (2)、在GLOBALS文件中添加如下内容。

    checkpointtable ggate.checkpoint

    (3)、调用add checkpointtable命令,创建checkpoint表,命令如下所示。

    GGSCI > dblogin sourcedb test@localhost:3306, userid ggate, password ggate_5678

    GGSCI > add checkpointtable ggate.checkpoint

    至此,目标端在ggate数据库中会创建一个名为checkpoint的表。

    目标端配置Manager进程

    同样,在目标端系统上也必须先配置Manager进程,指定Manager进程使用的TCP/IP端口号,还可以在Manager进程的参数文件中指定Trail文件维护和其他属性参数。

    (1)、配置Manager进程,命令如下所示。

    $ ./ggsci

    GGSCI > info all

    Program     Status      Group       Lag           Time Since Chkpt

    MANAGER     STOPPED

    GGSCI > edit params mgr

    (2)、在Manager进程的参数文件中添加以下内容。

    PORT 7809

    sourcedb test@localhost:3306, userid ggate, password ggate_5678

    AUTOSTART ER *

    AUTORESTART ER *, RETRIES 3

    PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24, MINKEEPFILES 10

    LAGREPORTMINUTES 15

    LAGCRITICALMINUTES 30

    (3)、启动Manager进程。

    GGSCI > start mgr

    Manager started.

    GGSCI > info all

    Program     Status      Group       Lag at Chkpt  Time Since Chkpt

    MANAGER     RUNNING                                          

    GGSCI >

    进程的状态为RUNNING,表示目标端GoldenGate的Manager进程已经正常运行。

    源端添加Extract进程

    在源端GGSCI工具命令行下,执行ADD EXTRACT命令添加Extract进程。

    (1)、本示例中的源端数据库是一个单节点数据库,需要创建一个Extract进程,从现在立刻进行增量抽取,进程名为e_0a,则具体命令如下所示。

    GGSCI > add extract e_0a,  tranlog,  begin now

    EXTRACT added.

    (2)、创建完Extract进程后,我们需要指定这个Extract进程抽取的增量数据存放到哪个Trail文件中,假设Trail文件存放到GoldenGate软件主目录的dirdat子目录下,Trail文件名的前缀为0a,每个Trail文件大小为200MB,则具体的命令如下所示。

    GGSCI > add exttrail ./dirdat/0a, extract e_0a, megabytes 200

    EXTTRAIL added.

    GGSCI (prodzhdb6) 7>

    (3)、接着,我们需要编辑这个Extract进程的参数文件,命令如下所示。

    GGSCI > edit params e_0a

    (4)、指定这个Extract进程负责抽取哪些数据对象上发生的增量数据。假设我们要抽取test用户下所有表发生的增量数据,则参数文件内容如下所示。

    EXTRACT e_0a

    SETENV (ORACLE_HOME = "/u02/app/oracle/product/11.2.0.4/dbhome_1")

    SETENV (ORACLE_SID="oggdb")

    SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

    USERID ggate, password ggate_5678

    EXTTRAIL ./dirdat/0a

    --TRANLOGOPTIONS DBLOGREADER

    --DDL INCLUDE ALL

    --DDLOPTIONS ADDTRANDATA

    DISCARDFILE ./dirrpt/e_0a.dsc, append, megabytes 1000

    DISCARDROLLOVER AT 02:00

    REPORTROLLOVER AT 02:00

    REPORTCOUNT EVERY 1 HOURS, RATE

    FETCHOPTIONS, USESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT

    STATOPTIONS REPORTFETCH

    WARNLONGTRANS 2H, CHECKINTERVAL 3m

    TABLE test.*;

    注意,GoldenGate进程的参数文件中EXTTRAIL参数使用的路径必须与add exttrail命令中指定的Trail文件路径完全一致。

    (5)、启动该Extract进程,具体命令如下所示。

    start extract e_0a

    此时,源端test用户下的表对象如果发生DML操作,则所有的增量数据都会被抽取记录到本地的Trail文件中。

    (6)、查看Extract进程e_0a的增量数据抽取情况,命令如下所示。

    GGSCI > stats e_0a

    Sending STATS request to EXTRACT E_0A ...

    Start of Statistics at 2020-07-26 10:41:53.

    Output to ./dirdat/0a:

    Extracting from TEST.MM to TEST.MM:

    *** Total statistics since 2020-07-26 10:41:43 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    *** Daily statistics since 2020-07-26 10:41:43 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    *** Hourly statistics since 2020-07-26 10:41:43 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    *** Latest statistics since 2020-07-26 10:41:43 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    End of Statistics.

    可以看出TEST用户下的MM这张表已经有数据变化,新删除了9条记录已经被Extract进程捕获。

    源端添加Datapump进程

    在此配置中,Extract进程负责读取源端数据库的日志文件,将增量数据写入到本地的Trail文件,而本地的Datapump进程负责读取本地的Trail文件,并将数据传输到目标端主机上的远程Trail文件,最终目标端主机上的Trail文件由目标端的Replicat进程读取。

    (1)、在源端GGSCI工具命令行下,执行ADD EXTRACT命令添加Datapump进程,例如,需要创建一个名为p_0a的Datapump进程,读取的数据源为本地前缀为0a开始的Trail文件,具体命令如下所示。

    GGSCI > add extract p_0a, exttrailsource ./dirdat/0a

    (2)、创建完Datapump进程后,我们需要指定这个Datapump进程将数据传输到远程主机的Trail文件中,假设存放到GoldenGate软件主目录的dirdat目录下,Trail文件名的前缀为aa,每个远程Trail文件大小为200MB,则具体的命令如下所示。

    GGSCI > add rmttrail ./dirdat/aa, extract p_0a, megabytes 200

    (3)、接着,我们需要编辑这个Datapump进程,命令如下所示。

    GGSCI > edit params p_0a

    (4)、修改Datapump进程的参数文件,指定这个Datapump进程负责将哪些数据对象上发生的增量数据传输到哪个主机上。假设我们要将test用户下的所有表发生的增量数据传输到目标端主机的Trail文件里,具体参数文件内容如下所示。

    EXTRACT p_0a

    SETENV (ORACLE_HOME="/u02/app/oracle/product/11.2.0.4/dbhome_1")

    SETENV (ORACLE_SID="oggdb")

    SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

    Passthru

    RMTHOST 192.168.56.131, MGRPORT 7809

    RMTTRAIL ./dirdat/aa

    DISCARDFILE ./dirrpt/p_0a.dsc, append, megabytes 1000

    DISCARDROLLOVER AT 02:00

    REPORTROLLOVER AT 02:00

    REPORTCOUNT EVERY 4 HOURS, RATE

    TABLE test.*;

    (5)、启动该Datapump进程,具体命令如下所示。

    GGSCI > start extract p_0a

    此时,源端test用户下的所有表如果发生DML操作,则所有的增量数据都会被传输到远程主机上的Trail文件中。

    (6)、查看Datapump进程p_0a的增量数据抽取情况,命令如下所示。

    GGSCI > stats p_0a

    Sending STATS request to EXTRACT P_0A ...

    Start of Statistics at 2020-07-26 10:50:16.

    Output to ./dirdat/aa:

    Extracting from TEST.MM to TEST.MM:

    *** Total statistics since 2020-07-26 10:50:01 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    *** Daily statistics since 2020-07-26 10:50:01 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    *** Hourly statistics since 2020-07-26 10:50:01 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    *** Latest statistics since 2020-07-26 10:50:01 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

    End of Statistics.

    可以看出Datapump进程已经开始工作,TEST用户下的MM这张表已经有数据传输到目标端主机,此时在目标端主机上已经存在前缀为aa的Trail文件。

    源端生成表定义文件

    在异构数据库环境中,需要使用defgen工具生成sourcedefs或者targetdefs表结构定义文件。

    (1)、在GGSCI命令行中,执行以下命令创建一个DEFGEN参数文件。

    EDIT PARAMS DEFGEN

    (2)、在DEFGEN参数文件中指定需要生成数据定义文件的表对象,例如,需要生成test.mm这张表的定义文件,具体参数内容如下所示。

    DEFSFILE /u02/app/goldengate/dirdef/mm.def

    USERID ggate, PASSWORD ggate_5678

    TABLE test.mm;

    (3)、保存DEFGEN参数文件并退出。

    (4)、运行DEFGEN工具来生成数据定义文件。进入GoldenGate软件的主目录运行DEFGEN工具,具体命令如下所示。

    $ ./defgen paramfile dirprm/defgen.prm

    如果源端和目标端的GoldenGate版本不同,并且表结构也不同时,需要在defgen命令行中加上NOEXTATTR参数。

    (5)、使用ASCII模式,通过FTP将数据定义文件从GoldenGate软件目录的dirdef子目录发送到另一个系统,将其保存到该系统上GoldenGate软件的dirdef子目录。

    目标端添加Replicat进程

    在目标端GGSCI工具命令行下,执行ADD REPLICAT命令添加Replicat进程。

    (1)、本示例中,在目标端系统上创建一个名为r_0a的Replicat进程,该进程读取以aa为前缀的Trail文件,则具体命令如下所示。

    GGSCI > add replicat r_0a, exttrail ./dirdat/aa, checkpointtable ggate.checkpoint

    (2)、接下来,我们需要编辑Replicat进程,命令如下所示。

    GGSCI > edit params r_0a

    (3)、编辑Replicat进程的参数文件。假设将源端test用户下的表发生的增量数据复制到目标端test用户下相同的表上,具体的参数如下所示。

    REPLICAT r_0a

    SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

    HANDLECOLLISIONS

    targetdb test@localhost, USERID ggate, password ggate_5678

    sourcedefs /u02/app/goldengate/dirdef/mm.def

    DISCARDFILE ./dirrpt/r_0a.dsc, append, megabytes 1000

    DISCARDROLLOVER AT 02:00

    REPORTROLLOVER AT 02:00

    REPORTCOUNT EVERY 4 HOURS, RATE

    MAP test.mm, TARGET test.mm;

    目前我们还不能直接启动Replicat进程,因为此时目标端的数据库上还不存在test用户,还没有初始数据,而Replicat进程读取来自Trail文件内的增量数据。

    目标端数据初始化

    创建业务数据库

    在MySQL中,数据库就相当于Oracle数据库的schema。在本示例中,需要同步源端test用户下的mm表。所在可以在目标端MySQL实例下创建test数据库。

    root@localhost [sys]>create database test CHARACTER SET utf8mb4;

    Query OK, 1 row affected (0.01 sec)

    root@localhost [sys]>

    如果字符集不对,导入的中文均未乱码。

    创建表结构

    要创建innodb引擎的表,注意ORACLE和MYSQL的对应数据类型。ORACLE中的number对应MYSQL的int,ORACLE中的varchar2对应MYSQL的varchar,建表中需要进行数据类型的转换。

    Test.mm表在Oracle源端的表结构如下所示:

    create table test.mm(id number, name varchar2(100), primary key(id));

    所以,在MySQL目标端的表结构必须修改为:

    create table test.mm(id int, name varchar(100), primary key(id));

    数据初始化

    (1)、在源端系统上,将test.mm这张表中的数据导出成文本文件,字段之间用逗号分隔。

    create or replace directory utlpath as '/u02';

    declare

        outfile utl_file.file_type;

    begin

        outfile := utl_file.fopen('UTLPATH','mm.txt','W');

        for rec in (select * from test.mm)

        loop

           utl_file.put_line(outfile, rec.id||','||rec.name);

        end loop;

        utl_file.fclose(outfile);

    end;

    /

    此时,在/u02目录下会生成一个名为mm.txt的文本文件,文件内容为test.mm这张表中的数据。

    (2)、将源端系统上生成的文本文件复制到目标端数据库主机上。例如/tmp目录下。

    (3)、在目标端MySQL服务器中将文本文件中的数据导入到test.mm表中。

    root@localhost [(none)]>load data infile '/tmp/mm.txt' into table test.mm FIELDS TERMINATED BY ',';

    Query OK, 9991 rows affected (0.17 sec)

    Records: 9991  Deleted: 0  Skipped: 0  Warnings: 0

    root@localhost [(none)]>commit;

    Query OK, 0 rows affected (0.02 sec)

    root@localhost [(none)]>select count(*) from test.mm;

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

    | count(*) |

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

    |     9991 |

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

    1 row in set (0.01 sec)

    root@localhost [(none)]>

    目标端启动Replicat进程

    启动目标端的复制进程,命令如下所示:

    GGSCI > start r_0a

    复制进程启动后,检查复制进程当前的状态,命令如下所示。

    GGSCI (mysqldb01.oracle.com) 21> stats r_0a

    Sending STATS request to REPLICAT R_0A ...

    Start of Statistics at 2020-07-26 11:46:52.

    Replicating from TEST.MM to test.mm:

    *** Total statistics since 2020-07-26 11:46:38 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

            Total delete collisions                            9.00

    *** Daily statistics since 2020-07-26 11:46:38 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

            Total delete collisions                            9.00

    *** Hourly statistics since 2020-07-26 11:46:38 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

            Total delete collisions                            9.00

    *** Latest statistics since 2020-07-26 11:46:38 ***

            Total inserts                                      0.00

            Total updates                                      0.00

            Total deletes                                      9.00

            Total discards                                     0.00

            Total operations                                   9.00

            Total delete collisions                            9.00

    End of Statistics.

    GGSCI (mysqldb01.oracle.com) 22>

    可以看出,复制进程已经工作,当目标端的复制进程追平源端时,关闭复制进程中的HANDLECOLLISIONS参数。

  • 相关阅读:
    [对对子队]会议记录5.27(Scrum Meeting12)
    [对对子队]会议记录5.25(Scrum Meeting11)
    [对对子队]会议记录5.24(Scrum Meeting10)
    [对对子队]会议记录5.22(Scrum Meeting9)
    [对对子队]会议记录5.21(Scrum Meeting8)
    [对对子队]会议记录5.20(Scrum Meeting7)
    团队作业第六次——Beta冲刺日志集合
    团队作业第六次——Beta冲刺日志集合
    团队作业第五次——敏捷冲刺日志集合
    Beta冲刺答辩
  • 原文地址:https://www.cnblogs.com/missyou-shiyh/p/13380427.html
Copyright © 2020-2023  润新知