暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle GoldenGate 12.2

永正信达 2021-05-11
1019

Oracle Golden gate 12.2 版本已经很长世间了,对比前几个版本变化很大。在安装过程早已经摈弃了原有命令行形式,采用了与Oracle DB 以及weblogic一样的图形解决,在界面上可以选择对应数据库版本的ogg。

下面就为大家介绍一下新版的ogg的安装实施过程。我们采用linux+oracle11g和solairs+12c的异构环境搭建,先完成单向复制再扩展做支持DDL操作。

1、项目背景

序号

项目

源端数据库

目标端数据库

1

操作系统

Redhat  6.5

Solairs 10

2

数据库版本

11.2.0.4

12.1.0.2

3

OGG版本

fbo_ggs_Linux_x64_shiphome.zip

fbo_ggs_Solaris_x86_64_shiphome.zip

4

系统名称

node01

Idota

2、源端安装ogg

2.1  $vi.profile  增加全局环境变量

$vi  .bash_profile

export PATH=$ORACLE_HOME/bin:/oracle/ogg:$PATH

#set OGG LD_LIBRARY_PATH

export  LD_LIBRARY_PATH=/oracle/ogg:$ORACLE_HOME/lib:$LD_LIBRARY_PATH

 

[oracle@node01 Disk1]$ ls

install   response  runInstaller  stage

[oracle@node01 Disk1]$ ./runInstaller


3、目标端安装ogg

 

$vi .profile  增加环境变量

PATH=$PATH:/usr/local/bin:/usr/ccs/bin:$ORACLE_HOME/bin:/oracle/ogg

#set ogg

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32 

 

$ ls

install     response    runInstaller  stage

$ ./runInstaller


4、测试ogg登陆

  • 源端ogg测试登陆


  • 目标端ogg测试登陆


5、创建ogg用户

5.1、源端数据库创建ogg用户

SQL> create tablespace ogg datafile  '/oracle/database/oradata/inds/ogg.dbf' size 200m;

Tablespace created.

SQL> create user ogg identified by ogg default  tablespace ogg;

User created.

SQL> grant connect ,resource,unlimited tablespace  to ogg;

Grant succeeded.

SQL>  grant  execute on utl_file to ogg;

Grant succeeded.

SQL> grant select any dictionary,select any table  to ogg;

Grant succeeded.

SQL>  grant  alter any table to ogg;

Grant succeeded.

SQL> grant flashback any table to ogg;

Grant succeeded. 

SQL> grant execute on DBMS_FLASHBACK to ogg;

Grant succeeded. 

SQL> show parameter enable_goldengate

NAME               TYPE          VALUE

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

enable_goldengate_replication      boolean         FALSE

SQL>grant dba to ogg;

Grant succeeded.

登陆ogg,确认可以访问数据库

5.2、目标端数据库

SQL> create tablespace ogg datafile  '/oracle/appnewdb/oradata/mynewdb/ogg.dbf' size 200m;

Tablespace created.

SQL> create user ogg identified by ogg default  tablespace ogg;

User created.

SQL> grant connect ,resource,unlimited tablespace  to ogg;

Grant succeeded.

SQL> grant execute on utl_file to ogg;

Grant succeeded.

SQL> grant select any dictionary,select any table  to ogg;

Grant succeeded.

SQL>  grant  alter any table to ogg;

Grant succeeded.

SQL> grant flashback any table to ogg;

Grant succeeded.

SQL> grant execute on DBMS_FLASHBACK to ogg;

Grant succeeded.

SQL> show parameter enable_goldengate

NAME               TYPE        VALUE

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

enable_goldengate_replication        boolean     FALSE

SQL>grant dba to ogg;

Grant succeeded.

登陆ogg,确认可以访问数据库

6、开启归档和附加日志

  • 检查源端数据库是否为归档模式,若为非归档模式,将改为归档模式

SQL> archive log list;

  • 检查源端数据库附加补充日志是否打开

SQL>select supplemental_log_data_min fromv$database;

  • 检查数据库附加日志并打开附加日志

SQL>alter database add supplemental log data;

切换日志以使附加日志生效

SQL>alter system archive log current;

  • 提到数据库的附加日志,它分为3个级别:

  1. 数据库级别的附加日志

    SQL>alter database add supplemental log data;

  2. 用户级别附加日志(使用DDL抽取功能时要启用该级别)

    GGSCI > add schematrandata scott

  3. 表级别的附加日志

    GGSCI (node01 as ogg@inds) 8> add trandatahr.employees


7、配置源端OGG

OGG配置分为源端和目标端配置,在源端配置mgr进程、extract进程、pump进程;在目标端配置mgr进程、replicat进程。对于各个进程的作用,大家都耳熟能详了,就不再阐述。 

在以往的版本中需要创建subdirs ,但在最新的版本中一下在安装ogg过程中已经创建好了。如果再执行create命令会提示“已经存在“。这是ogg的目录结构,用于保存ogg运行过程中生成的各类文件。




7.1、配置mgr  


GGSCI (node01 as ogg@inds) 22> info mgr

Manager is running (IP port node01.7809, Process ID3387). 

GGSCI (node01 as ogg@inds) 25> view params mgr 

PORT 7809    #默认MGR服务端口 7809

DYNAMICPORTLIST 7810-7820   #其它进程端口,如extract、replicat等

AUTOSTART ER E*     #以下表示 MGR进程启动后失败时自动启动或重启

AUTORESTART ER P*,RETRIES 4, WAITMINUTES 4

STARTUPVALIDATIONDELAY 5

GGSCI (node01 as ogg@inds) 26>


#添加表级trandata

仅当该表具有主键或是唯一约束时才可以表级别附加日志;如果表中没有主键或唯一索引时则必须指定一个或多个或全部列做主键,目的是避免重复数据。下面分别测试两种不同的表级trandata,在添加结尾有相关说明。


  • 具有主键或唯一约束的表

GGSCI (node01 as ogg@inds) 8> add trandata hr.employees

Logging of supplemental redo data enabled fortable HR.EMPLOYEES.

TRANDATA for scheduling columns has beenadded on table 'HR.EMPLOYEES'.

TRANDATA for instantiation CSN has been addedon table 'HR.EMPLOYEES'.


  • 不具有主键和唯一约束的表

GGSCI (node01 as ogg@inds) 13> add trandata scott.t

2017-01-12 10:35:04  WARNING OGG-06439  No unique key isdefined for table T. All viable columns will be used to represent the key, butmay not guarantee uniqueness. KEYCOLS may be used to define the key.

Logging of supplemental redo log data is already enabledfor table SCOTT.T.

TRANDATA for instantiation CSN has been added on table'SCOTT.T'.

 

#添加schema级别的trandata

添加schema级别的trandata,命令与添加表级别的相同。其命令是 add schematrandata SCHEMA。如果想使用schema级别的trandata,另外还需要设置参数enable_goldengate_replication 为true


SQL>  show parameter enable_goldengate_replication

NAME              TYPE          VALUE

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

enable_goldengate_replication     boolean    TRUE 

GGSCI (node01 as ogg@inds) 21> add schematrandata scott

2017-01-12 10:59:07  INFO   OGG-01788  SCHEMATRANDATA has beenadded on schema scott.

2017-01-12 10:59:07  INFO   OGG-01976  SCHEMATRANDATA forscheduling columns has been added on schema scott.


当然也可以通过delete schematrandata SCHEMA 取消。 


7.2、添加checkpoint表  

在目标端配置复制进程replicat之前,需要在目标数据库中创建checkpoint表。这个checkpoint表是基于GoldenGate checkpoint文件的,它记录了所有GoldenGate可以恢复的checkpoint以及sequence。

尽管这个操作不是必须的,但是Oracle强烈建议使用它,因为它可以使得

包含在Replicat的事物中,保证了可以从各类失败场景中恢复。


添加的步骤为在目标机器上编辑GLOBALS文件,添加

checkpointtable ogg.checkpoint

然后在ggsci中登陆ogg,使用addcheckpoint添加

GGSCI (node01 as ogg@inds) 9> edit params ./GLOBALS

GGSCI (node01 as ogg@inds) 10> view params ./GLOBALS

checkpointtable ogg.checkpoint

GGSCI (node01 as ogg@inds) 12> add checkpointtable ogg.checkpoint

Successfully created checkpoint table ogg.checkpoint.

GGSCI (node01 as ogg@inds) 13> info checkpointtable ogg.checkpoint

Checkpoint table ogg.checkpoint created 2017-01-1210:34:26.


阐述一下GLOBALS文件,它是一个全局文件,文件中的参数对全局起作用,其中的参数有mgrservname、checkpointtable、ggschema、ddltable、markertable、outputfiletable。文件名称必须大写。


7.3、配置抽取extract进程

抽取进程在源端运行,负责抓取需要传输的数据。

GGSCI (node01 as ogg@inds) 14> edit params extnd

GGSCI (node01 as ogg@inds) 15> view params extnd


SETENV 用于设置操作系统环境变量


GGSCI (node01 as ogg@inds) 16>  add extractextnd,tranlog,begin now

EXTRACT added.

表示创建一个extract进程,名称为extnd 。 注意:这个名称要与edit params extnd里面的名称一致。


GGSCI (node01 as ogg@inds) 17> add exttrail ./dirdat/et,extract extnd

EXTTRAIL added.

命令add exttrail创建本地文件./dirdat/et,进程extract进程抽取的源数据转换为数据写入该文件中,进程pump负责读取该文件。


7.4、数据传输pump进程

Pump进程又称为secondly extract进程。如果没有pump进程,则extract进程负责将把抽取来的数据库传递给目标端,配置pump进程还有个好处就是当网络故障时,可以把数据无差错的传递给目标端。


创建parameter pump_sos文件

GGSCI (node01as ogg@inds) 12> edit params pump_sos


添加params pump_sos进程到ggsci队列

GGSCI (node01 as ogg@inds) 31> add extractpump_sos,exttrailsource ./dirdat/et  

EXTRACT added.

GGSCI (node01 as ogg@inds) 32> add rmttrail ./dirdat/pt,extract pump_sos

RMTTRAIL added.


GGSCI (node01 as ogg@inds) 33> startpump_sos

Sending START request to MANAGER ...

EXTRACT PUMP_SOS starting

GGSCI (node01 as ogg@inds) 34> info all

Program    Status     Group   Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING                                

EXTRACT    RUNNING    EXTND   00:00:00      00:00:05    

EXTRACT    RUNNING    PUMP_SOS   00:00:00      00:00:07


8、配置目标端

8.1、配置mgr

依照配置源端的mgr参数,配置目标端的mgr,步骤如下



配置完成后,重启mgr进程


8.2、添加replicat复制进程

Replicat进程运行在目标端,负责读取源端抽取进程抽取的文件,然后把文件中的变化数据应用目标端,形成数据同步

创建replicat复制进程


在GGSCI中添加replicat进程管理

GGSCI (Idota as ogg@mynewdb) 12> add replicatrepl,exttrail ./dirdat/pt

REPLICAT added.

GGSCI (Idota as ogg@mynewdb) 22> start repl

Sending START request to MANAGER ...

REPLICAT REPL starting

GGSCI (Idota as ogg@mynewdb) 23> info all

Program    Status    Group    Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING                                  

REPLICAT  RUNNING     REPL     00:00:00      00:00:06 


9、DML测试验证同步

检查源端和目标端的scott.dept数据

  • 源端


  • 目标端


  • 源端做DML操作


  • 目标端数据检查是否同步


OGG很完美的完成基于DML操作的数据同步,但是无法完成基于DDL的操作。如何完成DDL操作同步呢,在ogg 12版本中还需要我们执行几个脚本:

marker_setup.sql、ddl_setup.sql、role_setup.sql、ddl_enable.sql、以及性能优化工具@?/rdbms/admin/dbmspool.sql、ddl_pin.sql 

 

10、配置DDL复制

要支持DDL复制,就需要在源端执行ogg提供的支持DDL操作的脚本,也就是上面提到的6个sql,分别执行。大家对于执行SQL都是信手拈来,下面只简单的说明下主要事项。

10.1、执行支持DDL复制的SQL脚本

  • marker_setup.sql 

输入ogg的schema:ogg


  • ddl_setup.sql  

检查是否具有default tablespace 以及autoextend on。同时对oracle 10g对回收站有要求,必须关闭。在 oracle 11g和12c可以开启。


  • role_setup.sql  

该脚本生成GGS_GGSUSER_ROLE角色,授予给ogg


  • ddl_enable.sql

启用DDL复制,实质是个触发器。用以想MARKER和HISTORY表插入DDL信息


  • @?/rdbms/admin/dbmspool.sql (可选项)

把执行过程中使用的package加载到内存中以提高DDL触发器和性能效率。它引用了dbms_shared_pool系统包。


  • ddl_pin.sql  


至此,执行DDL复制的脚本执行完成,接下来需要分别修改源端和目标端的参数文件,是对应的进程执行DDL复制。

10.2、修改进程进程参数

在extract进程和pump进程中分别添加   “DDLINCLUDE ALL“


在目标端的replicat进程中,添加“DDL INCLUDE ALL”和“DDLERROR DEFAULT IGNORERETRYOP MAXRETRIES 3 RETRYDELAY 5”


修改完成后重启进程生效。


11、DDL测试验证同步

  • 源端数据库


  • 目标端数据库



通过测试不能发现在目标端数据库也生成了表T2,实现了DDL操作。仔细观察,发现源端数据库和目标端数据库的T2的数据量不一致呢,不禁联想到ogg复制是通过解析和应用SQL语句实现数据同步的。


依赖永正信达,科技成就你我!


点击上面【永正信达二维码】可快速关注



文章转载自永正信达,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论