ogg中关于handlecollisions的示例分析

61次阅读
没有评论

共计 3716 个字符,预计需要花费 10 分钟才能阅读完成。

今天就跟大家聊聊有关 ogg 中关于 handlecollisions 的示例分析,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

handlecollisions

实验环境参数

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;

查看数据

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;

查看数据

RECEIVER@ogg select * from tb21;

COL1 COL2

———- ———-

1    1

添加附加日志,加入复制链路

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;

目标端查看进程状态

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

复制进程 abend,2018-03-18 11:09:38  ERROR   OGG-01296  Error mapping from SENDER.TB21 to RECEIVER.TB21.

可以在目标上设置:加 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 中,转换为对 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 也没有反应,数据也会不一致

需要在目标端加入 INSERTMISSINGUPDATES 参数,即可解决。

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

看最后目标的记录如何,实际会变成以源端为准。

看完上述内容,你们对 ogg 中关于 handlecollisions 的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-17发表,共计3716字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)