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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python如何對多個sheet表進行整合?Python
- django | 根據 model 建立對應的表Django
- excel將一個工作表根據條件拆分成多個工作簿Excel
- JavaScript 根據物件鍵值進行排序JavaScript物件排序
- 將多個JSON欄位對映到單個Java欄位JSONJava
- 根據emp,dept,salgrade表進行的sql查詢語句(1)SQL
- 多語言網站 根據使用者語言進行跳轉網站
- 在 NGINX 中根據使用者真實 IP 進行限制Nginx
- Linux埠對映是什麼?如何進行埠對映?Linux
- Pandas根據篩選條件對指定excel列進行篩選!神器!Excel
- 根據年月份分表
- Storm框架:如何根據業務條件選擇不同的bolt進行下發訊息ORM框架
- 根據工程實踐專案進行需求分析和概念原型建模原型
- 報表也可以根據單元格計算後結果進行排序排序
- 二維陣列根據欄位進行排序陣列排序
- imtoken中如何進行EOS對映
- 根據使用者的不同登入不同的頁面
- golang將切片或陣列根據某個欄位進行分組Golang陣列
- vue-cli 根據不同的環境打包Vue
- Gradle根據引數配置不同的依賴Gradle
- SqlServer根據特定欄位分組後,對需要欄位進行分組拼接SQLServer
- MyBatis從入門到精通(十一):MyBatis高階結果對映之一對多對映MyBatis
- Mysql利用Like支援根據匹配度進行查詢MySql
- 二維陣列根據鍵的值進行排序陣列排序
- 請問在一個介面內怎麼根據請求方式對引數進行分別驗證呢?
- mybatis 根據多個id查詢資料 foreach標籤MyBatis
- sql根據多個欄位查詢重複記錄SQL
- nginx反向代理實現不同域名對映到同一臺伺服器的相同埠Nginx伺服器
- Qt設定根據編譯器不同連結不同的lib庫QT編譯
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- mybatis 同一張表的資料被對映到 一個結果物件例項 的 多個屬性物件 上MyBatis物件
- .NET CORE 中使用AutoMapper進行物件對映APP物件
- SAP RETAIL 如何根據分配表查到根據它建立的採購訂單?AI
- 根據給定的字串,修改一個多層巢狀物件對應的屬性值字串巢狀物件
- MyBatis 根據資料表反向生成 java 實體類等MyBatisJava
- NC65對單表單據查詢的結果進行排序排序
- Classy:根據資料庫表在執行時建立類/模型資料庫模型
- WPF TextBlock根據值顯示不同的內容或格式BloC
- SQL server根據表名查詢表主鍵SQLServer