第十三章:Oracle GoldenGate实施参考

点击数:2199发布日期:2020-04-19 15:14:04 来源:oracle数据库秘笈

第十三章:Oracle GoldenGate实施参考

13.1前言:

    Oracle GoldenGate软件需要另外收费。GoldenGate是创建于1995年的美国公司,开发总部设在旧金山,数据库的复制领域的专业公司,2009年被甲骨文Oracle公司收购,之后简称ogg。和DataGuard一样,也是实现数据库容灾的一种技术。

   GoldenGate的优势在于1、可以实现异构的IT基础结构的容灾,不同数据库版本,不同操作系统,不同的数据库之间都可以。2、对网络的压力和DataGuard相比要小。3、对生产系统的影响较小。4、可以实现数据库间的双向复制,但双向复制不能基于同一套表。5、支持双活多活,复制的目标端也可以是active的。6、过虑没必要的日志与事务。7、数据迁移时可以实现零宕机。

    DataGuard的缺点是:1、需要另行购买licence.2、对于大数据量的数据一致性效验存在疑问的,还需要购买GoldenGate Veridata来校验数据一致性。3对生产库有一些特殊要求,比如强烈推荐有主键或唯一索引,存在不支持的数据类型。4、复制的实现比DataGuard较复杂。5、对于ddl的复制暂只支持Oracle to Oracle,况且对ddl的支持还需要另外的一些条件。6、需要主机存储端配合的工作较多。比如存储队列的空间,如果是RAC,要求将归档日志放在共享存储上。7、需要保留一段时间的归档日志(建议为七天)。


13.2深入了解GoldenGate

    数据容灾复制的技术很多,有存储级别的,很多银行金融机构在用;有数据库级别的DataGuardQuest ShareplexMicrosoft SQL Replication,还有DSG(迪思杰)Oracle后来收购了GoldenGate所以摇身一变就成了Oracle官方支持的容灾软件了。

   13.2.1 GoldenGate的五个进程。

    Capture(抓取进程),实时读取redo变化,并可以实现过滤。

    Source trail(队列文件),暂存数据的变化,可以设置保留天数。

    Pump(传输进程),数据经过压缩和加密传送到目标端。

    DELIVERY(投递进程),在目标数据库实现队列文件的应用提交。

    MANAGER(管理进程),队列管理,进程管理,监控复制,接受UI的指令,提供延迟报告,事件报告,错误日志等,相当于总管家。

   13.2.2需要在磁盘上存储的组件。

   安装介质,Trail Files(队列文件),Checkpoint Files(检查点文件), Source Data Definition Files 数据定义文件,Configuration Files(配置文件), Output Files(输出文件)Report/Log Files(报告/日志文件)Binaries网络传送复本文件。

   13.2.3 GoldenGate的工作特点

     1、实时数据复制

     2、支持异构环境

     3、支持断点续传,不影响系统连续运行。

     4、高性能,对生产系统影响小

     5、基于事件的复制,事务完整性,只复制提交的事务。

     6、功能强大的管理工具,消息服务,ETL tools, Message Service

     7、灵活拓扑结构

     8、复制冲突检测和解决

     9、事件标记基础架构(Event marker infrastructure)

     10、路由和压缩: TCP/IP LAN WAN

     11、传输过程加密: 128-位, SSL

     12、可以自定义延时应用修改,降低高峰时期的压力。

     13、根据事务大小和数量自动管理内存

     14、分存式松散的成对关系。

     15、基于事务批量操作。


13.3 配置一个常用的GoldenGate.

    13.3.1 系统现状调研

    配置之前,我们要全面的了解用户的现状。最好提前半个月甚至更长时间介入调研工作,研究适不适合用ogg,如果决定使用ogg,前期要做足准备工作,到真正实施的时候,就顺利多了。有的客户前期工作做的不充分,以至在实施的过程中,困难重重。

    我们需要了解的情况有:

     1、主库和备库的环境。

     2、操作系统列表。

     3、数据库每天产生的日志量评估,峰值的日志量。

     4、网络带宽,如果带宽不足,是否启用压缩功能,以及压缩对CPU占用的影响

     5、端口的开放情况。

     6、表结构,是否存在无主键表,是否存在不支持的数据类型。

     7、下载针对不同操作系统不同数据库版本的ogg软件。

     8、备库的数据库安装完毕。

     9、主库归档日志建议保留三天以上,如七天,以备追平日志。

        长事务需要最早记录的日志。

     10、主库如果是RAC,归档日志必须放在共享存储上,共享空间要充足。

     11、ogg队列日志建议保留至少三天,比如七天,以便出问题时续传。

     12、需要容灾复制的用户的列表,要复制的表的列表。

     13、确认是否复制ddl,复制ddl可能会影响复制效率。

     14、主备库,CPU、内存大小和使用情况。

     15、主库需要另处建一个ogg表空间,建议预留空间,可以设为10g

     16、无主键表或唯一索引表建议建主键或唯一索引。

     17、确认同步过程所使用的技术,如RMANexpdp/impdp.

     18、测试同步expdp/impdp的时间。或了解RMAN备份恢复时间,由此估算实施时间。

    13.3.2下表是我们要进行配置ogg的调查列表。

源端

目标端

操作系统版本

Redhat linux 6.1

Redhat linux 6.1

数据库版本

11.2.0.4

11.2.0.4

是否RAC

NO

NO

IP地址

192.168.1.10

192.168.1.80

服务器主机名

yingshu

ysogg

Oracle SID

ysdb

ysdbogg

是否ASM

NO

NO

GG版本

ogg112101

ogg112101

GG安装所在用户

oracle

oracle

GG安装所在主机

192.168.1.10

192.168.1.80

GG安装路径

/goldengate/

/goldengate/

GoldenGate数据库用户和表空间

goldengate

goldengate

复制的用户范围

1个用户需要复制:

特别说明

1、  关闭源端的DDL复制功能;

2、  用户未加入复制的表;

3、  用户下所有包括中文字段的表均不加入复制:

4、  数据库发生的变更:

(1)       源端数据库的recyclebin关闭,以支持DDL复制;

(2)       源端数据库打开了数据库最小附加日志;

(3)       源端数据库对所有加入复制的表增加了表级附加日志;


    13.3.3配置一个GoldenGate

       创建安装目录(主备库都要创建)

[root@yingshu /]# mkdir /goldengate

[root@yingshu /]# chown -R oracle:dba /goldengate/


      将下载完成的安装介质拷贝至/oramed/(主备库都要拷贝)

      解压安装介质(主备库都要解压)

unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip -d /goldengate/

cd /goldengate/

tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar


     建立ogg表空间(主库创建)

SQL> create tablespace goldengate datafile '/u01/app/oracle/oradata/ysdb/goldengate01.dbf' size 500m;

Tablespace created.


      建立ogg用户(主库创建)

create user ogg identified by ogg default tablespace goldengate;

User created.

grant resource,connect,dba  to ogg;

Grant succeeded.

      如果不想分给ogg用户dba权限,可以细化ogg的权限。分如下权限给ogg

grant connect to ogg;

grant alter any  table to ogg;

grant alter session to ogg;

grant create session to ogg;

grant flashback any table to ogg;

grant select any dictionary to ogg;

grant select any table to ogg;

grant resource to ogg;


打开并检查主库附加日志(主库)

alter database add supplemental log data ;

Database altered.

SQL> select 

supplemental_log_data_min

,supplemental_log_data_pk

,supplemental_log_data_ui

,supplemental_log_data_fk

,supplemental_log_data_all from v$database;


SUPPLEMENTAL_LOG_DATA_MI SUPPLEMEN SUPPLEMEN SUPPLEMEN SUPPLEMEN

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

YES                      NO        NO        NO        NO


使用oracle用户,创建子目录 (主备库都要创建)

[root@yingshu oramed]# su - oracle

[oracle@yingshu ~]$

[oracle@yingshu goldengate]$ ./ggsci


Oracle GoldenGate Command Interpreter for Oracle

Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO

Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14


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


GGSCI (yingshu) 1> create subdirs


Creating subdirectories under current directory /goldengate


Parameter files                /goldengate/dirprm: already exists

Report files                   /goldengate/dirrpt: created

Checkpoint files               /goldengate/dirchk: created

Process status files           /goldengate/dirpcs: created

SQL script files               /goldengate/dirsql: created

Database definitions files     /goldengate/dirdef: created

Extract data files             /goldengate/dirdat: created

Temporary files                /goldengate/dirtmp: created

Stdout files                   /goldengate/dirout: created


    将数据库改成强制记日志forceloging(主库)

SQL> alter database force logging;

Database altered.

SQL> select force_logging from v$database;

FORCE_LOG

---------

YES


     关闭数据库的recyclebin (仅实施DDL时进行配置) (主库)

SQL> alter session set recyclebin=off;

Session altered.

show parameter recyclebin

recyclebin                           string      OFF

SQL> show parameter recyclebin


NAME                       TYPE                       VALUE

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

recyclebin                 string                     OFF



     添加环境变量(主备库都要添加)

export GG_HOME=/goldengate

export PATH=$PATH:$GG_HOME

export LIBPATH=$GG_HOME:$ORACLE_HOME/lib



     编辑GLOBALS参数文件(主备库都要编辑)

edit params ./globals                      --在该文件中添加以下内容

ggschema ogg                               --指定的进行ddl复制的数据库用户

因为我们这里不复制ddl所以ddl的部分就省略了。

    

     说明:我们这里假定生产用户有两个分别是shuys

           shu用户有stud表,

           ys用户有tech表。

如下所示:

SQL> conn shu/shu

Connected.

SQL> select table_name from user_tables;

TABLE_NAME

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

STUD


SQL> conn ys/ys

Connected.

SQL> select table_name from user_tables;

TABLE_NAME

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

TEACH



    打开表的补充日志(主库),所有需要复制的表,都需要打开。

GGSCI (yingshu) 1> dblogin userid ogg,password ogg

Successfully logged into database.

GGSCI (yingshu) 4> add trandata shu.stud

Logging of supplemental redo data enabled for table SHU.STUD.

GGSCI (yingshu) 5> add trandata ys.teach

Logging of supplemental redo data enabled for table YS.TEACH.


    编缉MGR参数(源和目标均需要配置),为了简单,主备两边可以配成一样的。


[oracle@yingshu goldengate]$ ./ggsci

GGSCI (yingshu) 1> edit param mgr

PORT 7809

DYNAMICPORTLIST 7840-7914

PURGEOLDEXTRACTS ./dirdat/*, usecheckpoints, minkeepdays 1

LAGREPORTHOURS 1

LAGINFOMINUTES 30

LAGCRITICALMINUTES 45

PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10

PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10

~

"dirprm/mgr.prm" [New] 8L, 247C written


    启动管理进程mgr进程(源和目标均需要配置)

start mgr


    查看管理进程mgr的状态

GGSCI (yingshu) 12> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          




    添加源端的抽取extract进程(主库),begin now表示从现在时刻开始抽取

GGSCI (yingshu) 7> add extract ggext, tranlog, begin now

EXTRACT added.


    添加源端抽取进程生成的队列文件格式及位置(主库)

GGSCI (yingshu) 1> add exttrail ./dirdat/aa,extract ggext,megabytes 20

EXTTRAIL added.

  后面的megabytes 20,指抽取后生成队列文件的大小。


如果抽取进程添加错误,可以使用以下命令删除。

unregister extract ggext logretention

delete extract ggext !



    添加抽取进程的内容,我们可以用vi./ dirprm里直接编缉,也可以在用edit params ggextggsci里编缉,两种方法的结果是一样的。编缉后的结果如下:

[oracle@yingshu dirprm]$ cat ggext.prm

EXTRACT ggext

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

USERID ogg, PASSWORD ogg

EXTTRAIL ./dirdat/aa

TRANLOGOPTIONS ALTARCHIVELOGDEST PRIMARY INSTANCE ysdb /arch1

GETTRUNCATES

table ys.*;

table shu.*;

    启动抽取进程

GGSCI (yingshu) 4> start ggext

Sending START request to MANAGER ...

EXTRACT GGEXT starting


    查看一下现在的状态,如果状态正常如下,我们就可以备份了。

GGSCI (yingshu) 6>  info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          

EXTRACT     RUNNING     GGEXT       00:00:00      00:00:05   

    我们还可以去/goldengate/dirdat下去查看有没有生成以aa开头的队列文件,以验定我们添加的抽取进程是否正确。


    备份数据库

    我们先手工执行一下crosscheck,实际生产环境中,根据实际需要执行。

crosscheck backup;

crosscheck archivelog all;

delete expired archivelog all;

report obsolete;

delete obsolete;

delete backup;


    我们使用RMAN来备份,备份过程日志省略。备份脚本下如:

run{

backup database include current controlfile

format '/orabak/fullysdb_%d_%T_%s_%c' ;

sql 'alter system archive log current';

backup archivelog all

format '/orabak/ysdb_arch_%d_%T_%s_%c' ;

}


    获取SCN

col status for a15

SQL> select group#, thread#, status, first_change#, next_change# from v$log;

    GROUP#    THREAD# STATUS          FIRST_CHANGE# NEXT_CHANGE#

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

         1          1 INACTIVE               267420       268989

         2          1 INACTIVE               268989       268997

         3          1 CURRENT                268997   2.8147E+14

    说明:获取不活动的归档日志的最后一个SCN号,如果有多组INACTIVE,取最大的FIRST_CHANGE#号,    本次取用的SCN号为268989

    如果显示的SCN号为科学计数法,则用以下命令设置

SQL> set numw 15


    使用ftp命令将备份的db和归档传到备库。我们这里在备库执行mget--后面为注释。

[root@ysogg /]# cd /orabak

[root@ysogg orabak]# ftp 192.168.1.10              --打开ftp

ftp> cd /orabak                                    --进入主库的/orabak文件夹

ftp> prompt                                        --关闭提示

ftp> bin                                           --以二进制格式传输

ftp> mget *                                        --批量传输所有备份片

ftp> bye                                           --退出ftp工具


    我们将主库的参数文件spfile和口令文件orapwysdb同样以ftp的方法,get到备库的相应位置。

[oracle@ysogg ~]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@ysogg dbs]$ ftp 192.168.1.10

ftp> cd /u01/app/oracle/product/10.2.0/db_1/dbs

ftp> bin

ftp> get orapwysdb

ftp> bye

    还原数据文件(备库执行)

RMAN> restore database;

    RMAN中恢复数据库,(备库执行)

run {

set until scn=268989;

recover database;

}


    以regetlogs方式打开数据库(备库执行)

SQL> alter database open resetlogs;

Database altered.


    我们可以将备库改成非归档模式(备库执行)

Sql>shutdown immediate

Sql>start mount

Sql>alter database noarchivelog;

Sql>archive log list;

Sql>alter database open;

    数据库正常打开,我们的数据同步就算完成了。

    下面开始配置传输进程。

   

    其实抽取进程也可以进行传输队列,但如果网络中断或数据库发生重启,抽取进程就要中断,重启后可能日志已经删除,无法正常抽取日志了。再有如果发生错误,不好区别是抽取的问题还是传输的问题。所以建议采用抽取和传输分开进程,分工明细,好定位好管理。

    源端配pump进程(主库配置)

GGSCI (yingshu) 54> edit params ggpup      //也可以在/goldengate/dirprm里编缉ggpup.prm文件

extract ggpup                                      //定义抽取进程的名字

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)        //设置字符集

passthru                                           //pass through表示只传输不与库打交道

rmthost 192.168.1.80, mgrport 7809, compress       //远程目标的地址端口号

rmttrail ./dirdat/aa                               //传到目标端后,放在什么位置

dynamicresolution                      //动态解析表结构,复制的表很多时,可以减少启动时间

gettruncates                           //复制truncate

table ys.tech;                         //用户名.表名,也可以用*号代替

table shu.stud;




    在ggsci中添加传送进程。(主库添加)

GGSCI (yingshu) 8> add extract ggpup, exttrailsource ./dirdat/aa

EXTRACT added.

GGSCI (yingshu) 9> add rmttrail ./dirdat/aa, extract ggpup, megabytes 20

RMTTRAIL added.

    ggpup是传输进程的名字,/dirdat/表示源队列存储的位置,aa表示队列的名字。


    如果添加错误或者想重新添加,可以把已添加的删除。

delete extract ggpup



    创建检查点(备库创建)

edit params  ./globals

checkpointtable .checktab



GGSCI (ysogg) 4> dblogin userid ogg,password ogg

GGSCI (ysogg) 5> add checkpointtable ogg.checktab




   配置目标端replicate应用复写进程(备库配置)。

GGSCI (ysogg) 7> add replicat ggrep, exttrail ./dirdat/aa


   如果添加错误或需要重新配置,可以删除应用进程。

delete replicat ggrep

info replicat *,tasks


    配置replicate复写进程的参数文件。

edit param ggrep

replicat  ggrep

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

userid ogg, password ogg

handlecollisions                  //处理重复数据,必须有主键或唯一索引,多用于初始化。

assumetargetdefs                  //两边数据结构,表结构一致用此参数。

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

gettruncates

map ys.*  target ys.*;

map shu.*  target shu.*;


    启动应用进程。

start replicat ggrep


    至此我们的GoldenGate就配置完成了。

   








图文推荐