最近有客户需求,a库在内网,b库在外网,希望同步a库中几个基础业务表的每个表的几个字段同步到b库中,采用a–>c–>b的方式来实现同步(c同时接通内外网)
源端数据库准备
启动归档模式,开启强制日志和辅助日志,创建测试用户/表,ogg用户
SQL> create user xifenfei identified by xifenfei;
User created.
SQL> grant dba to xifenfei;
Grant succeeded.
SQL> conn xifenfei/xifenfeiConnected.SQL> create table t_xifenfei as select * from dba_objects;
Table created.
SQL> alter table t_xifenfei add constraint pk_t_xifenfei primary key(object_id);
Table altered.
SQL> archive log list;Database log mode No Archive Mode
Automatic archival DisabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 9
Current log sequence 11
SQL> shutdown immediate;Database closed.
Database dismounted.
ORACLE instance shut down.SQL> startup mount;ORACLE instance started.Total System Global Area 901775360 bytes
Fixed Size 2024944 bytes
Variable Size 239077904 bytes
Database Buffers 658505728 bytes
Redo Buffers 2166784 bytesDatabase mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> alter database force logging;
Database altered.
SQL> alter database add supplemental log data;
Database altered.
SQL> alter system switch logfile;
System altered.SQL> create user ogg identified by oracle;
User created.
SQL> grant dba to ogg;
Grant succeeded.
|
配置mgr进程
[oracle@xffdbrh5 ogg]$ export PATH=/u01/ogg:$PATH
[oracle@xffdbrh5 ogg]$ export LD_LIBRARY_PATH=/u01/ogg:$ORACLE_HOME/lib
[oracle@xffdbrh5 ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.5_02 16363018 OGGCORE_11.2.1.0.6_PLATFORMS_130301.1500_FBOLinux, x64, 64bit (optimized), Oracle 10g on Mar 1 2013 19:04:05Copyright (C) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
GGSCI (xffdbrh5) 1> create subdirsCreating subdirectories under current directory /u01/ogg
Parameter files /u01/ogg/dirprm: already exists
Report files /u01/ogg/dirrpt: created
Checkpoint files /u01/ogg/dirchk: created
Process status files /u01/ogg/dirpcs: created
SQL script files /u01/ogg/dirsql: created
Database definitions files /u01/ogg/dirdef: created
Extract data files /u01/ogg/dirdat: created
Temporary files /u01/ogg/dirtmp: created
Stdout files /u01/ogg/dirout: created
GGSCI (xffdbrh5) 2> edit param mgrport 7839DYNAMICPORTLIST 7840-7850AUTOSTART EXTRACT *AUTORESTART EXTRACT *PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 7
LAGREPORTHOURS 1LAGINFOMINUTES 30LAGCRITICALMINUTES 45GGSCI (xffdbrh5) 3> dblogin userid ogg, password oracleSuccessfully logged into database.GGSCI (xffdbrh5) 4> add checkpointtable ogg.ggs_checkpointSuccessfully created checkpoint table ogg.ggs_checkpoint.GGSCI (xffdbrh5) 5> EDIT PARAMS ./GLOBALS
ogg.ggs_checkpointGGSCI (xffdbrh5) 6> start mgrManager started.GGSCI (xffdbrh5) 7> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER RUNNING |
配置extract进程
GGSCI (xffdbrh5) 3> dblogin userid ogg, password oracleSuccessfully logged into database.GGSCI (xffdbrh5) 4> add trandata xifenfei.t_xifenfeiLogging of supplemental redo data enabled for table XIFENFEI.T_XIFENFEI.
GGSCI (xffdbrh5) 5> add extract ext_1, tranlog, begin now, threads 1EXTRACT added.GGSCI (xffdbrh5) 6> add EXTTRAIL ./dirdat/r1, extract ext_1,megabytes 100
EXTTRAIL added.GGSCI (xffdbrh5) 7> edit param ext_1EXTRACT ext_1userid ogg,password oracleREPORTCOUNT EVERY 1 MINUTES, RATEnumfiles 5000DISCARDFILE ./dirrpt/ext_1.dsc,APPEND,MEGABYTES 1024
DISCARDROLLOVER AT 3:00exttrail ./dirdat/r1,megabytes 100
dynamicresolutionTRANLOGOPTIONS DISABLESUPPLOGCHECK --bug 16857778TABLE xifenfei.t_xifenfei, COLS (OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID);GGSCI (xffdbrh5) 8> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER RUNNING EXTRACT STOPPED EXT_1 00:00:00 00:00:22 GGSCI (xffdbrh5) 9> start ext_1Sending START request to MANAGER ...EXTRACT EXT_1 startingGGSCI (xffdbrh5) 10> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER RUNNING EXTRACT RUNNING EXT_1 00:01:18 00:00:00 |
配置pump data进程
add extract dpe_1,exttrailsource ./dirdat/r1
add rmttrail ./dirdat/t1, extract dpe_1
GGSCI (xffdbrh5) 1> edit param dpe_1extract dpe_1dynamicresolutionpassthrurmthost 192.168.137.251, mgrport 7839, compressrmttrail ./dirdat/t1
numfiles 5000TABLE xifenfei.t_xifenfei;GGSCI (xffdbrh5) 2> start dpe_1Sending START request to MANAGER ...EXTRACT DPE_1 startingGGSCI (xffdbrh5) 3> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER RUNNING EXTRACT RUNNING DPE_1 00:00:00 00:16:47 EXTRACT RUNNING EXT_1 00:00:00 00:00:07 |
目标端数据库准备
[oracle@xifenfei ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Feb 13 00:40:19 2014
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create user ogg identified by oracle;
User created.
SQL> grant dba to ogg;
Grant succeeded.
SQL> create user xff identified by xifenfei;
User created.
SQL> grant dba to xff;
Grant succeeded.
SQL> conn xff/xifenfeiConnected.SQL> create database link syc_data
2 connect to ogg identified by oracle
3 using '(DESCRIPTION =
4 (ADDRESS_LIST =
5 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.252)(PORT = 1521))
6 )
7 (CONNECT_DATA =
8 (SERVER = DEDICATED)
9 (SERVICE_NAME = ora10g)
10 )
11 )';
Database link created.
SQL> select count(*) from xifenfei.t_xifenfei@syc_data;
COUNT(*)
---------- 9917
SQL> SELECT CURRENT_SCN FROM V$DATABASE@syc_data;
CURRENT_SCN----------- 793069
SQL> create table xff.t_xff as select OWNER, OBJECT_NAME, SUBOBJECT_NAME,
2 > OBJECT_ID from xifenfei.t_xifenfei@syc_data AS OF SCN 793069;
Table created.
SQL> alter table xff.t_xff add constraint pk_t_xff primary key(object_id);
Table altered.
|
目标端mgrp配置
[oracle@xifenfei ogg]$export LD_LIBRARY_PATH=/home/oracle/amdu:$ORACLE_HOME/lib:/u01/oracle/oradata/ogg
[oracle@xifenfei ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBOLinux, x86, 32bit (optimized), Oracle 10g on Apr 23 2012 07:06:02Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (xifenfei) 8> edit param mgrport 7839DYNAMICPORTLIST 7840-7850PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 7
autorestart extract *, waitminutes 1, retries 60autorestart replicat *, waitminutes 1, retries 60LAGREPORTHOURS 1LAGINFOMINUTES 30LAGCRITICALMINUTES 45GGSCI (xifenfei) 12> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER STOPPED GGSCI (xifenfei) 13> create subdirsCreating subdirectories under current directory /u01/oracle/oradata/ogg
Parameter files /u01/oracle/oradata/ogg/dirprm: already exists
Report files /u01/oracle/oradata/ogg/dirrpt: already exists
Checkpoint files /u01/oracle/oradata/ogg/dirchk: already exists
Process status files /u01/oracle/oradata/ogg/dirpcs: already exists
SQL script files /u01/oracle/oradata/ogg/dirsql: already exists
Database definitions files /u01/oracle/oradata/ogg/dirdef: already exists
Extract data files /u01/oracle/oradata/ogg/dirdat: already exists
Temporary files /u01/oracle/oradata/ogg/dirtmp: already exists
Stdout files /u01/oracle/oradata/ogg/dirout: already exists
GGSCI (xifenfei) 2> dblogin userid ogg, password oracleSuccessfully logged into database.GGSCI (xifenfei) 3> add checkpointtable ogg.ggs_checkpoint Successfully created checkpoint table ogg.ggs_checkpoint.GGSCI (xifenfei) 4> EDIT PARAMS ./GLOBALS
checkpointtable ogg.ggs_checkpointGGSCI (xifenfei) 5> start mgrManager started.GGSCI (xifenfei) 6> add replicat rep_1,exttrail ./dirdat/t1,checkpointtable ogg.ggs_checkpoint
REPLICAT added.GGSCI (xifenfei) 7> edit params rep_1 REPLICAT rep_1USERID ogg,PASSWORD oracleREPORTCOUNT EVERY 30 MINUTES, RATEREPERROR DEFAULT, ABENDnumfiles 5000assumetargetdefsDISCARDFILE ./dirrpt/rep_1.dsc, APPEND, MEGABYTES 1000
DISCARDROLLOVER AT 3:00ALLOWNOOPUPDATESMAP xifenfei.t_xifenfei, TARGET xff.t_xff;GGSCI (xifenfei) 8> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER RUNNING REPLICAT STOPPED REP_1 00:00:00 00:01:45 GGSCI (xifenfei) 9> start rep_1,aftercsn 793069Sending START request to MANAGER ...REPLICAT REP_1 startingGGSCI (xifenfei) 10> info allProgram Status Group Lag at Chkpt Time Since ChkptMANAGER RUNNING REPLICAT RUNNING REP_1 00:00:00 00:00:01 |
测试数据库同步
--源端库SQL> desc t_XIFENFEI
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
SQL> update t_XIFENFEI set owner='www.xifenfei.com' where rownum<100;
99 rows updated.
SQL> commit;
Commit complete.
--目标端库SQL> desc xff.t_xff
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
SQL> select count(*) from xff.t_xff where owner='www.xifenfei.com';
COUNT(*)
---------- 99
--源端库SQL> delete from t_XIFENFEI where owner='www.xifenfei.com';
99 rows deleted.
SQL> commit;
Commit complete.
--目标端SQL> select count(*) from xff.t_xff where owner='www.xifenfei.com';
COUNT(*)
---------- 0
--源端库SQL> insert into xifenfei.t_xifenfei(owner,object_id) values('www.xifenfei.com',1);
1 row created.SQL> commit;
Commit complete.
--目标端库SQL> select count(*) from xff.t_xff where owner='www.xifenfei.com';
COUNT(*)
---------- 1
SQL> select * from xff.t_xff where owner='www.xifenfei.com';
OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID-------------------- ------------------- ------------------------------ ----------www.xifenfei.com |
这里实现部分列同步,主要在extract端使用COLS捕获需要列,使用ctas结合dblink,flashback query实现表测试后.