在线重定义对OGG影响测试报告1127.docx

上传人:b****5 文档编号:3540287 上传时间:2022-11-23 格式:DOCX 页数:14 大小:20.97KB
下载 相关 举报
在线重定义对OGG影响测试报告1127.docx_第1页
第1页 / 共14页
在线重定义对OGG影响测试报告1127.docx_第2页
第2页 / 共14页
在线重定义对OGG影响测试报告1127.docx_第3页
第3页 / 共14页
在线重定义对OGG影响测试报告1127.docx_第4页
第4页 / 共14页
在线重定义对OGG影响测试报告1127.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

在线重定义对OGG影响测试报告1127.docx

《在线重定义对OGG影响测试报告1127.docx》由会员分享,可在线阅读,更多相关《在线重定义对OGG影响测试报告1127.docx(14页珍藏版)》请在冰豆网上搜索。

在线重定义对OGG影响测试报告1127.docx

在线重定义对OGG影响测试报告1127

 

在线重定义普通表转换分区表对OGG影响测试报告

 

作者:

陈迪曙

Email:

cdshrewd@

 

目录

1.总体说明4

2.测试细节4

软件环境4

测试数据表4

读写过程7

测试有主键表7

测试无主键表12

3.测试结果15

文档标识

文档名称

在线重定义普通表转换分区表对OGG影响测试报告

版本号

状况

文档修订历史

版本

日期

描述

文档所有者

0.1

2015-11-27

创建初稿

陈迪曙

分发

拷贝No.

姓名

单位

1

2

3

1.总体说明

本技术方案主要的目的是测试在线重定义普通表转换分区表对OGG影响,重点关注两个方面。

第一个是数据同步是否丢失,第二个是附加日志是否丢失以及附加日志丢失的影响。

经过测试,结论如下:

1.在线重定义对OGG数据同步有影响,可能会导致数据丢失。

但是通过合理的停机,可以避免数据丢失。

具体来说,就是在线重定义在最后finish阶段(即切换表名的过程)完成后,如果不重启抽取进程,会发现数据无法抽取,直到下次重启OGG抽取进程。

规避的方法是,在要做finish操作前,要求业务停机,避免数据写入,然后重启extract进程,然后再恢复数据写入即可。

2.如果在线重定义使用的中间表没有附加日志,那么进行在线重定义的过程中,原始表上的附加日志除主键外会丢失,但是如果表存在主键,那么所有的数据复制不受影响。

无主键表测试过程中也未发现有问题。

2.测试细节

软件环境

相关信息

primary

实例名

oradb

IP

192.168.2.20

服务名

oradb

OGG版本

Version11.1.1.1.3_0213878881OGGCORE_11.1.1.1.4_PLATFORMS_120323.1345

Version12.1.2.1.0OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO

操作系统

OracleLinuxServerrelease5.8

数据库版本

OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProduction

测试数据表

测试涉及到6张表:

源表

目标表

在线重定义中间表

test.test_src

test.test_tgt

test.test_src_p

test.test_npk_src

test.test_npk_tgt

test.test_npk_src_p

以上6张表的建表脚本如下:

--Createtable

createtableTEST.TEST_SRC

IDNUMBER(10)notnull,

NAMEVARCHAR2(30),

ZONEVARCHAR2(3)notnull

tablespaceTS_CBS_P_DATA;

altertableTEST.TEST_SRC

addconstraintPK_TEST_SRCprimarykey(ID);

--Createtable

createtableTEST.TEST_TGT

IDNUMBER(10)notnull,

NAMEVARCHAR2(30),

ZONEVARCHAR2(3)notnull

tablespaceTS_CBS_P_DATA;

altertableTEST.TEST_TGT

addconstraintPK_TEST_TGTprimarykey(ID);

--Createtable

createtableTEST.TEST_SRC_P

IDNUMBER(10)notnull,

NAMEVARCHAR2(30),

ZONEVARCHAR2(3)notnull

partitionbyLIST(ZONE)

PARTITIONSHVALUES('SH')

TABLESPACETS_CBS_P_DATA,

PARTITIONWHVALUES('WH')

TABLESPACETS_CBS_P_DATA,

PARTITIONQDVALUES('QD')

TABLESPACETS_CBS_P_DATA,

PARTITIONDFTVALUES(default)

TABLESPACETS_CBS_P_DATA

);

altertableTEST.TEST_SRC_P

addconstraintPK_TEST_SRC_Pprimarykey(ID);

--Createtable

createtableTEST.TEST_NPK_SRC

IDNUMBER(10)notnull,

NAMEVARCHAR2(30),

ZONEVARCHAR2(3)notnull

tablespaceTS_CBS_P_DATA;

--Createtable

createtableTEST.TEST_NPK_TGT

IDNUMBER(10)notnull,

NAMEVARCHAR2(30),

ZONEVARCHAR2(3)notnull

tablespaceTS_CBS_P_DATA;

--Createtable

createtableTEST.TEST_NPK_SRC_P

IDNUMBER(10)notnull,

NAMEVARCHAR2(30),

ZONEVARCHAR2(3)notnull

partitionbyLIST(ZONE)

PARTITIONSHVALUES('SH')

TABLESPACETS_CBS_P_DATA,

PARTITIONWHVALUES('WH')

TABLESPACETS_CBS_P_DATA,

PARTITIONQDVALUES('QD')

TABLESPACETS_CBS_P_DATA,

PARTITIONDFTVALUES(default)

TABLESPACETS_CBS_P_DATA

);

读写过程

测试有主键表

OGG状态

GGSCI(pure11gasogg@oradb)22>infoall

ProgramStatusGroupLagatChkptTimeSinceChkpt

MANAGERRUNNING

EXTRACTRUNNINGDP_EXT00:

00:

0000:

03:

05

EXTRACTRUNNINGPRI_EXT00:

00:

0000:

00:

05

REPLICATRUNNINGREP0100:

00:

0000:

00:

02

修改数据

SQL>begin

2foriin1..100loop

3insertintotest_srcvalues(i,'name:

'||i,(casemod(i,3)when0then'SH'when1then'WH'when2then'QD'end));

4endloop;

5commit;

6end;

7/

PL/SQLproceduresuccessfullycompleted.

SQL>

SQL>selectcount(*)fromtest_tgt;

COUNT(*)

----------

0

SQL>selectcount(*)fromtest_tgt;

COUNT(*)

----------

100

SQL>

10:

53:

12SQL>selectcount(*)fromtest_src;

COUNT(*)

----------

100

10:

53:

15SQL>selectcount(*)fromtest_src;

COUNT(*)

----------

100

10:

53:

20SQL>

10:

53:

20SQL>select*fromdba_log_group_columnstwheret.table_name='TEST_SRC';

OWNERLOG_GROUP_NAME

------------------------------------------------------------

TABLE_NAME

------------------------------

COLUMN_NAME

--------------------------------------------------------------------------------

POSITIONLOGGIN

----------------

TESTGGS_99854

TEST_SRC

ID

1LOG

10:

55:

40SQL>$

以上证明,初始状态,只有TEST_SRC有附加日志,初始数据同步正常。

执行在线重定义

10:

57:

17SQL>execsys.dbms_redefinition.can_redef_table('TEST','TEST_SRC');

PL/SQLproceduresuccessfullycompleted.

10:

59:

35SQL>execsys.dbms_redefinition.start_redef_table('TEST','TEST_SRC','TEST_SRC_P');

PL/SQLproceduresuccessfullycompleted.

10:

59:

46SQL>begin

foriin200..300loop

insertintotest_srcvalues(i,'name:

'||i,(casemod(i,3)when0then'SH'when1then'WH'when2then'QD'end));

endloop;

commit;

end;

/11:

00:

28211:

00:

28311:

00:

28411:

00:

28511:

00:

28611:

00:

287

PL/SQLproceduresuccessfullycompleted.

11:

00:

30SQL>execsys.dbms_redefinition.sync_interim_table('TEST','TEST_SRC','TEST_SRC_P');

PL/SQLproceduresuccessfullycompleted.

11:

01:

02SQL>begin

11:

01:

262foriin400..450loop

11:

01:

263insertintotest_srcvalues(i,'name:

'||i,(casemod(i,3)when0then'SH'when1then'WH'when2then'QD'end));

11:

01:

264endloop;

11:

01:

265commit;

11:

01:

266end;

11:

01:

267/

PL/SQLproceduresuccessfullycompleted.

11:

01:

28SQL>execsys.dbms_redefinition.finish_redef_table('TEST','TEST_SRC','TEST_SRC_P');

PL/SQLproceduresuccessfullycompleted.

11:

01:

57SQL>begin

foriin500..650loop

insertintotest_srcvalues(i,'name:

'||i,(casemod(i,3)when0then'SH'when111:

03:

08211:

03:

083then'WH'when2then'QD'end));

11:

03:

084endloop;

11:

03:

085commit;

11:

03:

086end;

11:

03:

087/

PL/SQLproceduresuccessfullycompleted.

11:

03:

09SQL>selectcount(*)fromtest_src;

COUNT(*)

----------

403

11:

04:

18SQL>selectcount(*)fromtest_tgt;

COUNT(*)

----------

252

从以上记录数来看,直到execsys.dbms_redefinition.finish_redef_table之前,数据都是同步的,执行finish后的数据没有再发生同步。

然后我重启了extract进程后,再次插入数据,数据正常同步。

11:

11:

58SQL>insertintotest_srcvalues(1111,'name:

1111','SH');

1rowcreated.

11:

12:

19SQL>commit;

Commitcomplete.

11:

12:

21SQL>selectcount(*)fromtest_tgtwhereid=1111;

COUNT(*)

----------

1

11:

12:

51SQL>select*fromdba_log_group_columnstwheret.table_namein('TEST_SRC','TEST_SRC_P');

OWNERLOG_GROUP_NAME

------------------------------------------------------------

TABLE_NAME

------------------------------

COLUMN_NAME

--------------------------------------------------------------------------------

POSITIONLOGGIN

----------------

TESTGGS_99854

TEST_SRC_P

ID

1LOG

11:

16:

02SQL>updatetest_srcsetname='name:

change'whereid=1111;

1rowupdated.

11:

16:

40SQL>commit;

Commitcomplete.

11:

16:

44SQL>select*fromtest_tgtwhereid=1111;

IDNAMEZON

-------------------------------------------

1111name:

changeSH

11:

16:

55SQL>

11:

22:

33SQL>select*fromdba_log_group_columnstwheret.table_namein('TEST_SRC','TEST_SRC_P');

OWNERLOG_GROUP_NAMETABLE_NAMECOLUMN_NAMEPOSITIONLOGGIN

-------------------------------------------------------------------------------------------

TESTGGS_99854TEST_SRC_PID1LOG

11:

22:

36SQL>

GGSCI(pure11gasogg@oradb)79>infoall

ProgramStatusGroupLagatChkptTimeSinceChkpt

MANAGERRUNNING

EXTRACTRUNNINGDP_EXT00:

00:

0000:

00:

09

EXTRACTRUNNINGPRI_EXT00:

00:

0000:

00:

07

REPLICATRUNNINGREP0100:

00:

0000:

00:

04

这里说明一下,由于我怀疑可能和版本有关,所以我又切换到另外11.1的OGG,发现在12.1的OGG和11.1的OGG中现象略有不同,在12.1中重新启动可能会导致replicate报错,需要使用skiptransaction来启动,在11.1中根本就不报错,但是都是在finish后,如果不重启extract,数据不会被复制。

重启extract后,数据正常复制。

测试无主键表

OGG状态

GGSCI(pure11g)1>viewparampri_ext

Extractpri_ext

setenv(ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/db_1")

useridogg,passwordogg

TRANLOGOPTIONSCONVERTUCS2CLOBS

TRANLOGOPTIONSALTARCHIVELOGDESTinstanceoradb/u01/app/oradata/archivelog

discardfile./dirrpt/pri_ext01.dsc,append

EXTTRAIL./dirdat/lt,megabytes100

dynamicresolution

DBOPTIONSALLOWUNUSEDCOLUMN

tabletest.test_src;

tabletest.test_npk_src;

GGSCI(pure11g)2>infoall

ProgramStatusGroupLagTimeSinceChkpt

MANAGERRUNNING

EXTRACTRUNNINGDP_EXT00:

00:

0000:

00:

07

EXTRACTRUNNINGPRI_EXT00:

00:

0000:

00:

03

REPLICATRUNNINGREP0100:

00:

0000:

00:

08

GGSCI(pure11g)3>

修改数据

SQL>insertintotest_npk_srcvalues(235,'name:

235','SH');

1rowcreated.

SQL>commit;

Commitcomplete.

SQL>

SQL>

SQL>selectcount(*)fromtest_npk_tgt;

SQL>/

COUNT(*)

----------

1

SQL>select*fromtest_npk_tgt;

IDNAMEZON

-------------------------------------------

235name:

235SH

SQL>select*fromtest_npk_src;

IDNAMEZON

-------------------------------------------

235name:

235SH

SQL>updatetest_npk_srcsetname='name:

235-u'whereid=235;

1rowupdated.

SQL>commit;

Commitcomplete.

SQL>select*fromtest_npk_tgt;

IDNAMEZON

-------------------------------------------

235name:

235-uSH

........

SQL>select*fromtesT_npk_src;

IDNAMEZON

-------------------------------------------

235name:

235-uSH

1name:

1-1-rowidSH

SQL>select*fromtest_npk_tgt;

IDNAMEZON

-------------------------------------------

235name:

235-uSH

1name:

1-1-rowidSH

SQL>deletefromtest_npk_srcwhereid=235;

1rowdeleted.

SQL>commit;

Commitcomplete.

SQL>select*fromtesT_npk_src;

IDNAMEZON

-------------------------------------------

1name:

1-1-rowidSH

SQL>select*fromtest_npk_tgt;

IDNAMEZON

-------------------------------------------

1name:

1-1-rowidSH

SQL>

以上说明初始状态,增删查改都正常同步。

执行在线重定义

execsys.dbms_redefinition.can_redef_table('TEST','TEST_NPK_SRC',dbms_redefinition.cons_use_rowid);

execsys.dbms_redefinition.start_redef_table('TEST','TEST_NPK_SRC','TEST_NPK_SRC_P',options_flag=>DBMS_REDEFINITION.CONS_USE_ROWID);

execsys.dbms_redefinition.sync_interim_table('TEST','TEST_NPK_SRC','TEST_NPK_SRC_P');

execsys.dbms_redefinition.finish_redef_table('TEST','TEST_NPK_SRC','TEST_NPK_SRC_P')

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1