• 博客访问: 2713966
  • 博文数量: 617
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 13:03
  • 认证徽章:
个人简介

10年ORACLE MYSQL DBA

文章分类

全部博文(617)

分类: Oracle

2014-03-07 17:05:32

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
阅读(3213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册