在线重定义对OGG影响测试报告1127.docx
- 文档编号:3540287
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:14
- 大小:20.97KB
在线重定义对OGG影响测试报告1127.docx
《在线重定义对OGG影响测试报告1127.docx》由会员分享,可在线阅读,更多相关《在线重定义对OGG影响测试报告1127.docx(14页珍藏版)》请在冰豆网上搜索。
在线重定义对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')
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在线 定义 OGG 影响 测试报告 1127