goldegate根據實際要求進行對映到多個不同表
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-1103238/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javascript實現根據點選按鈕的不同進行不同的操作JavaScript
- Python如何對多個sheet表進行整合?Python
- 根據源庫表空間實際使用建立表空間指令碼指令碼
- django | 根據 model 建立對應的表Django
- JPA(hibernate)一對多根據多的一方某屬性進行過濾查詢
- 根據條件動態更新不同表的資料
- excel將一個工作表根據條件拆分成多個工作簿Excel
- jQuery根據多個屬性匹配元素jQuery
- JavaScript 根據物件鍵值進行排序JavaScript物件排序
- 根據陣列中物件進行排序陣列物件排序
- nginx 根據IP 進行灰度釋出Nginx
- django根據不同git分支載入不同配置DjangoGit
- slick對超過22個屬性的表進行對映的兩種辦法
- 多語言網站 根據使用者語言進行跳轉網站
- 將多個JSON欄位對映到單個Java欄位JSONJava
- 使用SQLLOADER將每行資料根據條件插入不同表SQL
- 在 NGINX 中根據使用者真實 IP 進行限制Nginx
- 根據emp,dept,salgrade表進行的sql查詢語句(1)SQL
- Storm框架:如何根據業務條件選擇不同的bolt進行下發訊息ORM框架
- Pandas根據篩選條件對指定excel列進行篩選!神器!Excel
- 根據工程實踐專案進行需求分析和概念原型建模原型
- 二維陣列根據欄位進行排序陣列排序
- 報表也可以根據單元格計算後結果進行排序排序
- golang將切片或陣列根據某個欄位進行分組Golang陣列
- EF:根據實體類生成表結構SQLSQL
- vue-cli 根據不同的環境打包Vue
- SqlServer根據特定欄位分組後,對需要欄位進行分組拼接SQLServer
- 二維陣列根據鍵的值進行排序陣列排序
- Mysql利用Like支援根據匹配度進行查詢MySql
- 根據表查詢索引資訊索引
- 根據父表查詢子表
- MyBatis從入門到精通(十一):MyBatis高階結果對映之一對多對映MyBatis
- js根據不同的時間段輸出不同的語句JS
- hibernate之關於使用連線表實現多對一關聯對映
- sql根據多個欄位查詢重複記錄SQL
- 請問在一個介面內怎麼根據請求方式對引數進行分別驗證呢?
- Gradle根據引數配置不同的依賴Gradle
- 根據需要動態include不同的檔案 (轉)