OGG如何按照要求拆分表。
例如,我们源端有一个表比如叫做TESTR
我们需要按照一定的过滤条件进行拆分
1、我们需要目标端一个同样的表保存全部TESTR的数据
2、我们需要目标端一个不同的表保存IT=2的数据
3、我们需要目标端一个不同的表保存IT=3的数据
注意如果在以前的EXTRACT和REPLICAT中有相应的星号的配置我们需要排除掉这个表
如下:
EXTRACT端
tableexclude test.testr
replicat端
MAPEXCLUDE test.testr;
然后我们配置EXTRACT 端环境
登录数据库建立测试表
SQL> create table testr (it int,im int);
Table created
加入主键
SQL> alter table testr add constraint PK_IT primary key (it);
Table altered
ggsci设置日志补足功能
GGSCI (test1) 8> add trandata test.testr
然后设置REPLICAT端环境
登录数据库建立测试表
SQL> create table testr (it int,im int);
Table created
SQL> create table testr1 (it int,im int);
Table created
SQL> create table testr2 (it int,im int);
Table created
SQL> alter table testr add constraint PK_IT primary key (it);
Table altered
SQL> alter table testr1 add constraint PK_IT1 primary key (it);
Table altered
SQL> alter table testr2 add constraint PK_IT2 primary key (it);
Table altered
这样环境就设置好了。
接下来我们配置EXTRACT进程的参数文件
extract ey03
setenv (ORACLE_SID=ora10g)
userid ggs_admin,password ggs_admin
exttrail ./dirdat/sc
warnlongtrans 2h
table test.testr;
在GGSCI中增加这个extract进程
GGSCI (test1) 2> add extract ey03,tranlog,threads 1,begin now
增加extract 的trail file
add exttrail ./dirdat/sc, extract ey03 megabytes 50
编辑extract的PUMP进程参数文件
接下来编辑PUMP参数文件
eidt params py03
extract py03
passthru
rmthost 192.168.190.7, mgrport 7809
rmttrail ./dirdat/tc
table test.testr;
ADD EXTRACT py03, EXTTRAILSOURCE ./dirdat/sc
然后指定trail file放到哪里
add rmttrail ./dirdat/tc,extract py03 megabytes 50
启动ey03,py03
start *
这样我们新配置得就传输到目标端了
然后我们配置3个REPLICAT进程来分别获取不同的数据到不同的表
配置第一个replicat进程
然后配置我们replicat的参数文件
replicat rt03
setenv (ORACLE_SID=OLAP)
userid ggs_admin, password ggs_admin
discardfile ./dirrpt/rolap03.dsc,purge
assumetargetdefs
map test.testr, target test.testr;
增加REPLIACT进程
add replicat rt03,exttrail ./dirdat/tc, checkpointtable ggs_admin.ggschkpt
当然我们需要配置额外的2个REPLICAT进程来完成我们不同的应用
编辑参数
replicat rt04
setenv (ORACLE_SID=OLAP)
userid ggs_admin, password ggs_admin
discardfile ./dirrpt/rolap04.dsc,purge
assumetargetdefs
map test.testr, target test.testr1 FILTER ( it=2);
增加REPLIACT进程
add replicat rt04,exttrail ./dirdat/tc, checkpointtable ggs_admin.ggschkpt
注意一下这里的FILTER过滤是留下=2的记录而不是过滤掉
然后启动
就行了
接下来的=3的就一样的操作就行了,当然记得他们的来源是TC这一个队列,虽然我们可以配置多个EXTRACT进程来抽取
但是一般来说EXTRACT的性能是没有问题,同时多个EXTRACT队列之间是不保证完全一致的,所以同一个应用的抽取进程
最好是一个。
测试
源端
SQL> insert into testr values(2,2);
1 row inserted
SQL> commit;
Commit complete
SQL> insert into testr values(3,2);
1 row inserted
SQL> commit;
目标
SQL> select * from testr1;
IT IM
--------------------------------------- ---------------------------------------
2 2
SQL> select * from testr;
IT IM
--------------------------------------- ---------------------------------------
2 2
3 2
通过
当然此处你还可以过滤掉只进程
FILTER (ON UPDATE, ON DELETE, AMOUNT > 1000);
Commit complete
例如,我们源端有一个表比如叫做TESTR
我们需要按照一定的过滤条件进行拆分
1、我们需要目标端一个同样的表保存全部TESTR的数据
2、我们需要目标端一个不同的表保存IT=2的数据
3、我们需要目标端一个不同的表保存IT=3的数据
注意如果在以前的EXTRACT和REPLICAT中有相应的星号的配置我们需要排除掉这个表
如下:
EXTRACT端
tableexclude test.testr
replicat端
MAPEXCLUDE test.testr;
然后我们配置EXTRACT 端环境
登录数据库建立测试表
SQL> create table testr (it int,im int);
Table created
加入主键
SQL> alter table testr add constraint PK_IT primary key (it);
Table altered
ggsci设置日志补足功能
GGSCI (test1) 8> add trandata test.testr
然后设置REPLICAT端环境
登录数据库建立测试表
SQL> create table testr (it int,im int);
Table created
SQL> create table testr1 (it int,im int);
Table created
SQL> create table testr2 (it int,im int);
Table created
SQL> alter table testr add constraint PK_IT primary key (it);
Table altered
SQL> alter table testr1 add constraint PK_IT1 primary key (it);
Table altered
SQL> alter table testr2 add constraint PK_IT2 primary key (it);
Table altered
这样环境就设置好了。
接下来我们配置EXTRACT进程的参数文件
extract ey03
setenv (ORACLE_SID=ora10g)
userid ggs_admin,password ggs_admin
exttrail ./dirdat/sc
warnlongtrans 2h
table test.testr;
在GGSCI中增加这个extract进程
GGSCI (test1) 2> add extract ey03,tranlog,threads 1,begin now
增加extract 的trail file
add exttrail ./dirdat/sc, extract ey03 megabytes 50
编辑extract的PUMP进程参数文件
接下来编辑PUMP参数文件
eidt params py03
extract py03
passthru
rmthost 192.168.190.7, mgrport 7809
rmttrail ./dirdat/tc
table test.testr;
ADD EXTRACT py03, EXTTRAILSOURCE ./dirdat/sc
然后指定trail file放到哪里
add rmttrail ./dirdat/tc,extract py03 megabytes 50
启动ey03,py03
start *
这样我们新配置得就传输到目标端了
然后我们配置3个REPLICAT进程来分别获取不同的数据到不同的表
配置第一个replicat进程
然后配置我们replicat的参数文件
replicat rt03
setenv (ORACLE_SID=OLAP)
userid ggs_admin, password ggs_admin
discardfile ./dirrpt/rolap03.dsc,purge
assumetargetdefs
map test.testr, target test.testr;
增加REPLIACT进程
add replicat rt03,exttrail ./dirdat/tc, checkpointtable ggs_admin.ggschkpt
当然我们需要配置额外的2个REPLICAT进程来完成我们不同的应用
编辑参数
replicat rt04
setenv (ORACLE_SID=OLAP)
userid ggs_admin, password ggs_admin
discardfile ./dirrpt/rolap04.dsc,purge
assumetargetdefs
map test.testr, target test.testr1 FILTER ( it=2);
增加REPLIACT进程
add replicat rt04,exttrail ./dirdat/tc, checkpointtable ggs_admin.ggschkpt
注意一下这里的FILTER过滤是留下=2的记录而不是过滤掉
然后启动
就行了
接下来的=3的就一样的操作就行了,当然记得他们的来源是TC这一个队列,虽然我们可以配置多个EXTRACT进程来抽取
但是一般来说EXTRACT的性能是没有问题,同时多个EXTRACT队列之间是不保证完全一致的,所以同一个应用的抽取进程
最好是一个。
测试
源端
SQL> insert into testr values(2,2);
1 row inserted
SQL> commit;
Commit complete
SQL> insert into testr values(3,2);
1 row inserted
SQL> commit;
目标
SQL> select * from testr1;
IT IM
--------------------------------------- ---------------------------------------
2 2
SQL> select * from testr;
IT IM
--------------------------------------- ---------------------------------------
2 2
3 2
通过
当然此处你还可以过滤掉只进程
FILTER (ON UPDATE, ON DELETE, AMOUNT > 1000);
Commit complete