|
原帖由 Toms_zhang 于 2010-12-15 22:05 发表 ![]()
针对你的这个需求,可以考虑如下的配置:
需求分析
" 源上有两个表,一个主一个备,正常情况下在主表,处理完后到备表,处理的方式是先插备表然后删主表。 源系统上的主表和备表对应目标系统上的同一个表,这样就目标系统上就不能建立和原主表/备表一样的唯一索引, 如果建立唯一索引,那么在源上进行数据迁移,目标端将出现唯一性问题.
因此,puber考虑在目标表新增一个标志字段,源系统上的主表的数据标志为为1,备表过来的数据标志为2, 这样就才不会出现数据无法插入。
"
模拟表结构
test_s1代表源端主表
create table test_s1
(a int,
b varchar2(32),
c int,
constraint pk_test_s1 primary key(a,b)
);
test_s1代表源端备表
create table test_s2
(a int,
b varchar2(32),
c int,
constraint pk_test_s2 primary key(a,b)
);
test_t代表目标端对应表
create table test_t
(flag char(1), --新加一个区分主备表数据的字段
a int,
b varchar2(32),
c int,
constraint pk_test_t primary key(flag,a,b)
);
GG配置
因为源和目标的结构不一定,所以需要定义data definitions,我这里定义了source definitions,在目标端的复制进程中通过SOURCEDEFS引用,这个参数具体怎么用,请参见Administrator's Guide doc.
声明:下面这个配置,对DML操作是没有问题的,但对truncate操作是有些问题的,因为多表对一表的配置,所以要想支持truncate操作,必须在复制进程中将truncate操作转换为delete操作才可以,本配置中未做设置。
源端的Extract进程
。。。(略)
TABLE STUDY.TEST_S*;
目标端的配置
。。。
SOURCEDEFS ./dirdef/test_s.DEF
。。。
TABLE STUDY.test_s1, TARGET STUDY.test_t, COLMAP (USEDEFAULTS, flag="1" , keycols (flag, a, b);
TABLE STUDY.test_s2, TARGET STUDY.test_t, COLMAP (USEDEFAULTS, flag="2" , keycols (flag, a, b);
你按照如上的思路修改配置,重新测试看看能否正常工作!
再次说明,以上配置example仅仅针对你的本次需求!
有空试试 |
|