Oracle Golden Gate 系列十七 -- GG 一对多 real-time data distribution 说明 与 示例

 

一.官网说明

A datadistribution configuration is a one-to-many configuration. Oracle GoldenGatesupports synchronization of a source database to any number of target systems.Oracle GoldenGate supports like-to-like or heterogeneous transfer of data, withcapabilities for filtering and conversion on any system in the configuration(support varies by database platform).

--GG 支持一个Source 对任意个Target 的同步。

 

1.1 Considerations for a data-distribution configuration

1.1.1 Fault tolerance

For a datadistribution configuration, the use of data pumps ensures that if network connectivityto any of the targets fails, the captured data still can be sent to the other targets.Use a primary Extract group and a data-pump Extract group in the source configuration,one for each target.

--对于data distribution,需要使用data pump来预防网络故障。如果有多个Target,则每个Target 对应一个Data pump。

 

1.1.2 Filtering and conversion

You can use anyprocess to perform filtering and conversion. However, using the data pumps toperform filtering operations removes that processing overhead from the primary Extractgroup, and it reduces the amount of data that is sent across the network.

 

1.1.2.1 To filter data,you can use:

(1)    A FILTER or WHERE clause in aTABLE statement (Extract) or in a MAP statement (Replicat).

(2)    A SQL query or procedure

(3)    User exits

 

1.1.2.2 To transformdata, you can use:

(1)    Native Oracle GoldenGateconversion functions

(2)    A user exit from the Extract orReplicat process that applies rules from an external transformation solution,then returns the manipulated data to Oracle GoldenGate.

(3)    Replicat to deliver datadirectly to an ETL solution or other transformation engine.

 

1.1.3 Data volume

The standard configuration is sufficientif:

(1)    The transaction load isconsistent and of moderate volume that is spread out more or less evenly amongall of the objects to be replicated.

(2)    There are none of thefollowing: tables that are subject to long-running transactions, tables thathave a very large number of columns that change, or tables that contain columnsfor which Oracle GoldenGate must fetch from the database (generally columnswith LOBs, columns that are affected by SQL procedures executed by Oracle GoldenGate,and columns that are not logged to the transaction log).

 

If your environment does not satisfy those conditions, consider adding one or more setsof parallel processes.

 

1.1.4 Additional information

(1)    For additional system anddatabase configuration requirements, see the Oracle GoldenGate Installation andSetup Guide for your database type.

(2)    For information aboutadditional requirements for Teradata Extract configurations, see the OracleGoldenGate Teradata Installation and Setup Guide.

(3)    For detailed instructions onconfiguring Oracle GoldenGate change capture and delivery groups, see“Configuring online change synchronization” on page 120.

(4)    For complete syntax anddescriptions of the Oracle GoldenGate commands and parameters, see the OracleGoldenGate Windows and UNIX Reference Guide.

 

1.2 Creating a data distribution configuration

Refer to Figure 12 for a visualrepresentation of the objects you will be creating.

 

Figure 12 Oracle GoldenGate configurationelements for data distribution

 

 

1.2.1 Source system

-- To configure theManager process

1. On the source, configure the Managerprocess。

2. In the Manager parameter file, use thePURGEOLDEXTRACTS parameter to control the purging of files from the localtrail.

 

--To configure theprimary Extract

3. On the source, use the ADD EXTRACT commandto create a primary Extract group. For documentation purposes, this group iscalled ext.

ADD EXTRACT <ext>, TRANLOG, BEGIN<time>, [, THREADS]

注意: Use TRANLOG as the data source option. For DB2 on Z/OS, specify thebootstrap data set (BSDS) name following TRANLOG.

 

4. On the source, use the ADD EXTTRAILcommand to create a local trail.

ADD EXTTRAIL<local_trail>, EXTRACT <ext>

注意: Use the EXTRACT argument to link this trail to the primary Extractgroup. The primary Extract group writes to this trail, and the data pump groupsread it.

 

5. On the source, use the EDIT PARAMScommand to create a parameter file for the primary Extract group. Include thefollowing parameters plus any others that apply to your database environment.

 

-- Identify the Extract group:

EXTRACT <ext>

-- Specify database login information asneeded for the database:

[SOURCEDB <dsn_1>,][USERID<user>[, PASSWORD <pw>]]

-- Specify the local trail that thisExtract writes to:

EXTTRAIL <local_trail>

-- Specify tables to be captured:

TABLE <owner>.<table>;

注意: Use EXTTRAIL to specify the local trail.

 

--To configure the datapump Extract groups

6. On the source, use the ADD EXTRACTcommand to create a data pump for each target system. For documentationpurposes, these groups are called pump_1 and pump_2.

ADD EXTRACT <pump_1>, EXTTRAILSOURCE<local_trail>, BEGIN <time>

ADD EXTRACT <pump_2>, EXTTRAILSOURCE<local_trail>, BEGIN <time>

注意: UseEXTTRAILSOURCE as the data source option, and supply the name of the localtrail.

 

7. On the source, use the ADD RMTTRAILcommand to specify a remote trail that will be created on each of the targetsystems.

ADD RMTTRAIL <remote_trail_1>,EXTRACT <pump_1>

ADD RMTTRAIL <remote_trail_2>,EXTRACT <pump_2>

注意: Use the EXTRACT argument to link each remote trail to a differentdata pump group. The linked data pump writes to this trail.

 

8. On the source, use the EDIT PARAMScommand to create a parameter file for each of the

data pumps. Include the followingparameters plus any others that apply to your

database environment.

Data pump_1

-- Identify the data pump group:

EXTRACT <pump_1>

-- Specify database login information asneeded for the database:

[SOURCEDB <dsn_1>,][USERID<user>[, PASSWORD <pw>]]

-- Specify the name or IP address of thefirst target system:

RMTHOST <target_1>, MGRPORT<portnumber>

-- Specify the remote trail on the firsttarget system:

RMTTRAIL <remote_trail_1>

-- Allow mapping, filtering, conversion orpass data through as-is:

[PASSTHRU | NOPASSTHRU]

-- Specify tables to be captured:

TABLE <owner>.<table>;

 

Data pump_2

-- Identify the data pump group:

EXTRACT <pump_2>

-- Specify database login information asneeded for the database:

[SOURCEDB <dsn_1>,][USERID<user>[, PASSWORD <pw>]]

-- Specify the name or IP address of thesecond target system:

RMTHOST <target_2>, MGRPORT<portnumber>

-- Specify the remote trail on the secondtarget system:

RMTTRAIL <remote_trail_2>

-- Allow mapping, filtering, conversion orpass data through as-is:

[PASSTHRU | NOPASSTHRU]

-- Specify tables to be captured:

TABLE <owner>.<table>;

 

NOTE :

To use PASSTHRUmode, the names of the source and target objects must be identical. No columnmapping, filtering, SQLEXEC functions, transformation, or other functions thatrequire data manipulation can be specified in the parameter file. You cancombine normal processing with pass-through processing by pairing PASSTHRU andNOPASSTHRU with different TABLE statements.

 

1.2.2 Target systems

--To configure theManager process

9. On each target, configure the Managerprocess.

10. In each Manager parameter file, use thePURGEOLDEXTRACTS parameter to control the purging of files from the trail.

 

--To configure theReplicat groups

11. On each target, create a Replicatcheckpoint table.

12. On each target, use the ADD REPLICATcommand to create a Replicat group for the remote trail on that system. Fordocumentation purposes, these groups are called rep_1 and rep_2.

 

Target_1

ADD REPLICAT <rep_1>, EXTTRAIL<remote_trail_1>, BEGIN <time>

Target_2

ADD REPLICAT <rep_2>, EXTTRAIL <remote_trail_2>,BEGIN <time>

注意:Use the EXTTRAIL argument to link the Replicat group to the correcttrail.

 

13. On each target, use the EDIT PARAMScommand to create a parameter file for the Replicat group. Use the followingparameters plus any others that apply to your database environment.

 

Target_1

-- Identify the Replicat group:

REPLICAT <rep_1>

-- State whether or not source and targetdefinitions are identical:

SOURCEDEFS <full_pathname> |ASSUMETARGETDEFS

-- Specify database login information as neededfor the database:

[TARGETDB <dsn_2>,] [USERID <userid>[, PASSWORD <pw>]]

-- Specify error handling rules:

REPERROR (<error>, <response>)

-- Specify tables for delivery:

MAP <owner>.<table>, TARGET<owner>.<table>[, DEF <template name>];

Target_2

-- Identify the Replicat group:

REPLICAT <rep_2>

-- State whether or not source and targetdefinitions are identical:

SOURCEDEFS <full_pathname> |ASSUMETARGETDEFS

-- Specify database login information asneeded for the database:

[TARGETDB <dsn_3>,] [USERID <userid>[, PASSWORD <pw>]]

-- Specify error handling rules:

REPERROR (<error>, <response>)

-- Specify tables for delivery:

MAP <owner>.<table>, TARGET<owner>.<table>[, DEF <template name>];

 

注意: You can use anynumber of MAP statements for any given Replicat group. All MAP statements for agiven Replicat group must specify the same objects that are

contained in the trail that is linked tothe group.

 

二.示例

我这里用3个节点做测试,节点1做Source DB,节点2和3做Target DB。 从GG1 发送data 到GG2和GG3。

 

DB:Oracle 11.2.0.3

OS: redhat 5.4

 

2.1 设置Manager

GGSCI (gg1) 3> edit params mgr

PORT 7809

 

2.2 设置Extract进程

GGSCI (gg1) 11> add extractext1,tranlog, begin now

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

GGSCI (gg1) 13> edit params ext1

 

GGSCI (gg1) 4> view params ext1

 

extract ext1

ENCRYPTTRAIL

userid ggate@gg1,passwordAACAAAAAAAAAAAFAPHODADQGAJVDSHPG,encryptkey default

--rmthost gg2,mgrport 7809

--rmttrail /u01/ggate/dirdat/lt

exttrail /u01/ggate/dirdat/lt

ddl include all objname dave.pdba;

table dave.pdba;

 

这里对密码进行了加密,有关加密这块,参考:

Oracle Golden Gate 系列十六 --配置 GG 安全 说明 与 示例

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

 

2.3 在Source 端配置 DataPump

因为我们要发送到2个Target,所以要配置2个Data Pump 进程。

--data pump1:

GGSCI (gg1) 49> add extractdpump,exttrailsource /u01/ggate/dirdat/lt

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

GGSCI (gg1) 5> view params dpump

extract dpump

userid ggate@gg1, password ggate

rmthost gg2, mgrport7809,compress,compressthreshold 0

rmttrail /u01/ggate/dirdat/lt

passthru

table dave.pdba;

 

--data pump2:

GGSCI (gg1) 49> add extract dpump2,exttrailsource/u01/ggate/dirdat/lt

GGSCI (gg1) 51> add rmttrail/u01/ggate/dirdat/lt, extract dpump2

GGSCI (gg1) 5> view params dpump2

extract dpump2

userid ggate@gg1, password ggate

rmthost gg3, mgrport7809,compress,compressthreshold 0

rmttrail /u01/ggate/dirdat/lt

passthru

table dave.pdba;

 

这里注意Data Pump 默认是从lt000000 开始读取trail 文件,如果是新搭建的GG 同步,那么都是从lt000000开始处理,所以没有问题,如果是后来修改称data pump,就需要根据extract 进程的错误提示信息,使用如下命令:

       GGSCI(gg1) 82> alter extract dpump,extseqno 2,extrba1965317

 

具体参考:

Oracle GoldenGate 系列十 -- 配置 DataPump process 说明 与 示例

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

 

2.4 分别在2个Target 配置Replicat

--配置checkpoint

GGSCI (gg2) 6> EDIT PARAMS ./GLOBALS

GGSCHEMA ggate

CHECKPOINTTABLE ggate.checkpoint

GGSCI (gg2) 12> dblogin useridggate@gg2,password ggate

GGSCI (gg2) 13> add checkpointtableggate.checkpoint

 

这部分,参考:

Oracle Golden Gate 系列十三 --配置GG进程检查点(checkpoint) 说明

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

 

--配置 Replicat:

GGSCI (gg2) 14> add replicatrep1,exttrail /u01/ggate/dirdat/lt, checkpointtable ggate.checkpoint

GGSCI (gg2) 2> view params rep1

replicat rep1

DECRYPTTRAIL

ASSUMETARGETDEFS

userid ggate@gg2,password ggate

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

--HANDLECOLLISIONS

ddl include all

ddlerror default ignore retryop

map dave.pdba, target dave.pdba;

 

这里面有一个数据初始化的问题,具体参考:

Oracle Golden Gate 系列九 --GG 数据初始化装载 说明 与 示例

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

 

Oracle GoldenGate 系列十二 --GG 数据初始化装载二 基于SCN 的初始化 说明 与 示例

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

 

2.5 启动相关的进程进行

 

--Source DB

GGSCI (gg1) 17> start mgr

GGSCI (gg1) 19> start ext1

 

GGSCI (gg1) 26> info dpump2

 

EXTRACT   DPUMP2    Initialized   2011-11-19 22:26   Status STOPPED

Checkpoint Lag       00:00:00 (updated 00:12:34 ago)

Log Read Checkpoint  File /u01/ggate/dirdat/lt000000

                     First Record  RBA 0

 

GGSCI (gg1) 28> info dpump

 

EXTRACT   DPUMP     Last Started 2011-11-1915:22   Status ABENDED

Checkpoint Lag       00:00:00 (updated 06:02:32 ago)

Log Read Checkpoint  File /u01/ggate/dirdat/lt000014

                     2011-11-1915:44:00.966309  RBA 1009

 

GGSCI (gg1) 29> alterextract dpump2,extseqno 14,extrba 0

EXTRACT altered.

 

GGSCI (gg1) 30> info dpump2

EXTRACT   DPUMP2    Initialized   2011-11-19 22:40   Status STOPPED

Checkpoint Lag       00:00:00 (updated 00:00:03 ago)

Log Read Checkpoint  File /u01/ggate/dirdat/lt000014

                     First Record  RBA 0

 

GGSCI (gg1) 31> start dpump

GGSCI (gg1) 32> start dpump2

 

GGSCI (gg1) 39> info all

Program    Status      Group       Lag           Time Since Chkpt

 

MANAGER    RUNNING                                           

EXTRACT    RUNNING     DPUMP       00:00:00      00:00:01   

EXTRACT    RUNNING     DPUMP2      00:00:00      00:01:37   

EXTRACT    RUNNING     EXT1        00:00:00      00:00:09  

 

 

--2个TargetDB

GGSCI (gg3) 8> start rep1

GGSCI (gg3) 10> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    RUNNING                                          

REPLICAT   RUNNING     REP1        00:00:00      00:00:04   

 

GGSCI (gg2) 15> start rep1

GGSCI (gg2) 17> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    RUNNING                                          

REPLICAT   RUNNING     REP1        00:00:00      00:00:04   

 

2.6 在Source 进行DML操作,验证同步

--Source DB

SQL> conn dave/dave;

Connected.

SQL> select count(*) from pdba;

 

 COUNT(*)

----------

  2678533

 

--Targt 1:

SQL> conn dave/dave;

Connected.

SQL> select count(*) from pdba;

 

 COUNT(*)

----------

   2678533

 

--Target 2:

SQL> conn dave/dave;

Connected.

SQL> select count(*) from pdba;

 COUNT(*)

----------

  2678533

 

--在Source 进行DML操作:

SQL> delete from pdba whererownum<1000;

999 rows deleted.

 

SQL> commit;

Commit complete.

 

SQL> select count(*) from pdba;

 COUNT(*)

----------

  2677534

 

--Target 1:

SQL> select count(*) from pdba;

 

 COUNT(*)

----------

  2677534

 

--Target 2:

SQL> select count(*) from pdba;

 

 COUNT(*)

----------

  2677534

 

同步成功。 至此GG 一对多的测试结束。

 

 

 

 

 

 

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

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:     http://blog.csdn.net/tianlesoftware

Weibo: http://weibo.com/tianlesoftware

Email:   tianlesoftware@gmail.com

Skype: tianlesoftware

 

-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----

DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

DBA 超级群:63306533(满);  DBA4 群:83829929(满) DBA5群: 142216823(满) 

DBA6 群:158654907(满)   DBA7 群:69087192(满)  DBA8 群:172855474

DBA 超级群2:151508914  DBA9群:102954821     聊天 群:40132017(满)

posted @ 2011-11-19 23:01  生活不是用来挥霍的  阅读(245)  评论(0编辑  收藏  举报