CN107436938A - 一种关系数据库前映像的附加日志解析方法 - Google Patents
一种关系数据库前映像的附加日志解析方法 Download PDFInfo
- Publication number
- CN107436938A CN107436938A CN201710622151.4A CN201710622151A CN107436938A CN 107436938 A CN107436938 A CN 107436938A CN 201710622151 A CN201710622151 A CN 201710622151A CN 107436938 A CN107436938 A CN 107436938A
- Authority
- CN
- China
- Prior art keywords
- byte
- identifying
- daily record
- section shared
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
本发明公开一种关系数据库前映像的附加日志解析方法:(1)获取数据库版本信息、解析前映像的change第四块中的KDO数据,提取其中的操作码;(2)根据不同的操作码采用不同的解析方式,获取附加日志数据块编号;(3)根据附加日志结构,获取附加日志内部的主键列数据;(4)将获取的主键列数据依次添加到改变列数据中。本发明可以依据主键精确定位变化数据的行号,同时不会影响数据库自身性能。
Description
技术领域
本发明涉及一种关系数据库前映像的附加日志解析方法,属于数据库数据复制技术领域。
背景技术
随着信息技术的深入发展,应用系统的不断升级,系统之间的集成贯通越来越多的需要数据交互,数据抽取已经逐步成为了信息系统融合的关键部分。然而,所有针对数据的抽取与交互都包含着一个基本的假设——数据的可用性和可靠性。数据库附件日志解析技术作为确定数据变化的关键,其数据的可用性和与可靠性自然备受关注。数据库前映像附件日志解析技术正是在这种要求下产生的。
国内外关系型数据库日志挖掘技术分为两种类型,一种是基于逻辑级日志抽取技术、一种是基于物理级Redo抽取技术。数据库日志抽取技术在信息系统集成交互领域应用广泛,主要使用的是基于逻辑级日志抽取技术,该抽取技术的前提需要快速实现对附加日志的解析确定变化行的主键信息,传统的附加日志解析方法多数采用数据库自带插件实现,会对数据库自身性能产生影响,不能较好的解决数据库日志抽取效率问题,并且对生产库影响较大。
发明内容
本发明的目的是克服现有技术中的不足,提供一种关系数据库前映像的附加日志解析方法,解决现有技术中附加日志解析方法采用自带插件实现,对数据库自身存在影响,数据库日志抽取效率低的技术问题。
为解决上述技术问题,本发明所采用的技术方案是:一种关系数据库前映像的附加日志解析方法,包括以下步骤:
(1)获取数据库版本信息,根据KDO公共结构解析change第四块中的KDO数据,提取其中的操作码;
(2)针对不同的操作码采用不同的解析方式,获取附加日志数据块编号;
(3)根据附加日志结构,获取附加日志内部的主键列数据;
(4)将获取的主键列数据依次添加到改变列数据列表中。
步骤(1)中change第四块中的KDO数据结构如下:
标识Bdba所占字节区间为[0,3];
标识hdba所占字节区间为[4,7];
标识Maxfr所占字节区间为[8,9];
标识opcode所占字节区间为第10字节;
标识Xtype所占字节区间为第11个字节;
标识itli所占字节区间为第12字节;
标识Ispac所占字节区间为第13字节。
步骤(2)中针对不同的操作码采用不同的解析方式,具体如下:
如果操作码为OP_ROW_INSERT,则根据OP_ROW_INSERT后续的KDO结构解析change第4块中余下KDO数据,从第5块开始根据改变列数量读取各列的值,判断opUndoSec.OpMajor==0x05&&opUndoSec.OpMinor==0x01是否为真,如果为真,则附加日志开始change数据块编号index=6+opKdo.cc,否则附加日志开始change数据块编号index=5+opKdo.cc;
如果操作码为OP_ROW_UPDATE,则根据OP_ROW_UPDATE后续的KDO结构解析change第4块中余下KDO数据,从第5块开始根据改变列数量读取各列的值,每两位代表一个列值,从第5块数据中获取改变的列编号,每两位一个,返回改变列号list,从change第6块数据开始,根据kdo.nchanged,逐个解析,获得列数据,columnid与改变列号list对应,如果opKdo.opcode()&0x40)!=0成立,则附加日志开始change数据块编号index=opKdo.nchanged+7,否则附加日志开始change数据块编号index=opKdo.nchanged+6;
如果操作码为OP_ROW_DELETE,则表示无剩余Kdo数据,附加日志开始change数据块编号index=5。
步骤(2)中获取附加日志开始change数据块编号的具体方法为:
根据不同的DML操作码确定后续KDO内部数据结构;
根据KDO内部结构,获取附加日志开始change数据块编号。
OP_ROW_INSERT操作码对应的后续KDO数据结构为:
标识flag所占字节区间为第16字节;
标识lb所占字节区间为第17字节;
标识cc所占字节区间为第18字节;
标识cki所占字节区间为第19字节;
标识hrid所占字节区间为[20,23];
标识hridMinor所占字节区间为[24,25];
标识nrid所占区间为[28,31];
标识nridMinor所占字节区间为[32,33];
标识size所占字节区间为[40,41];
标识slot所占字节区间为[42,43];
标识tabn所占字节为第44个字节。
OP_ROW_UPDATE操作码对应的后续KDO数据结构为:
标识flag所占字节区间为第16字节;
标识lock所占字节为第17字;
标识ckix所占字节为第18个字节;
标识tabn所占字节为第19字节;
标识slot所占字节区间为[20,21];
标识ncol所占字节区间为第22个字节;
标识nchanged所占区间为第23个字节;
标识size所占区间为[24,25]。
步骤(3)获取附加日志内部的主键列数据的具体方法如下:
将附加日志结构为标识flag的值赋给数据块记录的flag标记,从change的附加日志开始位置后移一个数据块,读取主键的列id,得到列号索引,从change的第附加日志开始位置index+3块数据开始,逐个解析附加日志结构里的totalCols数据,获得主键列数据。
附加日志结构为:
标识flag所占字节区间第1个字节;
标识totalCols所占字节区间为[2,3];
标识objv所占字节区间为[4,5];
标识startColumn所占字节区间为[6,7];
标识startColumn所占字节区间为[8,9]。
与现有技术相比,本发明所产生的有益效果是:
一种适用于oracle9i、oracle10g、oracle11g、oracle12c的附加日志解析方法,通过对Oracle数据库在文件系统格式下、裸设备下以及对基于数据库特殊卷管理器格式下的前映像日志数据的分析与定位,在日志变化的第一时间抽取日志变化数据,实现数据库附加日志的主键数据提取,依据主键精确定位变化数据的行号,同时不会影响数据库自身性能,对确保数据库的安全稳定的运行,具有重要的实际意义。
附图说明
图1是本发明基于前映像的附加日志解析方法流程图;
图2是基于逻辑级的数据库日志抽取的架构图。
具体实施方式
为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本发明。
如图1所示,一种关系数据库前映像的附加日志解析方法,包括以下步骤:
(1)获取数据库版本信息,根据KDO公共结构解析change第四块中的KDO数据,提取其中的操作码;
change第四块中的KDO数据结构如下:
标识Bdba所占字节区间为[0,3];
标识hdba所占字节区间为[4,7];
标识Maxfr所占字节区间为[8,9];
标识opcode所占字节区间为第10字节;
标识Xtype所占字节区间为第11个字节;
标识itli所占字节区间为第12字节;
标识Ispac所占字节区间为第13字节。
(2)针对不同的操作码采用不同的解析方式,获取附加日志数据块编号;
针对不同的操作码采用不同的解析方式,具体如下:
如果操作码为OP_ROW_INSERT,则根据OP_ROW_INSERT后续的KDO结构解析change第4块中余下KDO数据,从第5块开始根据改变列数量读取各列的值,判断opUndoSec.OpMajor==0x05&&opUndoSec.OpMinor==0x01是否为真,如果为真,则附加日志开始change数据块编号index=6+opKdo.cc,否则附加日志开始change数据块编号index=5+opKdo.cc;
如果操作码为OP_ROW_UPDATE,则根据OP_ROW_UPDATE后续的KDO结构解析change第4块中余下KDO数据,从第5块开始根据改变列数量读取各列的值,每两位代表一个列值,从第5块数据中获取改变的列编号,每两位一个,返回改变列号list,从change第6块数据开始,根据kdo.nchanged,逐个解析,获得列数据,columnid与改变列号list对应,如果opKdo.opcode()&0x40)!=0成立,则附加日志开始change数据块编号index=opKdo.nchanged+7,否则附加日志开始change数据块编号index=opKdo.nchanged+6;
如果操作码为OP_ROW_DELETE,则表示无剩余Kdo数据,附加日志开始change数据块编号index=5。
获取附加日志开始change数据块编号的具体方法为:
根据不同的DML操作码确定后续KDO内部数据结构;
根据KDO内部结构,获取附加日志开始change数据块编号。
OP_ROW_INSERT操作码对应的后续KDO数据结构为:
标识flag所占字节区间为第16字节;
标识lb所占字节区间为第17字节;
标识cc所占字节区间为第18字节;
标识cki所占字节区间为第19字节;
标识hrid所占字节区间为[20,23];
标识hridMinor所占字节区间为[24,25];
标识nrid所占区间为[28,31];
标识nridMinor所占字节区间为[32,33];
标识size所占字节区间为[40,41];
标识slot所占字节区间为[42,43];
标识tabn所占字节为第44个字节。
OP_ROW_UPDATE操作码对应的后续KDO数据结构为:
标识flag所占字节区间为第16字节;
标识lock所占字节为第17字;
标识ckix所占字节为第18个字节;
标识tabn所占字节为第19字节;
标识slot所占字节区间为[20,21];
标识ncol所占字节区间为第22个字节;
标识nchanged所占区间为第23个字节;
标识size所占区间为[24,25]。
(3)根据附加日志结构,获取附加日志内部的主键列数据;
附加日志结构为:
标识flag所占字节区间第1个字节;
标识totalCols所占字节区间为[2,3];
标识objv所占字节区间为[4,5];
标识startColumn所占字节区间为[6,7];
标识startColumn所占字节区间为[8,9]。
获取附加日志内部的主键列数据的具体方法如下:
将附加日志结构为标识flag的值赋给数据块记录的flag标记,从change的附加日志开始位置后移一个数据块,读取主键的列id,得到列号索引,从change的第附加日志开始位置index+3块数据开始,逐个解析附加日志结构里的totalCols数据,获得主键列数据。
(4)将获取的主键列数据依次添加到改变列数据列表中。
如图2所示,通过对Oracle数据库在文件系统格式下、裸设备下以及对基于数据库特殊卷管理器格式下的Redo日志的分析与定位,在数据库日志变化的第一时间抽取日志变化数据,生成变化日志数据集合,为后续数据格式转换、日志入库提供基础。通过该方法不但可以精确的抽取出变化数据,还能降低数据库日志抽取对生产库的性能影响,对于确保信息灾备系统安全稳定运行具有重要的实际意义。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (8)
1.一种关系数据库前映像的附加日志解析方法,其特征在于,包括以下步骤:
(1)获取数据库版本信息,根据KDO公共结构解析change第四块中的KDO数据,提取其中的操作码;
(2)针对不同的操作码采用不同的解析方式,获取附加日志数据块编号;
(3)根据附加日志结构,获取附加日志内部的主键列数据;
(4)将获取的主键列数据依次添加到改变列数据列表中。
2.根据权利要求1所述的关系数据库前映像的附加日志解析方法,其特征在于,步骤(1)中change第四块中的KDO数据结构如下:
标识Bdba所占字节区间为[0,3];
标识hdba所占字节区间为[4,7];
标识Maxfr所占字节区间为[8,9];
标识opcode所占字节区间为第10字节;
标识Xtype所占字节区间为第11个字节;
标识itli所占字节区间为第12字节;
标识Ispac所占字节区间为第13字节。
3.根据权利要求1所述的关系数据库前映像的附加日志解析方法,其特征在于,步骤(2)中针对不同的操作码采用不同的解析方式,具体如下:
如果操作码为OP_ROW_INSERT,则根据OP_ROW_INSERT后续的KDO结构解析change第4块中余下KDO数据,从第5块开始根据改变列数量读取各列的值,判断opUndoSec.OpMajor==0x05&&opUndoSec.OpMinor==0x01是否为真,如果为真,则附加日志开始change数据块编号index=6+opKdo.cc,否则附加日志开始change数据块编号index=5+opKdo.cc;
如果操作码为OP_ROW_UPDATE,则根据OP_ROW_UPDATE后续的KDO结构解析change第4块中余下KDO数据,从第5块开始根据改变列数量读取各列的值,每两位代表一个列值,从第5块数据中获取改变的列编号,每两位一个,返回改变列号list,从change第6块数据开始,根据kdo.nchanged,逐个解析,获得列数据,columnid与改变列号list对应,如果opKdo.opcode()&0x40)!=0成立,则附加日志开始change数据块编号index=opKdo.nchanged+7,否则附加日志开始change数据块编号index=opKdo.nchanged+6;
如果操作码为OP_ROW_DELETE,则表示无剩余Kdo数据,附加日志开始change数据块编号index=5。
4.根据权利要求1所述的关系数据库前映像的附加日志解析方法,其特征在于,步骤(2)中获取附加日志开始change数据块编号的具体方法为:
根据不同的DML操作码确定后续KDO内部数据结构;
根据KDO内部结构,获取附加日志开始change数据块编号。
5.根据权利要求4所述的关系数据库前映像的附加日志解析方法,其特征在于,OP_ROW_INSERT操作码对应的后续KDO数据结构为:
标识flag所占字节区间为第16字节;
标识lb所占字节区间为第17字节;
标识cc所占字节区间为第18字节;
标识cki所占字节区间为第19字节;
标识hrid所占字节区间为[20,23];
标识hridMinor所占字节区间为[24,25];
标识nrid所占区间为[28,31];
标识nridMinor所占字节区间为[32,33];
标识size所占字节区间为[40,41];
标识slot所占字节区间为[42,43];
标识tabn所占字节为第44个字节。
6.根据权利要求4所述的关系数据库前映像的附加日志解析方法,其特征在于,OP_ROW_UPDATE操作码对应的后续KDO数据结构为:
标识flag所占字节区间为第16字节;
标识lock所占字节为第17字;
标识ckix所占字节为第18个字节;
标识tabn所占字节为第19字节;
标识slot所占字节区间为[20,21];
标识ncol所占字节区间为第22个字节;
标识nchanged所占区间为第23个字节;
标识size所占区间为[24,25]。
7.根据权利要求1所述的关系数据库前映像的附加日志解析方法,其特征在于,步骤(3)获取附加日志内部的主键列数据的具体方法如下:
将附加日志结构为标识flag的值赋给数据块记录的flag标记,从change的附加日志开始位置后移一个数据块,读取主键的列id,得到列号索引,从change的第附加日志开始位置index+3块数据开始,逐个解析附加日志结构里的totalCols数据,获得主键列数据。
8.根据权利要求7所述的关系数据库前映像的附加日志解析方法,其特征在于,附加日志结构为:
标识flag所占字节区间第1个字节;
标识totalCols所占字节区间为[2,3];
标识objv所占字节区间为[4,5];
标识startColumn所占字节区间为[6,7];
标识startColumn所占字节区间为[8,9]。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710622151.4A CN107436938B (zh) | 2017-07-27 | 2017-07-27 | 一种关系数据库前映像的附加日志解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710622151.4A CN107436938B (zh) | 2017-07-27 | 2017-07-27 | 一种关系数据库前映像的附加日志解析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107436938A true CN107436938A (zh) | 2017-12-05 |
CN107436938B CN107436938B (zh) | 2019-11-05 |
Family
ID=60460876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710622151.4A Active CN107436938B (zh) | 2017-07-27 | 2017-07-27 | 一种关系数据库前映像的附加日志解析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107436938B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352935A (zh) * | 2019-07-29 | 2020-06-30 | 阿里巴巴集团控股有限公司 | 一种块链式账本中的索引创建方法、装置及设备 |
US10795874B2 (en) | 2019-07-29 | 2020-10-06 | Alibaba Group Holding Limited | Creating index in blockchain-type ledger |
CN112231176A (zh) * | 2020-10-14 | 2021-01-15 | 天津津航计算技术研究所 | 一种简便的VxWorks操作系统系统日志记录方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101777017A (zh) * | 2010-02-08 | 2010-07-14 | 北京同有飞骥科技有限公司 | 一种连续数据保护系统的快速恢复方法 |
US20120030172A1 (en) * | 2010-07-27 | 2012-02-02 | Oracle International Corporation | Mysql database heterogeneous log based replication |
CN105677876A (zh) * | 2016-01-12 | 2016-06-15 | 国家电网公司 | 一种基于物理级的数据库日志挖掘方法 |
-
2017
- 2017-07-27 CN CN201710622151.4A patent/CN107436938B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101777017A (zh) * | 2010-02-08 | 2010-07-14 | 北京同有飞骥科技有限公司 | 一种连续数据保护系统的快速恢复方法 |
US20120030172A1 (en) * | 2010-07-27 | 2012-02-02 | Oracle International Corporation | Mysql database heterogeneous log based replication |
CN105677876A (zh) * | 2016-01-12 | 2016-06-15 | 国家电网公司 | 一种基于物理级的数据库日志挖掘方法 |
Non-Patent Citations (3)
Title |
---|
宋芳利: "基于日志解析的数据库海量数据同步系统的研究与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
岳峻松 等: "一种基于物理级的关系数据库数据复制模型研究", 《计算机与现代化》 * |
王梅 等: "一种列存储数据仓库中的数据复用策略", 《计算机学报》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352935A (zh) * | 2019-07-29 | 2020-06-30 | 阿里巴巴集团控股有限公司 | 一种块链式账本中的索引创建方法、装置及设备 |
US10795874B2 (en) | 2019-07-29 | 2020-10-06 | Alibaba Group Holding Limited | Creating index in blockchain-type ledger |
US11068457B2 (en) | 2019-07-29 | 2021-07-20 | Advanced New Technologies Co., Ltd. | Creating index in blockchain-type ledger |
US11573944B2 (en) | 2019-07-29 | 2023-02-07 | Advanced New Technologies Co., Ltd. | Creating index in blockchain-type ledger |
CN112231176A (zh) * | 2020-10-14 | 2021-01-15 | 天津津航计算技术研究所 | 一种简便的VxWorks操作系统系统日志记录方法 |
CN112231176B (zh) * | 2020-10-14 | 2023-03-03 | 天津津航计算技术研究所 | 一种简便的VxWorks操作系统系统日志记录方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107436938B (zh) | 2019-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100446000C (zh) | Fat卷中重建目录结构和恢复数据的方法 | |
CN107436938B (zh) | 一种关系数据库前映像的附加日志解析方法 | |
CN103853806A (zh) | 一种表格转换方法及装置 | |
CN103336690A (zh) | 基于html5的文字元素绘制方法及装置 | |
CN108920612A (zh) | 解析doc二进制格式并提取文档中图片的方法及系统 | |
CN103473056A (zh) | 一种遥测配置文件自动生成方法 | |
CN103678044A (zh) | 在ext3文件系统下的raid5的数据恢复方法和装置 | |
CN105068888A (zh) | 一种基于Oracle数据库的数据恢复方法 | |
CN101551820B (zh) | 兴趣点属性的索引数据库的生成方法和装置 | |
CN106599048A (zh) | 一种SQLite数据库文件恢复删除记录的方法和装置 | |
CN104899340A (zh) | 一种基于最紧致片段的ietm技术信息片段检索装置及其检索方法 | |
CN102117289A (zh) | 一种从网页中抽取评论内容的方法和装置 | |
CN104866610A (zh) | 一种基于相似类型匹配估算的SQLite删除数据恢复方法 | |
CN103246753A (zh) | 一种根据数据库结构生成实体元数据模型的方法 | |
CN103136453B (zh) | 文档操作题的自动组卷方法和自动阅卷方法 | |
CN101008940A (zh) | 自动处理字体缺失的方法与装置 | |
CN107122424B (zh) | 一种关系数据库日志抽取方法 | |
CN106445999A (zh) | 一种基于事件要素的事件抽取方法及系统 | |
CN109543164B (zh) | Autocad结合Excel生成钻孔柱状图的方法 | |
CN105608137A (zh) | 一种提取身份标识的方法和装置 | |
CN115544975B (zh) | 一种日志格式转换方法及设备 | |
CN102073682B (zh) | 一种基于编码方式的文档数据恢复系统及其快速恢复方法 | |
CN103761312B (zh) | 一种多记录网页的信息抽取系统及方法 | |
CN111625689B (zh) | 一种变电站的svg图形和监控信息关联校验方法 | |
CN102026033B (zh) | 一种机顶盒显示缅甸文的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |