Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

351

积分

0

好友

8

主题
1#
发表于 2012-7-19 16:14:14 | 查看: 8944| 回复: 1
源表结构:
id,vl

目标表结构:
id,vl1

1)案例1:

配置文件如下:

extract extl
userid [email=ggate@ggdb01,password]ggate@ggdb01,password[/email] ggate
rmthost 10.1.19.90, mgrport 7801
rmttrail /home/oracle/gg_trail/rl
dynamicresolution
ddl include objname cgb.* objtype 'table'
--DDL INCLUDE ALL OPTYPE CREATE OBJTYPE 'table'
--DDLERROR RESTARTSKIP 100000 SKIPTRIGGERERROR 100000
DDLOPTIONS ADDTRANDATA,REPORT
table cgb.*;
sequence cgb.*;

replicat repl
SETENV (ORACLE_HOME = "/u01/app/oracle/app/product/11.2.0/db")
SETENV (ORACLE_SID = "ggdb02")
userid [email=ggate@ggdb02,password]ggate@ggdb02,password[/email] ggate
assumetargetdefs
SOURCEDEFS /home/oracle/gg_def/j1.def
reperror default,discard
discardfile /home/oracle/gg_log/repsz.dsc,append,megabytes 100
ddl include objname cgb.* objtype 'table'
--DDL INCLUDE ALL OPTYPE CREATE OBJTYPE 'table'
DDLERROR DEFAULT IGNORE
DDLOPTIONS REPORT
--MAP cgb.j1, TARGET cgb.j1,
--COLMAP (usedefaults,
--vl1 = vl);
map cgb.*, target cgb.*;

从上面可以看出配置文件是存在问题的,源表和目标表的第二个字段名称不一样,但配置文件确指定了assumetargetdefs选项。

在源端数据库插入一条记录:
insert into cgb.j1(id,vl) values(1,'a');
此时查看目标端的数据库记录:
select id,vl1 from cgb,j1 where id=1;
结果发现一条id=1,vl1=null的记录

2)案例2:

配置文件如下:

replicat repl
SETENV (ORACLE_HOME = "/u01/app/oracle/app/product/11.2.0/db")
SETENV (ORACLE_SID = "ggdb02")
userid [email=ggate@ggdb02,password]ggate@ggdb02,password[/email] ggate
assumetargetdefs
--SOURCEDEFS /home/oracle/gg_def/j1.def
reperror default,discard
discardfile /home/oracle/gg_log/repsz.dsc,append,megabytes 100
ddl include objname cgb.* objtype 'table'
--DDL INCLUDE ALL OPTYPE CREATE OBJTYPE 'table'
DDLERROR DEFAULT IGNORE
DDLOPTIONS REPORT
--MAP cgb.j1, TARGET cgb.j1,
--COLMAP (usedefaults,
--vl1 = vl);
map cgb.*, target cgb.*;

和上一个案例不同的地方只是取消了SOURCEDEFS

在源端数据库插入一条记录:
insert into cgb.j1(id,vl) values(1,'a');


此时查看目标端的数据库记录:
select id,vl1 from cgb,j1 where id=1;
这次更加奇怪了,结果发现一条id=1,vl1=a的记录,也就是记录完全正确的同步过去了


问题:
为什么列名错误映射也能成功插入数据,比如insert into cgb.j1(id,vl1) values(1,'a')这条记录,按rep的配置(assumetargetdefs)目标端应该映射为insert into cgb.j1(id,vl1) values(1,'a')才对吧,这样在目标端执行应该会报错才对啊,为什么还能成功插入呢?
2#
发表于 2012-7-19 16:48:24
谢谢,这个第一个案例可以说得通,但是第二个案例说不通哦...

回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-5-13 07:36 , Processed in 0.046649 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569