GoldenGate安装部署

更新时间:2024-07-06 23:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

GoldenGate安装部署及解决方案

目录

GoldenGate安装部署及解决方案 .................................................................................................. 1

1、GoldenGate 简介 ............................................................................................................... 2 2、文档约定和说明 ................................................................................................................. 5 3、GoldenGate软件安装 ........................................................................................................ 5

3.1 GoldenGate软件安装包下载 .................................................................................... 6 3.2 Windows下安装 ......................................................................................................... 6 3.3 Linux和Unix下安装 .................................................................................................. 8 4、GoldenGate同步基本配置 ................................................................................................ 8

4.1 oracle之间同步和GoldenGate基础......................................................................... 9 4.2 oracle与db2同步 .................................................................................................... 17 4.3 oracle与sybase同步 ............................................................................................... 18 5、GoldenGate同步方案 ...................................................................................................... 19

5.1 使用GoldenGate初始化加载 ................................................................................ 19 5.2 一对多数据同步(广播复制) .............................................................................. 21 5.3 多对一数据同步(集中复制) .............................................................................. 22 5.4 数据转换和过滤 ...................................................................................................... 23 5.5 关于目标端高数据安全性下的GoldenGate配置方案 ......................................... 27 5.6 GoldenGate双向复制(active-active) .................................................................. 30 6、GoldenGate数据同步性能测试 ...................................................................................... 33

6.1 测试中主要监测数据和监测方式 .......................................................................... 33 6.2 测试脚本和GoldenGate配置 ................................................................................ 34 6.3 测试步骤 .................................................................................................................. 38 6.4 性能测试结果 .......................................................................................................... 40 7、GoldenGate推荐配置 ...................................................................................................... 42

7.1 添加必要的环境参数 .............................................................................................. 42 7.2 BATCHSQL参数 ......................................................................................................... 42 7.3 数据库用户密码加密 .............................................................................................. 43 7.4 trail再压缩 ............................................................................................................... 44 8、GoldenGate Troubleshooting ............................................................................................ 45

8.1 一些常用的进程信息和日志的查看方式 .............................................................. 45 8.2 解析trail文件 ......................................................................................................... 45 附: GoldenGate新版本的一个特性 .................................................................................. 46

1

参考文档 ................................................................................................................................. 47

文档控制

1、GoldenGate 简介

GoldenGate软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库实时同步(real-time data synchronize)、双活(active-active high availability)。GoldenGate软件可以在异构的IT基础结构(包括几乎所有常用操作系统

2

平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下:

如上图所示,GoldenGate的数据复制过程如下: ?

利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate自定义的中间格式存放在队列文件(trail)中。再利用传送进程将队列文件通过TCP/IP传送到目标系统。捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点(checkpoint),记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制; ?

目标系统接受数据变化并缓存到GoldenGate队列当中,队列为一系列临时存储数据变化的文件,等待投递进程读取数据; ?

GoldenGate投递进程从队列中读取数据变化并创建对应的SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。

由此可见,GoldenGate是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。GoldenGate将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达9:1的压缩率对数据进行压缩,可以大大降低带宽需求。在目标端,GoldenGate可以通过交易重组、分批加载等技术手段大大加快数据投递的速度和效率,降低目标系统的资源占用,可以在亚秒级实现大量数据的复制,并且目标端数据库是活动的

GoldenGate提供了灵活的应用方案,基于其先进、灵活的技术架构可以根据用户需求组成各种拓扑结构,如图所示:

3

GoldenGate可以提供可靠的数据复制,主要体现在下面三点: ? (1)保证事务一致性

GoldenGate在灾备数据库应用复制数据库交易的顺序与在生产中心数据库上的顺序相同,并且按照相同的事务环境提交,确保在目标系统上数据的完整性和读一致性,为实时查询和事务处理创造了条件。 ? (2)检查点机制保障数据无丢失

GoldenGate的抽取和复制进程使用检查点机制记录完成复制的位置。对于抽取进程,其检查点记录当前已经抽取日志的位置和写队列文件的位置;对于投递进程,其检查点记录当前读取队列文件的位置。检查点机制可以保证在系统、网络或GoldenGate进程故障重启后数据无丢失。

(3)可靠的数据传输机制

GoldenGate用应答机制传输交易数据,只有在得到确认消息后才认为数据传输完成,否则将自动重新传输数据,从而保证了抽取出的所有数据都能发送到备份端。数据传输过程中支持128位加密和数据压缩功能。

Oracle 公司的GoldenGate产品,可以在异构的IT基础结构之间实现大量数据的秒一级的数据捕捉、转换和投递。目前最新版本为V11.1.1.1.0。

GoldenGate可以支持几乎所有常用操作系统如和数据库平台,如下表所示:

操作系统 4

数据库 MS NT, 2000, XP, Linux, Sun Solaris, HP-UX, IBM AIX, HP NonStop, TRU64, IBM z/OS,OS/390

Oracle, DB2, MS SQL Server, MySQL, Enscribe, SQL/MP, SQL/MX, Sybase, Teradata, 其他ODBC 兼容数据库 2、文档约定和说明

为统一表示命令和便于查看,对格式作如下约定:

GG_HOME> 表示从操作系统命令行(cmd)进入GoldenGate安装路径下执行命令。 GGSCI> 表示在GoldenGate命令环境中执行命令。 SQL> 表示在数据库下执行SQL语句 /***

***/ 表示配置文件内容,/***不包含在内。 < > 表示自定义参数,如自定义表名

以下示例中若无特殊说明,GoldenGate使用的版本主要为11.1,部分使用10.4版本,除部分新特性,两者基本无差别;GoldenGate命令行中的操作均是在mgr主进程running时进行,当然,GoldenGate安装部分除外。

补充说明:

该文档主要介绍GoldenGate基本使用、GoldenGate的各类解决方案,以及以往本人在使用测试中总结的经验,文中的例子和执行的命令都是参照官方文档并亲自测试执行过。但因个人能力所限,错漏之处再所难免,文档中也不可能覆盖GoldenGate的方方面面。而且,因为GoldenGate本身提供了大量的参数,也不可能在这里一一列举,本文档中只举例了常用的一些参数命令,关于各个参数的具体使用语法和作用,还请参照官方文档《Oracle GoldeGate Reference Guide》。

3、GoldenGate软件安装

5

在不同的操作系统和平台上安装GoldenGate,需要在官网下载对应的版本。32位系统

和64位系统的安装介质虽然不同,但是在同一OS上安装方式是一样的。 GoldenGate需要解析数据库的日志文件,所以安装位置必须要能访问到日志文件(在线日志和归档文件),并具有相应的权限。

3.1 GoldenGate软件安装包下载

经常有人问我GoldenGate的下载地址,所以在这里专门说明一下。 GoldenGate软件的官方下载地址:http://edelivery.oracle.com/ 目前只有这个地址能下到对应32位操作系统的安装介质。 首页如下:

网页开头点击这个Continue进入下载。

首次进入需要登记一些个人信息,如名字、公司等,然后下方选择同意协议之类的,点Continue进入搜索。 搜索时如下选择:

点GO,然后选择对应版本的Oracle GoldenGate下载。GoldenGate安装包一般只有几十兆的大小,下载还是很快的。

GoldenGate除了同步软件这块,还有其他相关的产品,比如Oracle GoldenGate Director,用于集中图形化管理和监控;Oracle GoldenGate Veridata,用于两端同步数据质量检验。在本文档中暂不介绍。

3.2 Windows下安装

(1)安装Microsoft Visual C ++ 2005 SP1

Windows操作系统需要首先下载安装Microsoft Visual C ++ 2005 SP1发行包(注意该软件也分32位和64位)。

6

(2)绿色安装GoldenGate

下载对应平台版本的GoldenGate安装包,解压。然后进入操作系统命令行(cmd),进入GoldenGate解压路径下,执行:

GG_HOME >ggsci --进入GoldenGate命令窗口模式 GGSCI> CREATE SUBDIRS --建立子目录

GGSCI>edit param mgr --配置GoldenGate主进程参数

由于第一次执行该命令,会提示创建mgr参数文件,点“是”并在文本中输入如下参数: /***

PORT 7801 --GoldenGate主进程端口号

DYNAMICPORTLIST 7802-7820 --GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端

口端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出错。

***/

保存,生成的参数文件保存在GG_HOME\\ dirprm下 然后可以启动GoldenGate主控制进程: GGSCI>start mgr

GGSCI>info all --查看进程状态

如果进程MANAGER状态显示为RUNNING则表示主进程已在运行。至此软件安装完成。

(3)管理GoldenGate服务

在WINDOWS下还可以将GoldenGate主进程作为系统服务进行管理,如下配置:

GGSCI> edit param ./globals --配置全局参数,注意前面的 ./ 表明与其他参数文件位置不同,该参数

文件是直接位于GoldenGate安装路径下的

输入: /***

MGRSERVNAME --GoldenGate主进程端口号,为自定义的系统服务名 ***/

然后退出GGSCI命令行:GGSCI> exit

GG_HOME > install addservice addevents --创建服务,完成后可以直接进服务进行管理

WINDOWS删除GoldenGate服务:

GG_HOME > install deleteevents deleteservice --对应删除服务操作

或者在注册表删除:

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services 一般服务会以相同的名字在这里显示一个主健,直接删除相关的键值便可

7

3.3 Linux和Unix下安装

(1)检查必需的lib包 下载对应平台版本的GoldenGate,解压。在解压路径下执行: [root@GG_HOME] > # ldd ggsci

将列出所有需要的lib和当前缺少的。GoldenGate在Linux和Unix下安装,需要安装ORACLE的lib环境以及$ORACLE_HOME/lib下的几个包,所以必须安装在Oracle之后,而且确保在环境变量中加入:

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

(2)绿色安装GoldenGate 在解压路径下执行./ggsci进行接口命令行,

[root@GG_HOME] > # ./ggsci --进入GoldenGate命令窗口模式 GGSCI> CREATE SUBDIRS --建立子目录

GGSCI>edit param mgr --配置GoldenGate主进程参数

由于第一次执行该命令,会提示创建mgr参数文件,点“是”并在文本中输入如下参数: /***

PORT 7801 --GoldenGate主进程端口号

DYNAMICPORTLIST 7802-7820 --GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端

口端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出错。

***/

保存,生成的参数文件保存在GG_HOME\\ dirprm下 然后可以启动GoldenGate主控制进程: GGSCI>start mgr

GGSCI>info all --查看进程状态

如果进程MANAGER状态显示为RUNNING则表示主进程已在运行。至此软件安装完成。

和Windows下安装的主要区别是需要确认必需的lib包,进入GGSCI接口命令行后的操作都是一致的。

4、GoldenGate同步基本配置

GoldenGate支持目前大部分主流数据库,这也是它的优势之一。下面列举了Oracle、Db2、Sybase之间的同步。

8

同步测试的准备工作中,有一部分是共通的,如下:

(1) 在源端和目标端建立相同结构的两个表,建立主键。保证复制的对象在一开始是一

致的。

(2) 保证没有相关对象的触发器(会导致数据冲突的那些)或设置失效。 (3) 数据库需要开启必须的日志模式。不同数据库的配置差异主要在这一步。 (4) 源端和目标端都需要安装相应版本的GoldenGate软件,并分配一个有DBA权限的数

据库用户给GoldenGate用以连接数据库。

备注:分配给GoldenGate的用户一般情况下并不需要完全的DBA权限,在官方文档上有详细的权限需求说明,但是完全按照那个配置比较繁琐。额外的,如果数据库使用ASM时,需要sysdba权限。

4.1 oracle之间同步和GoldenGate基础

4.1.1 Oracle数据库设置

首先安装好ORACLE,设置好ORACLE_SID,ORACLE_HOME等环境变量。当然,推荐的做法是在每个进程配置文件里都加上指定的环境变量参数,在后面优化配置中进行说明。

Oracle数据库需要开启归档日志,并开启最小附加日志模式。

SQL> select supplemental_log_data_min from v$database; --查看是否开启了最小附加日志模式 SQL> alter database add supplemental log data; --开启最小附加日志模式

实际生产应用中,最好同时打开ORACLE的强制日志模式,以防止源数据库因直接路径加载忽略redo生成而导致这部分数据无法同步: SQL> select force_logging from v$database; SQL> Alter database force logging;

光开启最小附加日志模式还不够,还需要打开表级的补全日志,可以在GoldenGate中使用add trandata命令强制重做日志记录主键值,以保证在目标端能成功复制: GGSCI> dblogin userid ddw,password ddw --GoldenGate中登录OARCLE数据库 GGSCI>add trandata ddw. --表名可以使用通配符

GGSCI> add trandata coss3.per_test,nokey,cols(sampletime, objectid) --无主键指定字段补全的示例

也可以在数据库中打开:

SQL> alter table add supplemental log data (primary key) columns;

千万不要小看这步日志设置,其实在GoldenGate的配置中,这步是最容易出错的环节。如果开启DDL复制做冗灾备份,最好直接在数据库级别打开补全日志:

SQL> alter database add supplemental log data (primary key,unique,foreign key) columns; 检查一下,全是YES就OK了(整个数据库级别补全)

9

SQL> select supplemental_log_data_min,

supplemental_log_data_pk,supplemental_log_data_ui from v$database;

4.1.2关于Oracle补全日志补充说明

Oracle日志(redo log)一般用于实例恢复和介质恢复,但是如果需要靠日志还原完整的DML操作信息(比如Logmnr、Streams和这里的Goldengate),默认记录的日志量还不够。比如一个UPDATE的操作,默认redo只记录了rowid以及被修改的字段信息,但这里GoldenGate还原这个事务,因为不是根据rowid而是SQL层面根据唯一键值来定位记录,所以还需要将主键或者其他字段的信息附加到日志中去。要往日志中增加这些额外字段信息的操作,就是开启补全日志,即Add Supplemental Logging。打开补全日志,会使数据库的日志量增加,所以只打开需要的级别和对象即可。

Oracle补全日志可以在数据库级别设置,也可以在表级别设置。在数据库级别中,补全日志按补全的信息量,对应好几个级别:

(1) 最小附加日志(Minimal supplemental logging):是开启logmnr的最低日志要求,

提供了行链接(chained rows)和多种数据存储(比如聚簇表、索引组织表)的信息。在Oracle 9.2之后的版本中,默认都不开启。

(2) 主键补全(Primary key supplemental logging):在日志中补全所有主键列。如果

表中无主键,则补全一个非空唯一索引列;如果非空唯一索引键也没,那么会补全除了LOB和LONG类型字段以外的所有列,这时就和下面的所有补全一样了。

(3) 唯一键补全(Unique key supplemental logging):当唯一键列或位图索引列被修

改时,在日志中补全所有唯一键列或位图索引列。打开唯一键补全也会同时打开主键补全。注意这个级别是需要条件触发的。

(4) 外键补全(Foreign Key supplemental logging):当外键列被修改时,将在日志中

补全所有外键列。这个级别也是需要条件触发的。

(5) 所有补全(All supplemental logging):在日志中补全所有字段(排除LOB和LONG

类型)。

这里对于补全日志的详细操作语句不做一一说明。 数据库级别中的5个类型中,除了最小附加日志级别,都可以在表级进行设置。除此之外,表级还可以明确指定需要补全的列。

Oracle表级补全日志需要在最小补全日志打开的情况下才起作用,即若一个数据库没有开最小补全日志或之前drop supplemental log data操作则即便指定了表级补全日志,实际在重做日志输出的过程中描述的记录仍只记录rowid和相关列值。而要关闭最小补全日志,也必须首先关闭数据库级别的其他补全级别后,才能关闭。 所以在GoldenGate中,对于Oracle数据库的日志补全要求,至少是打开最小附加日志和主键补全。主键补全只要在需要同步的表上开启即可。当然GoldenGate的add trandata语法中也可以指定补全的列,这和Oracle表级补全日志的功能完全一致。毕竟,日志还是

10

4.1.3 ddl同步

GoldenGate的DDL同步只支持两边一致的数据库,限制条件较多(如不能进行字段映射、转换等),具体可以参考官方文档。DDL的抓取不是通过日志抓取来捕获的,而是通过触发器来实现,所以对源数据库的性能影响要比单纯的数据抓取要大很多,可谓屏弃了GoldenGate的优势。尽量不要使用GoldenGate的DDL复制功能,在大多数业务系统中,实际上不会有频繁的数据库结构变动,完全可以通过手工的方式进行维护。确实有大量DDL操作的环境,如果可以,还是推荐物理DG之类的替换方案;确实要使用GoldenGate的DDL复制,那么请详细参考官方文档的限制和说明。

--以上主要为个人意见,有不同看法的请无视

开启DDL复制的基本配置步骤为: (1)关闭ORACLE的回收站功能。

(2)选择一个数据库schema存放支持DDL的GoldenGate对象,运行相应创建脚本。 (3)编辑globals参数文件。 (4)修改extl和repl的配置文件

具体操作步骤:

(1)关闭数据库回收站:

SQL>alter system set recyclebin=off scope=both;

(2)编辑globals参数文件: GGSCI>edit param ./globals 添加以下内容后保存:

GGSCHEMA ddw --标明支持DDL的GG对象存放在哪个schema下

(3)执行创建脚本:

首先需要命令行进入GG安装目录下,然后再运行sqlplus执行脚本,如果不进入目录下脚本执行会报错(应该是由于GG脚本中子脚本嵌套使用相对路径的问题所造成)。 SQL>@marker_setup.sql --提示输入目标schema

SQL>@ddl_setup.sql --提示输入目标schema,输入initialsetup最后输入yes SQL>@role_setup.sql

SQL>grant GGS_GGSUSER_ROLE to ddw; --不进行该步赋权后面起进程会报错 SQL>@ddl_enable.sql --使触发器生效

(4)修改提取进程和复制进程的配置文件,分别加入ddl include all属性。

此时repl必须指定assumetargetdefs属性,这表明只有两边数据库结构一致的情况下才可以启用DDL复制。另外,开启DDL同步不能再只映射单表了,对整个模式下的对象都有效。

加入DDL复制之后,数据复制的lag明显增加了。

16

清除数据库中DDL复制的设置

在实际测试中,由于我在同一个数据库中进行映射,映射表结构不一致,导致进程报了一系列的错误。这个时候需要把通过脚本创建的GG对象中的数据清空,安装目录下只提供了清除对象的脚本,可以如下操作:

首先要求把所有的GG进程停掉,包括mgr进程 SQL>@ddl_disable.sql --首先使DDL触发器失效 SQL>@ddl_remove.sql SQL>@marker_remove.sql

role_setup.sql没有对应的清除脚本,但是这块不影响配置信息的清除 然后重新再创建脚本。

4.2 oracle与db2同步

设置DB2数据库参数:

db2 connect to user using --DB2命令行工具登陆DB2 db2 get db cfg for --查看数据库参数配置

db2 update db cfg for using LOGRETAIN ON --设置LOGRETAIN参数 db2 update db cfg for using USEREXIT ON --设置USEREXIT参数 设置完后的参数配置相关显示如下:

Log retain for recovery status = RECOVERY User exit for logging status = YES

重启数据库并进行全库备份: db2 stop force db2 start

db2 backup db

指定归档路径:(OVERFLOWLOGPATH参数)

db2 connect to user using db2 update db cfg using overflowlogpath \

GoldenGate中执行add trandata补全日志:

GGSCI> dblogin sourcedb sample userid db2admin,password db2admin

-- 除oracle外的数据库都需要指定sourcedb参数,指定数据库名称

17

GGSCI>add trandata db2admin.

其他的同步配置与Oracle中一样,需要注意的是进程配置文件中登陆DB2的部分都需要指定sourcedb这个参数(ORACLE不需要,指定了反而报错)。还有就是复制进程的配置文件中一般不能指定assumetargetdefs参数,因为不是结构一致的数据库,需要通过defgen工具生成数据定义文件进行映射。

4.3 oracle与sybase同步

Sybase数据库设置

使用sybase的SQL Advantage,用sa用户登录,执行dbcc settrunc( 'ltm', valid )修改参数。

GoldenGate中连接Sybase

GGSCI> dblogin sourcedb zhoubase userid sa password sasasa 同样做如下设置

GGSCI>add trandata .

其他配置和Oracle中一样。

需要注意的是,Sybase是个区分大小写的数据库(sql server同样)。而Oracle不区分大小写,这就导致了表和字段在复制进程映射的时候,容易因大小写问题导致映射失败。解决方法是在表名外加上双引号或者单引号,参照如下复制进程的配置文件内容: /***

replicat repsy

sourcedefs d:\\tools\\GG\\gg10g\\dirdef\\extsy.ref

USERID ddw, PASSWORD ddw reperror default, discard

discardfile D:\\repsy.dsc,append,megabytes 100

MAP “dbo.BBTEST”, TARGET “DDW.AASYBASE”; --引号区分大小写 ***/

18

5、GoldenGate同步方案

GoldenGate工具虽小,但它提供表级字段级同步映射,而且同步性能优异、资源消耗低,使它的灵活性很强,可以提供多种数据同步、冗灾的解决方案。

5.1 使用GoldenGate初始化加载

这里所指的GoldenGate初始化加载,只是它指提供的direct load方式,因为其他几种官方介绍的初始化方式要么需要借助其他数据库工具(如extract->SQL*Loader),要么中间走了完全没必要的步骤导致性能很差(如extract->file->replicat方式),都不算纯正的GoldenGate方式。 初始化加载架构:

上图中,显示了初始化加载启用了两条同步路线:上面一条是真正的initial load,负责将源数据端的数据一次性发送到目标数据库;下面一条,其实就是普通的GoldenGate同步进程,负责抓取初始化加载时源端数据库进行的在线数据变化。因为在实际应用中,往往需要在生产库(源数据库)不停机的状态下,将数据加载到备用数据库(目标数据库)中并应用实时同步,在数据初始化的过程中,生产库将继续进行正常的事务操作,所以此时需要有抓取进程在初始化时开始将这些变化捕获,以免数据丢失。

实际部署时需要注意正确的执行顺序,大致可以分为以下几步: (1) 源端和目标端创建配置各个同步进程。

(2) 开启源端同步抓取进程(图上的Change Extract),开始捕获变化。 (3) 开启初始化进程(图上的Initial-Load Extract),开始数据初始化加载。 (4) 等初始化加载结束,开启目标端复制应用进程(图上的Change Replicat),开始

实时同步应用。

在目标端复制应用进程(图上的Change Replicat)中,需要在参数文件中配置HANDLECOLLISIONS参数,以避免重复应用第2和第3步之间的数据变化,因为这部分数据已经包含在初始化加载中传到目标数据库中了。

在这里需要特别提醒的一个概念上的问题,GoldenGate的初始化同步不会也不需要去初始化目标端的SCN号。这个问题在我与多位数据库DBA的交流中发现,他们往往以为GoldenGate是通过SCN来判断数据的应用情况的。GoldenGate的同步与Streams不同,它不需要依赖两端数据库保持一致的SCN来应用同步,实际上它只在抓取时可能会与数据库的SCN有关联(抓取时可以指定源数据库的特定SCN号开始解析日志),在trail传输以及目标端应用时,都和源端数据库的SCN毫无关系。它的实质是通过自己的一套队列文件检查

19

点机制来实现队列数据的管理,在目标端则通过数据的唯一键来定位数据行,trail文件最终解析成SQL语句在目标端数据库执行而实现数据的应用。所以这里的初始化加载,完全可以使用其他数据库工具来实现,比如说exp/imp、SQL*Loader、RMAN复制数据库等。 以下为一个简单的初始化加载的例子,对于实时同步配置同上面介绍的是一样的,这里不再说明,只列出初始化加载部分的进程配置。

5.1.1 GoldenGate初始化加载示例(direct load方式)

源端

添加提取进程:

GGSCI> add extract ext1,sourceistable --没有tranlog,意味着不是通过日志方式;没有begin XXX,表示

还未启动;使用sourceistable参数不会使用检查点机制 配置文件如下: /***

extract ext1

userid ddw,password ddw

rmthost 192.168.0.44, mgrport 7401

rmttask replicat, group rept1 --注意是rmttask,指定目标复制进程名 table ddw.test; ***/

不需要为该进程添加远端队列(rmttrail)。

目标端

添加复制应用进程:

add replicat rept1,specialrun --表示一次性加载 /***

replicat rept1

assumetargetdefs userid ddw,password ddw

reperror default, discard discardfile D:\\reptmy.dsc,append,megabytes 100

INSERTAPPEND --使用直接路径加载,提高加载速度

HANDLECOLLISIONS --当目标端已有数据时,略过重复数据错误 MAP ddw.test, TARGET ddw.test1; ***/

注意,这里的extract和replicat进程添加完后在info all中看不到这个进程,但是view report可以跟踪到。

要开始加载,在源端执行: GGSCI> start exttmy

20

5.6.2 双向配置示例

这个示例中,ggdba用户作为GoldenGate专用用户,ddw和ddws分别为两端数据库需要同步的schema(也可以同名,这里是为了便于区别),通过在两端Extract中配置排除ggdba的操作防止循环应用。以下ddw结尾的进程均在ddw用户所在数据库,ddws结尾的进程均在ddws用户所在数据库。

(1) ddw==>ddws

添加提取进程:

GGSCI> add extract extddw,tranlog,begin now /***

extract extddw userid ggdba,password ggdba exttrail E:\\ggoracle\\dirdat\\e1

tranlogoptions excludeuser ggdba --排除捕获ggdba dynamicresolution gettruncates TABLE ddw.*; ***/

GGSCI> add exttrail E:\\ggoracle\\dirdat\\e1, extract extddw

添加datapump:

GGSCI> add extract pumpddw,exttrailsource E:\\ggoracle\\dirdat\\e1,begin now /***

extract pumpddw

userid ggdba,password ggdba

rmthost 192.168.1.101, mgrport 7801 rmttrail E:\\ggoracle\\dirdat\\rep\\e1 PASSTHRU gettruncates table ddw.*; ***/

GGSCI> add rmttrail E:\\ggoracle\\dirdat\\rep\\e1, extract pumpddw

添加复制应用进程

GGSCI> add replicat repddws,exttrail E:\\ggoracle\\dirdat\\rep\\e1, nodbcheckpoint /***

replicat repddws userid ggdba,password ggdba ASSUMETARGETDEFS reperror default,discard

discardfile E:\\ggoracle\\log\\repddws.dsc,append,megabytes 200

31

gettruncates

HANDLECOLLISIONS

MAP ddw.*, TARGET ddws.*; ***/

(2) ddws==>ddw

添加提取进程:

GGSCI> add extract extddws,tranlog,begin now /***

extract extddws userid ggdba,password ggdba exttrail E:\\ggoracle\\dirdat\\e2

tranlogoptions excludeuser ggdba --排除捕获ggdba dynamicresolution gettruncates TABLE ddws.*; ***/

GGSCI> add exttrail E:\\ggoracle\\dirdat\\e2, extract extddws

添加datapump:

GGSCI> add extract pumpddws,exttrailsource E:\\ggoracle\\dirdat\\e2,begin now /***

extract pumpddws

userid ggdba,password ggdba

rmthost 192.168.1.101, mgrport 7801 rmttrail E:\\ggoracle\\dirdat\\rep\\e2 PASSTHRU gettruncates table ddws.*; ***/

GGSCI> add rmttrail E:\\ggoracle\\dirdat\\rep\\e2, extract pumpddws

添加复制应用进程:

GGSCI> add replicat repddw,exttrail E:\\ggoracle\\dirdat\\rep\\e2, nodbcheckpoint /***

replicat repddw userid ggdba,password ggdba ASSUMETARGETDEFS reperror default,discard

discardfile E:\\ggoracle\\log\\repddw.dsc,append,megabytes 200 gettruncates

HANDLECOLLISIONS

32

MAP ddws.*, TARGET ddw.*; ***/

开启所有进程,双向复制开始。

6、GoldenGate数据同步性能测试

这个GoldenGate同步性能测试,是在以前项目中,为测试该工具是否能满足实际项目中数据同步的实时性、高负载性,自己做的一次伪性能测试。 由于测试条件和个人能力所限,测试仅在局域网内的普通PC(实际为虚拟机上划分的两个OS环境)上进行;测试中的事务仅为单一简单语句(Insert),同步的表为一对一进行同步;测试中源端只提供了每秒5000多条的事务量,实际可以调整得更高些(当然受数据库性能制约),但在这个条件下峰值测试没有什么意义;GoldenGate的参数配置也不能满足最优化配置。

测试主要目的:

(1) 反映在这个条件下,实时同步大致的性能效率。 (2) 提出一个GoldenGate实时同步性能测试的方案。 (3) 提出实际项目部署中,需要考虑到哪些负载问题。

6.1 测试中主要监测数据和监测方式

(1)源端和目标端每秒提交数据量 测试数据生成时,以1秒为间隔统计2端端口性能表的数据量,记录在测试日志表GG_PERFORMANCE_TESTLOG中。

(2)测试过程中两端数据库生成的REDO量 测试前清空两端数据库的归档日志,测试后switch日志组,统计归档文件生成量。同时在测试中在线监测相关会话生成的REDO量。

(3)生成的测试数据在表空间中占用的空间大小 测试后分析per_test表进行空间大小统计。

(4)测试数据传输时生成的trail文件大小 关闭trail文件自动清除,比较测试前后相应trail队列的增长情况。

(5)记录测试时两端的网络流量情况 通过金山卫士的流量监控功能监控。同时在线监测replicat端的lag情况。

33

6.2 测试脚本和GoldenGate配置

同步性能测试在2个虚拟机之间进行,IP分别为192.168.0.146和192.168.0.142,由146向142同步数据,146上insert一条新记录作为一个事务提交。同步测试表为PER_TEST。

6.2.1 测试脚本

(1)DB Link

为监控方便,146上建立142的DB Link,主要为统计两边数据库提交的数据量,并不用于数据同步:

create database link DB142.REGRESS.RDBMS.DEV.US.ORACLE.COM connect to coss3 identified by coss3

using 'orcl142'; --146上142数据库的服务名

(2)性能测试日志表

create table GG_PERFORMANCE_TESTLOG (

RECORD_DATE TIMESTAMP(6), COUNTS_142 NUMBER, COUNTS_146 NUMBER, DIFFERENCE NUMBER,

MARKS VARCHAR2(500) )

(3)测试数据生成脚本

CREATE OR REPLACE PROCEDURE P_GG_PERFORDATA( /*

* INSERT TEST DATA FOR TESTING GOLDENGATE SYNC PERFORMANCE DATA;

* THE USER WHO EXEC PROCEDURE P_GG_PERFORDATA NEEDS 'execute on dbms_lock' PRIVILEGE

* AUTHOR ZHOUJIONG 2011-04-07 */

p_looptime in pls_integer ) AS

v_date date; Begin

34

v_date:=sysdate;

for i in 1..p_looptime loop

/** port performance data **/ insert into PER_TEST (sampletime, objectid, step,

OBTAINABLE,

PORT_IN_PKT_BROAD_SPEED, PORT_IN_PKT_DIS_SPEED, PORT_IN_PKT_ERR_SPEED, PORT_IN_PKT_MULTI_SPEED, PORT_IN_PKT_NUNI_SPEED, PORT_IN_PKT_UNI_SPEED, PORT_IN_SPEED,

PORT_OUT_PKT_BROAD_SPEED, PORT_OUT_PKT_DIS_SPEED, PORT_OUT_PKT_ERR_SPEED, PORT_OUT_PKT_MULTI_SPEED, PORT_OUT_PKT_NUNI_SPEED, PORT_OUT_PKT_UNI_SPEED, PORT_OUT_SPEED) values (v_date, i, i, 'T', 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32); commit; end loop;

dbms_lock.sleep(600); --执行完毕后停顿10分钟,便于在线收集redo量

35

Exception

when others then

dbms_output.put_line(substr(SQLERRM, 1, 1000)); End P_GG_PERFORDATA;

(4)数据统计脚本

每秒统计142、146上端口性能表中已提交的数据量和差值。 CREATE OR REPLACE PROCEDURE P_GG_TESTLOG( /*

* COMPARE THE ROWS COUNTS BETWEEN 146 AND 142 FOR TESTING GOLDENGATE SYNC; * IT SHOULD BE CALLED BEFORE WHEN THE P_GG_PERFORDATA WILL BE CALLED * AUTHOR ZHOUJIONG 2011-04-07 */

p_marks in varchar2 default null --for marking which tests the records belong to ) AS

v_timestamp timestamp; v_rows_146 number:=0; v_rows_142 number:=0; begin

for i in 1..1200 loop

v_timestamp:=systimestamp;

select (select count(*) from per_test) num1,

(select count(*) from per_test@DB142.REGRESS.RDBMS.DEV.US.ORACLE.COM) num2

into v_rows_146,v_rows_142 from dual;

insert into GG_PERFORMANCE_TESTLOG(RECORD_DATE,COUNTS_142,COUNTS_146,DIFFERENCE,MARKS) values (v_timestamp, v_rows_142, v_rows_146,

v_rows_146-v_rows_142, p_marks); commit;

dbms_lock.sleep(1); end loop;

Exception

when others then

dbms_output.put_line(substr(SQLERRM, 1, 1000)); end P_GG_TESTLOG;

36

6.2.2 GoldenGate配置

为统计生成的trail文件量,首先将两端的mgr.rpm中的PURGEOLDEXTRACTS C参数注释掉,并重启mgr进程。

(1)146上extract进程配置 ext3.prm /***

extract ext3 SETENV (ORACLE_SID = ORCL)

userid COSS360,password COSS360 exttrail C:\\ggoracle\\dirdat\\e3

dynamicresolution gettruncates

TABLE COSS360.per_test, keycols (sampletime, objectid); ***/

pump3.prm /***

extract pump3

userid COSS360,password COSS360 rmthost 192.168.0.142, mgrport 7801 rmttrail D:\\ggoracle\\dirdat\\trail146\\e3 NOPASSTHRU gettruncates

table COSS360.res_p_s_*; ***/

(2)142上应用进程配置 rep146e3.prm /***

REPLICAT rep146e3

USERID coss3,PASSWORD coss3

--SOURCEDEFS d:\\ggoracle\\dirdef\\ext146\\ext3.ref assumetargetdefs

REPERROR default,discard

DISCARDFILE d:\\ggoracle\\log\\rep148e3.dsc,append,megabytes 200 gettruncates

37

HANDLECOLLISIONS

BATCHSQL BATCHESPERQUEUE 200, OPSPERBATCH 2000 MAP coss360.per_test, TARGET coss3.per_test, keycols (sampletime, objectid); ***/

6.3 测试步骤

(1)清空两端测试表

SQL> truncate table per_test;

(2)清空归档和日志

sqlplus sys/broada_plat@orcl142 as sysdba SQL> alter system switch logfile;

SQL> host RMAN target sys/broada_plat@orcl142 RMAN> delete noprompt archivelog all; RMAN> exit

SQL> conn sys/broada_plat@orcl146 as sysdba SQL> alter system switch logfile;

SQL> host RMAN target sys/broada_plat@orcl146 RMAN> delete archivelog all;

这里需要注意的是,extract进程应该在归档清空后开始抓取,即建立extract进程应该在这个时间点之后begin。主要了防止日志大小统计的不准确。

(3)开启两端GoldenGate进程,记录初始trail file大小 146:2K 142:2K

(4)执行测试脚本

分别在两个命令行窗口中执行2个脚本,其中p_gg_testlog提前于P_GG_PERFORDATA执行,以记录完整的测试信息:

SQL> exec p_gg_testlog(p_marks => 'one')

SQL> exec P_GG_PERFORDATA(p_looptime => 10000000); --实际执行时间约1882秒

(5)测试数据生成结束、会话未关闭时(即10分钟停顿时间内)数据监控 查看相应SESSION

146 user commit: 10000000次 142 user commit: 10082次

备注:在应用端配置了每1000条事务进行一次批量提交

38

会话REDO生成情况统计:

select s.sid, n.name, round(s.value / 1024 / 1024) \ from v$sesstat s, v$statname n where s.statistic# = n.STATISTIC# and n.name like '%redo size%' order by 3 desc; 统计结果:

142上会话redo量(SID 288) ------------------------------------- 1 288 redo size 1679M

146上会话redo量(SID 211) ------------------------------------- 1 211 redo size 10037M

金山卫士流量监控中记录142总下载流量为3.1G。

GoldenGate应用端控制台中,查看lag信息,基本在3秒以内。

(6)统计表大小

SQL> analyze table per_test compute statistics; --190s左右

SQL> select s.segment_name,(s.bytes/1024)||'K' bytes from s.segment_name=UPPER('per_test');

146上

---------------------------------------------------------------- 1 PER_TEST 770048K

142上

---------------------------------------------------------------- 1 PER_TEST 770048K

两端的rows均为1000万行,传输中无数据丢失。

(7)检查trail文件大小 测试后trail文件大小:(e3*) 146:3,326,940,923 142:3,326,956,814

(8)检查生成的归档文件大小

sqlplus sys/broada_plat@orcl142 as sysdba SQL> alter system switch logfile;

sqlplus sys/broada_plat@orcl146 as sysdba SQL> alter system switch logfile;

39

user_segments s where 146:12,413,898,752 142:1,826,665,472

备注:146上的归档还包含一部分因日志表数据插入造成的归档数据。但在前面redo统计中则不包含,因为2个脚本分别运行,在不同的会话下。

(9)查看146上日志表

通过以下语句查看这次测试的日志表数据:

select * from gg_performance_testlog t where regexp_like(marks,'one') order by 1

日志表记录了同步过程中,两端同步表已提交数据的数量和差值,每秒记录一次。可以通过日志表的数据,计算出每秒事务量,并估算出同步效率。如果差值大,表明网络延迟较大;如果差值不断增大,表明应用端同步效率较低,无法满足源端的事务量。

另一文档《性能测试日志表数据》中记录了这次测试的日志表数据。

6.4 性能测试结果

6.4.1 测试数据计算

测试日志表中,记录了测试数据生成时间是从9:58:34到10:31:06,约32分32秒,生成1000万条测试记录,每生成一条记录提交一次,所以: 每秒事务量=10,000,000/1952=5123 次/秒

根据测试日志表记录,统计差值情况:

select avg(difference) avg,max(difference) max from gg_performance_testlog t where regexp_like(marks,'one') and difference>0; avg max

------------------------------------------ 17895.8988970588 51260

即同步时两端记录平均差值约17896行,最大差值为51260行。差值并不随着时间增大,表明应用进程的应用效率能满足抓取的每秒事务量。

146端在10:31:06完成所有事务,相应的,142端10:31:11完成所有应用,最终同步lag约5秒。 生成的trail文件大小3,326,956,814字节,约3172.8M或3.1G,与前面记录的网络传输流量3.1G基本一致,所以: 每秒网络传输流量=3172.8/1952=1.6M/s 源端1000万条记录,相应生成的redo为10037M,约9.80G;应用端同步生成的redo

40

本文来源:https://www.bwwdw.com/article/hxm.html

Top