goldegate根據實際要求進行對映到多個不同表

gaopengtttt發表於2014-03-07
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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-1103238/,如需轉載,請註明出處,否則將追究法律責任。

相關文章