共計 3716 個字符,預(yù)計需要花費 10 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān) ogg 中關(guān)于 handlecollisions 的示例分析,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
handlecollisions
實驗環(huán)境參數(shù)
GGSCI (pc6 as ogg@hyyk) 11 edit params ext_s1
extract ext_s1
setenv (NLS_LANG= AMERICAN_AMERICA.AL32UTF8)
setenv (ORACLE_SID= hyyk)
userid ogg,password oracle
gettruncates
exttrail /u01/app/oggs/dirdat/ss
table sender.*;
GGSCI (pc6 as ogg@hyyk) 13 edit params pump_s1
extract pump_s1
passthru
userid ogg,password oracle
rmthost 192.168.1.80,mgrport 7809
rmttrail /u01/app/oggd/dirdat/sd
table sender.*;
GGSCI (ogg-80) 5 edit params rep_s1
replicat rep_s1
setenv(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv(ORACLE_SID= ogg)
userid ogg,password oracle
–handlecollisions
ASSUMETARGETDEFS
–SOURCEDEFS /u01/app/oggd/dirdef/test.def
DISCARDFILE ./dirrpt/rorabb.dsc,PURGE
userid ogg,password oracle
map sender.tb21,target receiver.tb21;
1、源和目標建表(當然源和目標都要有主鍵)
源:
create table tb21(col1 int primary key, col2 int);
insert into tb21 values(1,1);
insert into tb21 values(2,1);
insert into tb21 values(3,1);
insert into tb21 values(4,1);
commit;
查看數(shù)據(jù)
SENDER@hyyk select * from tb21;
COL1 COL2
———- ———-
1 1
2 1
3 1
4 1
目標:
create table tb21(col1 int primary key, col2 int);
insert into tb21 values(1,1);
commit;
查看數(shù)據(jù)
RECEIVER@ogg select * from tb21;
COL1 COL2
———- ———-
1 1
添加附加日志,加入復(fù)制鏈路
GGSCI (pc6 as ogg@hyyk) 8 add trandata sender.tb21
Logging of supplemental redo data enabled for table SENDER.TB21.
TRANDATA for scheduling columns has been added on table SENDER.TB21 .
TRANDATA for instantiation CSN has been added on table SENDER.TB21 .
2、測試 delete
無 handlecollisions
源:
delete from tb21 where col1=2;
commit;
目標端查看進程狀態(tài)
GGSCI (ogg-80) 24 info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT ABENDED REP_S1 00:00:04 00:00:02
復(fù)制進程 abend,2018-03-18 11:09:38 ERROR OGG-01296 Error mapping from SENDER.TB21 to RECEIVER.TB21.
可以在目標上設(shè)置:加 handlecollisions(或者 start rep2, skiptransaction)可以跳過,用 stats rep2 看一下;
GGSCI (ogg-80) 32 stats rep_s1
Sending STATS request to REPLICAT REP_S1 …
Start of Statistics at 2018-03-18 11:13:44.
Replicating from SENDER.TB21 to RECEIVER.TB21:
*** Total statistics since 2018-03-18 11:13:34 ***
Total inserts 0.00
Total updates 0.00
Total deletes 1.00
Total discards 0.00
Total operations 1.00
Total delete collisions 1.00
這里的 delete 變成了 delete collisions
3、測試 update
如果目標上不存在這個記錄
(1)update 鍵值時:
源:
update tb21 set col1=5 where col1=3;
commit;
SENDER@hyyk select * from tb21;
COL1 COL2
———- ———-
1 1
5 1
4 1
無 handlecollisions 時,會 abend;
有 handlecollisions 時,會變成 insert;但是此時需要加:源端:FETCHOPTIONS FETCHPKUPDATECOLS(將捕獲完整日志鏡像到 trail 中,轉(zhuǎn)換為對 target 的一個完整記錄的插入,相當于 fetchcol(*))
目標端查看
RECEIVER@ogg select * from tb21;
COL1 COL2
———- ———-
5 1
1 1
我們使用 logdump 查看 trail
2018/03/18 11:20:44.000.000 GGSUnifiedPKUpdate Len 31 RBA 1830
Name: SENDER.TB21 (TDR Index: 1)
After Image: Partition 12 G s
0000 0009 0000 0005 0000 0001 3300 0000 0500 0000 | …………3…….
0135 0001 0005 0000 0001 31 | .5……..1
Before Image Len 13 (x0000000d)
BeforeColumnLen 9 (x00000009)
Column 0 (x0000), Len 5 (x0005)
After Image Len 18 (x00000012)
Column 0 (x0000), Len 5 (x0005)
Column 1 (x0001), Len 5 (x0005)
(2)update 非鍵值時:
源:
update tb21 set col2=4 where col1=4;
commit;
SENDER@hyyk select * from tb21;
COL1 COL2
———- ———-
1 1
6 5
5 1
4 4
加了 handlecollisions
RECEIVER@ogg select * from tb21;
COL1 COL2
———- ———-
4 4
5 1
1 1
6 5
如果是 ogg11g 加了 handlecollisions 也沒有反應(yīng),數(shù)據(jù)也會不一致
需要在目標端加入 INSERTMISSINGUPDATES 參數(shù),即可解決。
4、測試 insert
源端 insert 的 pk 和目標沖突時,會以源端為準;
目標首先插入一條:
insert into tb21 values(6,1);
commit;
RECEIVER@ogg select * from tb21;
COL1 COL2
———- ———-
5 1
1 1
6 1
然后源端插入:
insert into tb21 values(6,5);
SENDER@hyyk select * from tb21;
COL1 COL2
———- ———-
1 1
6 5
5 1
4 1
加 handlecollisions,
RECEIVER@ogg select * from tb21;
COL1 COL2
———- ———-
5 1
1 1
6 5
看最后目標的記錄如何,實際會變成以源端為準。
看完上述內(nèi)容,你們對 ogg 中關(guān)于 handlecollisions 的示例分析有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。