简单说明:
本篇博文实验源表和目标表列名不同的环境下的OGG复制
在博文《19. Setting up a GoldenGate replication between tables with different structures using defgen》
实验了目标库和源库表结构不同,表名不同和表列序不同的复制,本次实验是该实验的补充
依据《11. Setting up a simple GoldenGate replication confguration between two single node databases》
部署试验环境模拟本次实验,源端和目标端均只部署完MGR即可开始本次实验
注意在Oracle 11.2.0.4 之后需要打开ENABLE_GOLDENGATE_REPLICATION参数:
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
目标库修改表列名:
su - oracle
sqlplus scott/tiger
ALTER TABLE EMP RENAME COLUMN SAL TO SALARY;
ALTER TABLE EMP RENAME COLUMN COMM TO COMMISSION;
exit
实验步骤:
1° 源端创建defgen配置文件:
su - oracle
cd /ggs/dirprm
cat >defs.prm<<EOF
DEFSFILE ./dirdef/defs.def
USERID ggs, PASSWORD ggs
TABLE SCOTT.EMP;
TABLE SCOTT.DEPT;
TABLE SCOTT.BONUS;
TABLE SCOTT.SALGRADE;
EOF
cd /ggs
./defgen paramfile ./dirprm/defs.prm
# 将生成的表结构文件复制到目标端对应位置
scp ./dirdef/defs.def 192.168.77.11:/ggs/dirdef
2° 源端配置抽取和发送进程配置文件:
su - oracle
cd /ggs/dirprm
cat >EGGTEST1.prm<<EOF
EXTRACT EGGTEST1
USERID ggs, PASSWORD ggs
EXTTRAIL /ggs/dirdat/st
TABLE SCOTT.*;
EOF
cat >PGGTEST1.prm<<EOF
EXTRACT PGGTEST1
USERID ggs, PASSWORD ggs
RMTHOST 192.168.77.11, MGRPORT 8809
RMTTRAIL /ggs/dirdat/rt
TABLE SCOTT.*;
EOF
3° 目标端配置应用进程配置文件:
su - oracle
cd /ggs/dirprm
cat >RGGTEST1.prm<<EOF
REPLICAT RGGTEST1
USERID ggs, PASSWORD ggs
DISCARDFILE /ggs/dirrpt/RGGTEST1.dsc, append, MEGABYTES 500
SOURCEDEFS ./dirdef/defs.def
-- 使用参数 SOURCEDEFS 指定表结构文件
MAP SCOTT.EMP, TARGET SCOTT.EMP, COLMAP(USEDEFAULTS, "SAL"="SALARY","COMM"="COMMISSION");
-- 使用COLMAP子句,指定不同与原表的列名的一一对应关系,列名需要用双引号引起来
MAP SCOTT.*, TARGET SCOTT.*;
EOF
4° 源端和目标端进程添加和启动:
# 源端操作:
su - oracle
cd /ggs
./ggsci
ADD EXTRACT EGGTEST1, TRANLOG, BEGIN NOW
ADD EXTTRAIL /ggs/dirdat/st, EXTRACT EGGTEST1
ADD EXTRACT PGGTEST1, EXTTRAILSOURCE /ggs/dirdat/st
ADD RMTTRAIL /ggs/dirdat/rt, EXTRACT PGGTEST1
START EXTRACT EGGTEST1
STATUS EXTRACT EGGTEST1
START EXTRACT PGGTEST1
STATUS EXTRACT PGGTEST1
exit
# 目标端操作:
su - oracle
cd /ggs
./ggsci
DBLOGIN, USERID ggs PASSWORD ggs
ADD CHECKPOINTTABLE ggs.rggtest1_ckpt
ADD REPLICAT RGGTEST1, EXTTRAIL /ggs/dirdat/rt, CHECKPOINTTABLE ggs.rggtest1_ckpt
START REPLICAT RGGTEST1
STATUS REPLICAT RGGTEST1
exit
5° 验证:
# 源库操作:
sqlplus scott/tiger
insert into emp values(9999,'vincent','vincent',7788,sysdate,100,100,10);
commit;
exit
# 目标库验证:
sqlplus scott/tiger
select * from EMP where empno=9999;
exit
# 验证通过
另外的几种映射方法:
Source environment mapping
源端抽取进程配置映射,当一个源端配置多个目标端时使用
EXTRACT EGGTEST1
USERID ggs, PASSWORD ggs
EXTTRAIL /ggs/dirdat/st
TARGETDEFS ./dirdef/defs.def
-- 指定目标端的defgen文件位置
TABLE SCOTT.EMP, TARGET SCOTT.EMP, COLMAP(USEDEFAULTS, "SAL"="SALARY","COMM"="COMMISSION");
TABLE SCOTT.*, TARGET SCOTT.*;
Defining global mappings
配置全局映射,当多个表的SAL都要映射成SALARY等这类需求存在时使用
在源端抽取或目标端应用配置文件中配置都可
COLMATCH NAMES SALARY = SAL
COLMATCH NAMES COMMISSION = COMM
-- 使用 COLMATCH 配置列名映射关系
MAP SCOTT.EMP, TARGET SCOTT.EMP COLMAP(USEDEFAULTS);
MAP SCOTT.*, TARGET SCOTT.* COLMAP(USEDEFAULTS);
ADDITIONAL TABLE MAP STATEMENTS GO HERE
-- 表明这里有额外的MAP关系,对所有MAP的表都适用
Defining mappings using prefx/suffx
忽略列前缀的列MAP
COLMATCH PREFIX DWH_
COLMATCH SUFFIX _TGT
-- 使用 COLMATCH 忽略列名的前缀 DWH_ 和列名的后缀 _TGT
-- 实现 DWH_COL 和 COL 以及 COL_TGT 和 COL 的自动匹配
-- 无论这些前缀后缀出现在源端还是目标端
MAP SCOTT.EMP, TARGET SCOTT.EMP COLMAP(USEDEFAULTS);
ADDITIONAL TABLE MAP STATEMENTS GO HERE
[TOC]