Oracle GoldenGate配置说明

更新时间:2024-01-10 06:52:01 阅读量: 教育文库 文档下载

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

1. Oracle GoldenGate配置说明与整理

1.1. 体系结构图

1.2. 创建与编辑参数文件

在启动Oracle GoldenGate Manager的任何GGSCI命令行下,输入EDIT PARAMS命令,就可创建与编辑指定的参数。

EDIT PARAMS name of parameter file

1.3. 参数文件名定义

Trail文件名,只能包含两个字府。GolendGate相应的进程会自动加上6位数字,组成完整的文件名。另外,所有目录最好不要超过8个字符,且不能有中文字府及空格等。

Captured data must be processed into a series of files called a trail, where it is stored for processing by the next Oracle GoldenGate process downstream. The basic configuration is: ■ a local trail on the source system ■ a remote trail on the target system.

The name can be a relative or fully qualified path name. The actual trail name can contain only two characters, such as ./dirdat/tr. Oracle GoldenGate appends this name with a six-digit sequence number whenever a new file is created, such as ./dirdat/aa000002.

1.4. 决定用哪种捕捉数据变化的方法

对于Oralce数据库而言,OGG提供了两种捕捉数据变化的方法,分别称为传统方法与

集成方法。

1.4.1. 传统方法(Classic Method)

在传统方法中,OGG从源数据库的redo或archive日志文件中、或者从备份数据库系统的复制的归档日志中捕捉数据变化,生成相应的变化Trail文件。

Classic capture supports most Oracle data types fully, with restricted support for the complex data types. Classic capture is the original, fast, and time-proven Oracle GoldenGate capture method that supports a broad array of the most commonly used Oracle data types and features. You can use classic capture for any source Oracle RDBMS that is supported by Oracle GoldenGate.

1.4.2. 集成方法(integrated capture Method)

在集成捕捉方法中,OGG抽取进程直接使用数据库的日志挖掘服务器以LCR(logical change records)的形式来捕捉数据的变化。

这种捕捉模式的优势是相对传统的数据变化捕捉方式而言,能支持更多复杂数据类型。 In integrated capture mode, the Oracle GoldenGate Extract process interacts directly with a database logmining server to receive data changes in the form of logical change records (LCR). Integrated capture supports more data and storage types as compared to classic capture, and the support is more transparent.

The following are some additional benefits of integrated capture:

■ Because integrated capture is fully integrated with the database, no additional setup is required to work with Oracle RAC, ASM, and TDE.

■ Integrated capture uses the database logmining server to access the Oracle redo stream, with the benefit of being able to automatically switch between different copies of archive logs or different mirrored versions of the online logs. Thus integrated capture can transparently handle the unavailability of a log file caused by disk corruption, hardware failure, or operator error, assuming that additional copies of the archived and online logs are available

■ Integrated capture enables faster filtering of tables.

■ Integrated capture handles point-in-time recovery and RAC integration more efficiently.

■ Integrated capture features integrated log management. The Oracle Recovery Manager (RMAN) automatically retains the archive logs that are needed by Extract.

1.5. Goldengate Replicate Mode决定用什么复制模式

从Goldengate 12c版本开始,oracle引入了两种新的replicat mode,分别叫做Integrated Replicat Mode和Coordinated Replicat Mode.

其中,与integrated Capture Mode类似,Integrated Replicat Mode是针对oracle平台的,实际上就是将以前oracle stream中的功能整合进了新的Goldengate版本中.使用Intergrated Replicat Mode要求oracle数据库版本最低为11.2.0.4.

Coordinated Replicat Mode特性适用于各个数据库平台,与Classic Replicat Mode中的单线程Replicat进程不同,该模式中通过将replicat进程创建为多线程来提高数据复制时的可扩展性.Oracle文档中没有提到为了支持该特性,数据库版本方面有什么特殊需求,此外,该特性实际上是在操作系统进程层面所作的改进,所以该特性的使用应该是与数据库版本无关的. 下面就针对Goldengate的三种Replicate Mode作一简要介绍:

1.5.1. Classic Replicat Mode

Classic Replicat Mode也被称为Nonintegrated Replicat Mode,该模式中,Replicat进程是单线程的. 其工作流程如下:

>. 读取Goldengate Trail File;

>. 根据Replicat参数配置,执行数据过滤,映射和转换操作;

>. 按数据变化在源数据库端提交的顺序构建SQL DML或DDL语句;

>. 通过本地数据库连接,执行前面构建的SQL语句,从而将数据变化应用到目标数据库里. 在Classic Replicat Mode中,单线程的工作方式显然无法满足所有的负载需求.这时,我们通常使用并行复制的方式来应对这种挑战. Classic Replicat Mode中主要通过以下两种方式来实现并行复制:

>. 将需要复制的表作逻辑上的拆分,创建多个replicat进程,每个进程负责复制一部份表; >. 当某个单一表上的负载较大需要作拆分时,oracle提供了@RANGE函数来帮助实现表内的拆分;

我在<>一文中有对以上拆分方式的更详细描述.

严格来说,Classic Replicat Mode对并行的支持是不够灵活的,对表的拆分要注意逻辑上的关联

性,特别是那些存在外键依赖性的数据.

1.5.2. Coordinated Replicat Mode

该模式中,Replicat进程是多线程的. 其工作流程如下: >. 读取Goldengate Trail File;

>. 根据Replicat参数配置,执行数据过滤,映射和转换操作;

>. 按数据变化在源数据库端提交的顺序构建SQL DML或DDL语句;

>. 通过本地数据库连接,执行前面构建的SQL语句,从而将数据变化应用到目标数据库里. 可以看到,其工作流程与Classic Replicat Mode是一致的.两种模式的区别就在于其多线程工作机制上,每个线程可以独立的读取trail file进行分析,然后执行sql,也就是多个线程可以并行工作.

由于有多个线程并行工作,因而也就涉及到任务的划分,协调等工作,所以有个单独的coordinate线程会做这方面的工作,这应该也就是coordinated replicat命名的由来了.

Coordinated Replicat Mode中也提供了由用户来划分工作负载的方法,具体实现方法参见官方文档.

从以上描述来看,Coordinated Replicat Mode是对Classic Replicat Mode中并行实现所提供的一种新的选择.

1.5.3. Integrated Replicat Mode

该模式下,Goldengate利用了oracle stream采用的方式来apply数据变化,其工作流程如下: >. 读取Goldengate Trail File;

>. 根据Replicat参数配置,执行数据过滤,映射和转换操作; >. 根据源端数据变化构建LCR(logical change record);

>. Replicate进程通过与数据库中的stream后台进程交互,将前面生成的LCR交由stream进程来应用到数据库中.

使用过oracle stream的用户应该知道,stream中控制apply进程并行度是很灵活的,通过将replicat创建为Integrated Replicat Mode,stream的特性也可以在Goldengate中实现。

从integrated Capture Mode和Integrated Replicat Mode可以看到,oracle在收购了Goldengate后,已经将stream的很多功能整合进了Goldengate的新版本中。

2. 源端数据库实施

2.1. 数据库准备

2.1.1. 开启数据库归档日志

查看数据库当前日志模式 archive log list; 更改为归档模式 shutdown immediate; start mount;

alter database archivelog; alter database open;

开启第二归档路径(可选)

alter system set log_archive_dest_2=’location=/archive_2OPTIONAL’ scope=spfile; alter system archive log start tolog_archive_dest_2; 查看第二归档日志是否生效(重启数据库) show parameter archive;

2.1.2. 开启supplemental logging和force logging

查看当前数据库是否开启supplementallogging

select SUPPLEMENTAL_LOG_DATA_MIN fromv$database; 开启数据库级别的最小supplementallogging alter database add supplemental log data;

查看当前数据库forcelogging的状态 select force_logging from v$database; 开启forcelogging

alter database force logging;

2.1.3. 创建goldengate管理用户,并赋予相关权限

创建管理用户的表空间

create tablespace tbs_ggmgr datafiel ‘/u01/app/oracle/goldengate/ggmgr.dbf’size autoextend on;

创建goldengate管理用户

50M

create user ggmgr identified by oracledefault tablespace tbs_ggmgr temporary tablespace TEMP quota unlimited ontbs_ggmgr;

赋予ggmgr相关权限(想简单的话,可以赋予DBA权限) grant CONNECT,RESOURCE to ggmgr;

grant CREATE SESSION,ALTER SESSION toggmgr;

grant SELECT ANY DICTIONARY,SELECT ANYTABLE to ggmgr; grant CREATE TABLE,ALTER ANY TABLE to ggmgr;

2.1.4. 创建测试用户和表(可选)

create user test identified by test; conn test/test; create table test( stuid number(8),

stuname varchar2(20), stupasswd varchar2(20) );

insert into test values(1,’test1’,’test1); insert into test values(2,’test2’,’test2’); commit;

2.2. 源端goldengate安装及参数设置 2.2.1. 设置goldengate运行所需的环境变量

编辑oracle的home目录下.bash_profile文件 vi .bash_profile

添加如下内容

exportLD_LIBRARY_PATH=$ORACLE_BASE/goldengate:$ORACLE_HOME/lib

2.2.2. 创建goldengate安装目录

通常将goldengate安装在ORACLE_BASE目录下 mkdir –p /u01/app/oracle/goldengate/

2.2.3. 解压并初始化goldengate

将goldengate压缩文件解压到goldengate得安装目录 tar vxf ggs_Linux_x64_ora11g_64bit_v11_1_1_0_0_078.tar

执行./ggsci进入GGSCI 创建目录结构

create subdirs --只在第一次启动执行

2.2.4. 添加trandata

在GGSCI中

dbloign userid ggmgr,password oracle

对要进行复制的表添加表级supplemental logging add trandata test.* 查看

info trandata test.*

2.2.5. 添加并配置mgr进程

edit param mgr 添加如下内容 port 7809

purgeoldextracts ./dirdat/*,usecheckpoints, minkeepfiles 20 --强列建议加上动态端口参数

DYNAMICPORTLIST 7810-7820, 7830 --在集群环境中建议使用,查阅相关手册 AUTOSTART ER t*

AUTORESTART ER t*, RETRIES 4, WAITMINUTES 4 STARTUPVALIDATIONDELAY 5

2.2.6. 添加并配置extract进程

添加一个extract进程

add extract exts100,tranlog,begin now

给extract进程指定trail文件

add exttrail ./dirdat/s1,extract exts100,megabytes 100 配置extract的参数 edit param exts100

添加如下内容(开启第二归档的情况下) extract exts100

userid ggmgr,password oracle tranlogoptions archivedlogonly

tranlogoptions altarchivelogdest instanceorcl /archive_2 tranlogoptions altarchivedlogformat%t_%s_%r.dbf gettruncates

reportcount every 30 minutes,rate

discardfile./dirrpt/exts100.dsc,APPEND,MEGABYTES 100 exttrail ./dirdat/s1 table TEST.TEST;

2.2.7. 添加并配置pump进程

add extract dps100 exttrailsource./dirdat/s1 add rmttrail ./dirdat/t1,extract dps100

配置pump进程参数 edit param dps100 extract dps100

userid ggmgr,password oracle

rmthost 192.168.128.101,mgrport7809,compress numfiles 5000

DYNAMICRESOLUTION rmttrail ./dirdat/t1 table TEST.TEST;

2.2.8. 检查进程是否能够成功启动

start <进程名> start mgr start exts100 start dps100

查看进程状态 info all

3. 镜像端数据库的初始化

3.1. 从源端数据库导出相关的数据和表结构

(需要相关权限,可以使用有DBA权限的用户) exp username/password file=test_1203013.dmpowner=test triggers=n

log=test_120313.log;

indexes=n

3.2. 将导出的数据文件传到镜像端

可以使用ftp

3.3. 在镜像端创建和源端对应的用户和表空间

要保持表空间的名字一致

create user test identified by test;

3.4. 在镜像端导入数据文件

需要相关权限,可以使用有DBA权限的用户

imp username/password file=test_120313.dmpfromuser=test touser=test log=test_120313.log;

查看数据是否导入成功

4. 镜像端数据库实施

4.1. 数据库准备

创建管理用户的表空间

create tablespace tbs_ggmgr datafiel ‘/u01/app/oracle/goldengate/ggmgr.dbf’size 50M autoextend on;

创建goldengate管理用户

create user ggmgr identified by oracledefault tablespace tbs_ggmgr temporary tablespace TEMP quota unlimited ontbs_ggmgr;

赋予ggmgr相关权限(想简单的话,可以赋予DBA权限) grant CONNECT,RESOURCE to ggmgr;

grant CREATE SESSION,ALTER SESSION toggmgr;

grant SELECT ANY DICTIONARY,SELECT ANYTABLE to ggmgr; grant CREATE TABLE to ggmgr; 2goldengate安装及参数设置

4.2. 设置goldengate运行所需的环境变量

编辑oracle的home目录下.bash_profile文件 vi .bash_profile 添加如下内容

exportLD_LIBRARY_PATH=$ORACLE_BASE/goldengate:$ORACLE_HOME/lib

4.3. 创建goldengate安装目录

通常将goldengate安装在ORACLE_BASE目录下 mkdir –p /u01/app/oracle/goldengate/

4.4. 解压并初始化goldengate

将goldengate压缩文件解压到goldengate得安装目录 tar vxf ggs_Linux_x64_ora11g_64bit_v11_1_1_0_0_078.tar 执行./ggsci进入GGSCI 创建目录结构

create subdirs --只在第一次启动执行

4.5. 编辑全局参数文件

dblogin userid ggmgr,password oracle edit params ./GLOBALS 添加如下内容

checkpointtable ggmgr.ogg_checkpointtable 添加检查点表

add checkpointtableggmgr.ogg_checkpointtable

4.6. 2.5.添加并配置mgr进程

edit param mgr 添加如下内容 port 7809

(这里没有加入清除trail文件的设置)

4.7. 2.6.添加并配置replicat进程

add replicat rept101,exttrail ./dirdat/t1 编辑replicat进程的参数文件 edit param rept101 添加如下内容 replicat rept101

userid ggmgr,password oracle ASSUMETARGETDEFS

DISCARDFILE ./dirrpt/rept101.dsc,PURGE

MAP TEST.TEST, TARGET TEST.TEST;

4.8. 检查进程能否成功启动

start <进程名> start mgr start rept101

查看进程状态 info all

5. 测试

5.1. 在源端数据库插入数据

insert into test values(3,’test3,’test3’); commit;

5.2. 生成归档日志

alter system switch logfile;

5.3. 查看镜像端数据库

select * from test;

6. 集成模式数据同步实施

6.1. 集成模式与传统模式概述

从Oracle Goldengate 11g版本开始,oracle引入了一种新的capture mode,称为Integrated Capture Mode。传统的capture mode被称为classic capture mode。

在classic capture mode中,goldengate extract进程直接读取oracle redo log,捕获数据变化,存为Goldengate的trail file格式,然后利用pump进程将这些trail file传输到目标数据库,目标数据库上的replicat进程读取这些trail file,再利用sql将这些变化apply到目标数据库里。

而在新的integrated capture mode中,goldengate extract进程不再直接读取oracle redo

log,而是通过与数据库log mining server整合来捕获数据变化:log mining server负责以LCR的格式从数据库日志中捕获数据变化,然后extract进程再将这些抓取的数据存成trail file的格式。

与classic capture mode相比,这种integrated capture mode的主要差别就是extract不再直接读取oracle redo log,而交由数据库内部的log mining工具来完成。由于extract进程是由操作系统来管理的,身处数据库系统之外,integrated capture mode的这种改变所带来的主要好处体现在兼容性方面:支持更多的数据类型和存储类型,以及由于与数据库更紧密的整合,不再需要为Oracle RAC,ASM和TDE作更多额外的配置工作。

integrated capture mode带来的另一个重要变化就是:开始支持local和downstream两种配置选项。而在classic capture mode中,我们只有local这一种选择,也就是extract进程必须配置在源数据库服务器上。

6.2. Integrated Capture Mode下local mining的配置示例 6.2.1. 环境说明

database version:11.2.0.4 goldengate version: 12.1.2.0.0

OS version:Solaris 10 (on sparc 64 bit)

6.2.2. 数据库环境准备工作

为了配置integrated capture mode,数据库最低版本必须是11.2.0.3.

此外,在不同的数据库版本上安装goldengate软件时,我们还需要注意打上相应的补丁,具体参考metalink文档 1557031.1:Oracle GoldenGate -- Oracle RDBMS Server Recommended Patches.在此测试中,我们的数据库版本是11.2.0.4,所以根据文档 1557031.1的建议,我们需要打的补丁号为 17735009.

6.2.3. 打开minimal supplemental logging和force logging

--on source database only

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER DATABASE FORCE LOGGING;

6.2.4. Enable ENABLE_GOLDENGATE_REPLICATION参数

alter system set ENABLE_GOLDENGATE_REPLICATION=true scope=both;

从数据库11.2.0.4版本开始,我们需要在source和target数据库上同时enable该参数,这是

oracle用来作license控制的.

6.2.5. 创建goldengate管理用户并授权

--on source and target database

create user ggs_owner identified by ggs_owner default tablespace users temporary tablespace temp;

grant connect, resource,dba to ggs_owner;

EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE( grantee => 'GGS_OWNER', privilege_type => 'CAPTURE', grant_select_privileges=> true, do_grants => TRUE);

关于goldengate管理用户所需权限的详细描述,参考官方文档中<>一书的chapter 4.

6.2.6. Register Extract Process

GGSCI> DBLOGIN USERID ggs_owner PASSWORD ggs_owner GGSCI> REGISTER EXTRACT ext01 DATABASE --这里是Enable integrated capture mode的关键步骤

6.2.7. Enable测试表的supplemental logging

GGSCI> DBLOGIN USERID ggs_owner PASSWORD ggs_owner GGSCI> add trandata SCOTT.TEST

6.2.8. 编辑source db server上的manager进程参数

GGSCI> edit params mgr PORT 7809

USERID ggs_owner, PASSWORD ggs_owner

PURGEOLDEXTRACTS /app/oracle/ggs/dirdat/*,usecheckpoints, minkeepdays 3 AUTOSTART EXTRACT *

6.2.9. 配置streams_pool_size参数

-- on source db

alter system set streams_pool_size=512MB scope=both;

--对streams内存调整的具体方法取决于数据库的内存管理,以上仅供参考

6.2.10. 创建extract进程

-- on source db

GGSCI> ADD EXTRACT ext01 INTEGRATED TRANLOG, BEGIN NOW

GGSCI> ADD EXTTRAIL /reuters/app/oracle/ggs/dirdat/e1, EXTRACT ext01

GGSCI> edit params ext01 EXTRACT ext01

USERID ggs_owner, PASSWORD ggs_owner

TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 100) EXTTRAIL /app/oracle/ggs/dirdat/e1 TABLE SCOTT.TEST;

6.2.11. 创建pump进程

-- on source db

GGSCI> ADD EXTRACT pump01 EXTTRAILSOURCE /app/oracle/ggs/dirdat/e1 GGSCI> ADD RMTTRAIL /app/oracle/ggs/dirdat/r1, EXTRACT pump01

GGSCI> edit params pump01 EXTRACT pump01

USERID ggs_owner, PASSWORD ggs_owner RMTHOST 10.***, MGRPORT 7809 RMTTRAIL /app/oracle/ggs/dirdat/r1 TABLE SCOTT.TEST;

6.2.12. 创建checkpoint表

--on target db

GGSCI>DBLOGIN USERID ggs_owner, PASSWORD ggs_owner GGSCI>ADD CHECKPOINTTABLE GGS_OWNER.CHKPTAB

在Goldengate Home目录下,编辑GLOBALS参数文件来指定checkpoint表 vi GLOBALS

CHECKPOINTTABLE GGS_OWNER.CHKPTAB

6.2.13. 编辑target db server上的manager进程参数

GGSCI> edit params mgr PORT 7809

USERID ggs_owner, PASSWORD ggs_owner

PURGEOLDEXTRACTS /app/oracle/ggs/dirdat/*,usecheckpoints, minkeepdays 3 AUTOSTART REPLICAT *

6.2.14. 创建replicat进程

--on target db

GGSCI> ADD REPLICAT rep01,EXTTRAIL /app/oracle/ggs/dirdat/r1 GGSCI> edit params rep01 replicat rep01

USERID ggs_owner, PASSWORD ggs_owner Assumetargetdefs

DISCARDFILE /app/oracle/ggs/dirrpt/record01.dsc,APPEND,MEGABYTES 50 BATCHSQL

MAP SCOTT.TEST,TARGET SCOTT.TEST;

6.2.15. 配置完成,启动goldengate进程

-- on source db GGSCI> start mgr --on target db GGSCI> start mgr

7. 主备库切换示例

SQL> conn clinic/clinic Connected.

SQL> drop table tv;

create table tv (t1 int primary key,t2 int,t3 varchar2(30)); Table dropped.

SQL>

Table created.

SQL> drop sequence seqt1;

create sequence seqt1 start with 1 increment by 1; Sequence dropped.

SQL> SQL>

Sequence created.

declare

rnd number(9,2); begin

for i in 1..100000 loop

insert into tv values(seqt1.nextval,i*dbms_random.value,'MACLEAN IS TESTING'); commit; end loop; end; /

/* 以上脚本在primary主库的某个应用账户下创建了测试用的数据,

接着我们可以使用各种工具将数据初始化到从库中,如果在这个过程中 希望实时在线数据迁移的话,可以参考《Goldengate实现在线数据迁移》 */

/* 注意我们在Live Standby的环境中往往需要复制sequence序列,以保证切换到备库时业务可以正常进行 */

/* 初始化备库数据后,确保已与主库完全一致 */ primary :

SQL> select sum(t2) from tv;

SUM(T2) ----------

2498624495

SQL> select last_number from user_sequences;

LAST_NUMBER -----------

100001

standby:

SQL> select sum(t2) from tv;

SUM(T2) ----------

2498624495

SQL> select last_number from user_sequences;

LAST_NUMBER -----------

100001

以上完成准备工作后,我们可以进入到正式配置Goldengate live stanby的阶段,包括以下步骤:

配置由主库到备库的extract、replicat、data pump,该步骤同普通的单向复制没有太大的区别

配置由备库到主库的extract、replicat、data pump 启动由主库到备库的extract、replicat、data pump 接下来我们会实践整个配置过程: 1.

创建由主库到备库的extract、data pump、replicat GGSCI (rh2.oracle.com) 10> dblogin userid maclean Password:

Successfully logged into database.

GGSCI (rh2.oracle.com) 11> add trandata clinic.*

Logging of supplemental redo data enabled for table CLINIC.TV

GGSCI (rh2.oracle.com) 4> add extract extstd1,tranlog,begin now EXTRACT added.

GGSCI (rh2.oracle.com) 5> add exttrail /d01/ext/cl,megabytes 100,extract extstd1 EXTTRAIL added.

GGSCI (rh2.oracle.com) 7> view params extstd1

-- Identify the Extract group: EXTRACT extstd1

-- Specify database login information as needed for the database: userid maclean, password maclean

-- Specify the local trail that this Extract writes to: EXTTRAIL /d01/ext/cl

-- Specify sequences to be captured: SEQUENCE clinic.seqt1;

-- Specify tables to be captured: TABLE clinic.*;

-- Exclude specific tables from capture if needed: -- TABLEEXCLUDE

GGSCI (rh2.oracle.com) 17> add extract pumpstd1,exttrailsource /d01/ext/cl,begin now EXTRACT added.

GGSCI (rh2.oracle.com) 98> add rmttrail /d01/rmt/cl,megabytes 100,extract pumpstd1 RMTTRAIL added.

GGSCI (rh2.oracle.com) 129> view params pumpstd1 -- Identify the data pump group: EXTRACT pumpstd1

userid maclean, password maclean

-- Specify database login information as needed for the database: userid maclean, password maclean

RMTHOST rh3.oracle.com, MGRPORT 7809

-- Specify the remote trail on the standby system: RMTTRAIL /d01/rmt/cl

-- Pass data through without mapping, filtering, conversion: PASSTHRU

sequence clinic.seqt1; Table clinic.*;

在备库上配置由主库到备库的replicat:

GGSCI (rh3.oracle.com) 4> add replicat repstd1,exttrail /d01/rmt/cl,begin now REPLICAT added.

GGSCI (rh3.oracle.com) 49> view params repstd1 -- Identify the Replicat group: REPLICAT repstd1

-- State that source and target definitions are identical: ASSUMETARGETDEFS

-- Specify database login information as needed for the database: userid maclean, password maclean -- Specify tables for delivery: MAP clinic.*, TARGET clinic.*;

-- Exclude specific tables from delivery if needed: -- MAPEXCLUDE 2.

创建由备库到主库的extract、data pump、replicat

GGSCI (rh3.oracle.com) 51> dblogin userid maclean Password:

Successfully logged into database.

GGSCI (rh3.oracle.com) 52> add trandata clinic.*

Logging of supplemental redo data enabled for table CLINIC.TV.

/* 不要忘记在备库端的相关表加上追加日志 */

GGSCI (rh3.oracle.com) 53> add extract extstd2,tranlog,begin now EXTRACT added.

GGSCI (rh3.oracle.com) 54> add exttrail /d01/ext/cl,megabytes 100,extract extstd2 EXTTRAIL added.

GGSCI (rh3.oracle.com) 58> view params extstd2 -- Identify the Extract group: EXTRACT extstd2

-- Specify database login information as needed for the database: userid maclean, password maclean

-- Specify the local trail that this Extract writes to: EXTTRAIL /d01/ext/cl

-- Specify sequences to be captured: SEQUENCE clinic.seqt1;

-- Specify tables to be captured: TABLE clinic.*;

-- Exclude specific tables from capture if needed: -- TABLEEXCLUDE

GGSCI (rh3.oracle.com) 59> add extract pumpstd2,exttrailsource /d01/ext/cl,begin now EXTRACT added.

GGSCI (rh3.oracle.com) 60> add rmttrail /d01/rmt/cl,megabytes 100,extract pumpstd2 RMTTRAIL added.

GGSCI (rh3.oracle.com) 63> view params pumpstd2

-- Identify the data pump group: EXTRACT pumpstd2

userid maclean, password maclean

-- Specify database login information as needed for the database: userid maclean, password maclean

RMTHOST rh2.oracle.com, MGRPORT 7809

-- Specify the remote trail on the standby system: RMTTRAIL /d01/rmt/cl

-- Pass data through without mapping, filtering, conversion: PASSTHRU

sequence clinic.seqt1; Table clinic.*;

在主库上配置replicat:

GGSCI (rh2.oracle.com) 136> add replicat repstd2,exttrail /d01/rmt/cl,begin now,checkpointtable maclean.ck

REPLICAT added.

GGSCI (rh2.oracle.com) 138> view params repstd2

-- Identify the Replicat group: REPLICAT repstd2

-- State that source and target definitions are identical: ASSUMETARGETDEFS

-- Specify database login information as needed for the database: userid maclean, password maclean -- Specify tables for delivery: MAP clinic.*, TARGET clinic.*;

-- Exclude specific tables from delivery if needed: -- MAPEXCLUDE 3.

完成以上OGG配置后,可以启动主库到备库的extract、pump、以及replicat: GGSCI (rh2.oracle.com) 141> start extstd1 Sending START request to MANAGER ... EXTRACT EXTSTD1 starting

GGSCI (rh2.oracle.com) 142> start pumpstd1 Sending START request to MANAGER ... EXTRACT PUMPSTD1 starting

GGSCI (rh3.oracle.com) 70> start repstd1 Sending START request to MANAGER ... REPLICAT REPSTD1 starting

/* 如果你是在offline状态下配置的话,那么此时可以启用应用了*/ 接下来我们尝试做有计划的主备库切换演练: 1.

首先停止一切在主库上的应用,这一点和DataGuard Switchover一样。在保证没有活动事务的情况下,才能切换干净。 2.

在主库端使用LAG等命令了解extract的延迟,若返回如\的信息,则说明所有事务均已被抽取。 GGSCI (rh2.oracle.com) 144> lag extstd1

Sending GETLAG request to EXTRACT EXTSTD1 ... Last record lag: 0 seconds.

At EOF, no more records to process.

在EOF的前提下关闭extract:

GGSCI (rh2.oracle.com) 146> stop extstd1 Sending STOP request to EXTRACT EXTSTD1 ... Request processed. 3.

同样对pump使用LAG命令,若返回如\的信息,则说明已抽取的数据都被发送到备库了。

GGSCI (rh2.oracle.com) 147> lag pumpstd1

Sending GETLAG request to EXTRACT PUMPSTD1 ... Last record lag: 3 seconds.

At EOF, no more records to process.

在EOF的前提下,关闭data pump

GGSCI (rh2.oracle.com) 148> stop pumpstd1 Sending STOP request to EXTRACT PUMPSTD1 ... Request processed. 3.

检查备库端replicat的同步情况,如返回\,则说明所有记录均被复制。

GGSCI (rh3.oracle.com) 71> lag repstd1

Sending GETLAG request to REPLICAT REPSTD1 ... Last record lag: 5 seconds.

At EOF, no more records to process.

在EOF的前提下关闭replicat

GGSCI (rh3.oracle.com) 72> stop repstd1

Sending STOP request to REPLICAT REPSTD1 ...

Request processed. 4.

紧接着我们可以在备库上为业务应用用户赋予必要的insert、update、delete权限,启用各种触发器trigger及cascade delete约束等;

以上手段在主库上对应的操作是收回应用业务的权限,disable掉各种触发器及cascade delete约束,

之所以这样做是为了保证在任何时候扮演备库角色的数据库均不应当接受任何除了OGG外的手动的或者应用驱动的业务数据变更, 以保证主备库间的数据一致。 5.

修改原备库上的extract的启动时间到现在,已保证它不去抽取那些之前的重做日志

GGSCI (rh3.oracle.com) 75> alter extstd2 ,begin now EXTRACT altered.

GGSCI (rh3.oracle.com) 76> start extstd2

Sending START request to MANAGER ... EXTRACT EXTSTD2 starting

若之前没有启动由备库到主库的pump和replicat的话可以在此时启动:

GGSCI (rh3.oracle.com) 78> start pumpstd2

Sending START request to MANAGER ... EXTRACT PUMPSTD2 starting

GGSCI (rh2.oracle.com) 161> start repstd2

Sending START request to MANAGER ... REPLICAT REPSTD2 starting

6.此时我们可以正式启动在原备库现在的主库上的应用了

接下来我们尝试回切到原主库上:

1.前提步骤与之前的切换相似,首先停止在原备库上的任何应用,

之后使用LAG命令确认extract和replicat的进度,在确认后关闭extract和replicat。 完成在主库上的维护工作:包括赋予权限,启用触发器等等。

2.修改原主库上的extract的开始时间为当前,保证它不去处理之前的重做日志:

GGSCI (rh2.oracle.com) 165> alter extract extstd1,begin now EXTRACT altered.

3.此时我们已经可以启动在原主库现在的主库上的应用了

4.启动最早配置的由主库到备库的extract、pump、replicat:

GGSCI (rh2.oracle.com) 166> start extstd1

Sending START request to MANAGER ... EXTRACT EXTSTD1 starting

GGSCI (rh2.oracle.com) 171> start pumpstd1

Sending START request to MANAGER ... EXTRACT PUMPSTD1 starting

GGSCI (rh3.oracle.com) 86> start repstd1

Sending START request to MANAGER ... REPLICAT REPSTD1 starting

以上完成了OGG的Live Standby中主备库之间的计划内的切换Switchover,That's Great!

8. Data Pump应用专论

8.1. Data Pump 理论说明

在GG系列的第一讲:

Oracle Golden Gate 系列一 -- GG 架构 说明

http://blog.csdn.net/tianlesoftware/article/details/6925907

提到了GG 一个架构:

Data pump(不要和Expdp/impdp 这个data pump 混淆) 是Source 端的第二个Extract group。 在没有使用data pump时,Extract 必须将capture data 发送到target 的remote trail里。

在使用data pump的情况下,主Extract group将capture data 写入本地的trail里,然后data pump 进程读取这个trail,并将内容通过网络发送到target 端的remote trail里。

和primary Extract group 一样,data pump 可以配置在online 或者 batch processing。 Data pump 也可以进行data filter,map 和conversion。

在实际中配置GG Data pump 主要是为了应对网络故障问题,如果我们直接将trail 通过网络传送到Target 端,那么在这期间,任何网络故障都可能导致Extract process 的异常中断。

而使用datapump后,即便网络故障,主提取进程仍然能随着事务生成trail文件,而datapump则会暂时停止传输,等待网络通畅后在将堆积的本地trail文件发送至目标服务器,从而实现了断点传输的功能。在实际应用中,每一个同步流程都应该配置datapump以应对网络问题。

Like a primary Extract group, a data pump can be configured for either online or batch processing.It can perform data filtering, mapping, and conversion, or it can be configuredin pass-through mode, where data is passively transferred as-is, withoutmanipulation. Pass-through mode increases the throughput of the data pump,because all of the functionality that looks up object definitions is bypassed.

8.2. 示例应用

8.2.1. 在Source 端创建Extract process

这里使用我们之前已经创建的ext1,其创建语法如下: --创建Extract process

GGSCI (gg1) 11> add extract ext1,tranlog, begin now --创建localtrail

GGSCI (gg1) 12> add exttrail /u01/ggate/dirdat/lt, extract ext1

配置Extract 参数如下:

GGSCI (gg1) 50> view params ext1

extract ext1

userid ggate@gg1, password ggate exttrail /u01/ggate/dirdat/lt table dave.pdba;

8.2.2. 在Source 端创建Data Pump Group

GGSCI (gg1) 49> add extract dpump,exttrailsource /u01/ggate/dirdat/lt EXTRACT added.

--这里指定我们localtrail 的位置。

GGSCI (gg1) 51> add rmttrail /u01/ggate/dirdat/lt, extract dpump RMTTRAIL added.

--指定data pump 发送trail到target 端的位置。

配置Data Pump 参数:

GGSCI (gg1) 56> view params dpump

extract dpump

userid ggate@gg1, password ggate rmthost gg2, mgrport 7809 rmttrail /u01/ggate/dirdat/lt passthru

table dave.pdba;

这里注意passthru 参数,该参数默认是nopassthru,官网的说明如下: PASSTHRU | NOPASSTHRU Valid for Extract

Use the PASSTHRUand NOPASSTHRU parameters to control whether a data-pump Extract processestables in pass-through mode or normal mode. Inpass-through mode, the Extract process does not look up table definitions,either from the database or from a datadefinitions file. Normally, theExtract process logs into the database to retrieve data definitions and, if thetarget is NonStop, reads a data-definitions file. The definitions are used toperform mapping and conversion functions.

--该参数控制Extract process的模式,当为PASSTHRU时,不检查表的定义,仅当source 和target 对象的结构一样,并没有map或者filter 时使用,不检查表定义,可以加快处理的速度。

根据具体情况使用该参数,官网的示例: EXTRACT fin

RMTHOST sysb, MGRPORT 7809

RMTTRAIL /ggs/dirdat/rt PASSTHRU TABLE fin.acct; NOPASSTHRU

TABLE fin.sales, WHERE (ACCOUNT-CODE < 100);

8.2.3. 在Target 端配置Replicat 进程

--这里配置进程的checkpoint

GGSCI (gg2) 6> EDIT PARAMS ./GLOBALS GGSCHEMA ggate

CHECKPOINTTABLE ggate.checkpoint 添加如上2条记录。

GGSCI (gg2) 12> dblogin userid ggate@gg2,password ggate Successfully logged into database.

--连接到DB 的GGATE 用户,在db里创建checkpoint表 GGSCI (gg2) 13> add checkpoint tableggate.checkpoint Successfully created checkpoint table GGATE.CHECKPOINT.

--创建replicat group

GGSCI (gg2) 14> add replicat rep1,exttrail /u01/ggate/dirdat/lt, checkpointtable ggate.checkpoint REPLICAT added.

--注意这里的目录要和我们的data pump 指定的目录一致。

修改rep1参数:

GGSCI (gg2) 44> view params rep1

replicat rep1

ASSUMETARGETDEFS

userid ggate@gg2,password ggate

discardfile/u01/ggate/dirdat/rep1_discard.txt, append, megabytes 10 --HANDLECOLLISIONS

map dave.pdba, target dave.pdba;

8.2.4. 开始测试

1 在Source 端启动Extract和data pump 进程 GGSCI (gg1) 60> start extract ext1

Sending START request to MANAGER ...

EXTRACT EXT1 starting

GGSCI (gg1) 61> start extract dpump Sending START request to MANAGER ... EXTRACT DPUMP starting

GGSCI (gg1) 76> info dpump

EXTRACT DPUMP Last Started 2011-11-1620:13 Status RUNNING Checkpoint Lag 00:00:00 (updated 00:04:35 ago) Log Read Checkpoint File /u01/ggate/dirdat/lt000000 First Record RBA 0

注意这里的data pump是从lt000000 开始读取trail 文件,如果是新搭建的GG 同步,那么都是从lt000000开始处理,所以没有问题,如果是后来修改称data pump,就需要根据extract 进程的错误提示信息,使用如下命令: GGSCI (gg1) 82> alter extract dpump,extseqno 2,extrba1965317 修改data pump 读取的trail 文件位置。

为了保证文章的简洁,我把这里2种情况的测试过程,单独整理成了一篇Blog,具体参考: Oracle Golden Gate 有关DataPump 重置trail 序列号 测试 说明 http://blog.csdn.net/tianlesoftware/article/details/6978441

2 在Target 端启动replicat 进程 GGSCI (gg2) 48> start replicat rep1

Sending START request to MANAGER ... REPLICAT REP1 starting

GGSCI (gg2) 50> info all

Program Status Group Lag Time Since Chkpt MANAGER RUNNING REPLICAT RUNNING REP1 00:00:00 00:00:04

9. GodenGate调优

9.1. 寻找extract瓶颈 9.1.1. 使用系统监控工具

使用系统工具监控Extract运行的CPU/IO/Mem - CPU:top,topas,sar等 - IO:iostat等 - Mem:vmstat等

9.1.2. 使用TESTMAPPINGSPEED选项

使用TESTMAPPINGSPEED

- 可以使Extract只解析日志但不写队列,用于测试日志抽取速度 - 如果加入该参数使Extract性能能够显著提高,则写队列为可能瓶颈

9.1.3. 缩小Extract抽取范围

缩小Extract包含的表范围

- 只保留一个数据变化较小表或者加一个测试表,观察Extract处理速 度是否得到提高,如有显著提高则可能瓶颈在数据库fetch,可通过 查询运行期间存在哪些select语句予以验证 Extract的瓶颈一般在于LCR转换为UDF

9.2. 抽取与复制进程拆分优化 9.2.1. 拆分粒度

- 可以通过schema进行区分,每个复制链路负责一个或多个schema; - 也可以根据表进行分割,每个进程负责不同表的集合;

- 对于同一个表也可以通过Range拆分为几个进程同时处理。例如: Replicat 1:

MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (1, 2)); Replicat 2:

MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (2, 2));

9.2.2. 进程拆分的注意事项

- 各进程间没有同步机制,应尽量确保同一交易涉及表在一个进程

9.3. 抽取与复制进程拆分与交易一致性 9.3.1. 保证抽取一致性

- 由于OGG的Extract性能较高,可以使用尽量少的Extract完成抽取,多个之间以业务或Schema进行区分

- 单个Extract抽取出来的队列中可以保证交易的一致性和先后顺序

9.3.2. 尽量保证投递一致性

- 如单个Replicat无法满足一个队列投递数据要求

可以根据表进行分割,每个进程负责不同表的集合,尽量保证同一业务涉及表放在一个Replicat中,可以保证一致性;(需临时禁止表间的外键链接保证Replicat可进行拆分) 对于同一个表也可以通过Range拆分为几个进程同时处理 - Replicat拆分可能临时造成各进程间不同步,但是

多个Replicat性能会得到很大提高,可以保证数据复制始终是实时的当源端出现灾难后,由于Extract可以保证源端抽取时数据的一致性,而目标端多Replicat读取的是同一个队列,当它们应用队列数据完

毕后是可以达到数据一致的

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

Top