一种关系数据库前映像的附加日志解析模型研究

2018-03-21 14:29:13 电力信息与通信技术  点击量: 评论 (0)
0 引言十三五期间国家电网公司制定了一系统、一平台、多应用、微服务的信息化规划,公司数据统一访问共享、流通是公司信息化工作的重点[1-2

0 引言

“十三五”期间国家电网公司制定了“一系统、一平台、多应用、微服务”的信息化规划,公司数据统一访问共享、流通是公司信息化工作的重点[1-2]。当前公司各类数据在抽取交互过程中,使用了较多的Goldengate产品[3-4],由于数据库抽取产品直接读取生产系统数据,产品无法自主可控,存在严重的信息安全隐患[5-7],如何解决数据抽取过程中变化数据的定位,是当前面临的一个难点。当前工具应用最广泛的是基于逻辑级的数据库抽取技术[8-10],由于数据库抽取技术一直是国外数据库厂商的核心技术,国内厂商尚未完全掌握技术实现细节,在此类技术上国外技术封锁重重,鲜有技术细节披露[11-12]。针对上述问题,更加说明数据库抽取技术值得深入研究探讨。

 1 Oracle数据库前映像Undo数据解析原理

1.1 Undo日志文件解析流程

Oracle数据库Undo日志中详细记录了数据库操作的所有变化前的备份信息[13-14],Undo日志记录所有的前印象,用于回滚操作,Undo日志有严格的格式与内部规律,但由于Oracle数据库厂商的技术壁垒,无法直接获取相关资料[15],在Undo日志分析方法上,采用硬解析方式。即先模拟一次数据库操作,找到对应操作的trace文件,再用数据库块浏览编辑器(Block Browser and Editor,BBED)等块读取工具读取对应的数据块[16],通过trace文件注释与二进制数据块结合进行解析,找出其中的格式与规律流程。Undo日志解析方法如图1所示。

1.2 追踪文件解析

追踪文件(Trace file)是以trc为后缀的文本文件,记录了各种SQL操作及所消耗的时间等。根据追踪文件可以查询到详细的数据库操作过程,包括SEQ、SCN、KDO、OPCode等详细的事务过程信息。具体追踪文件内容如图2所示。

图1 Undo日志解析方法Fig.1 Undo log parsing method

图2 Trace文件结构Fig.2 Trace file structure

通过追踪文件中的内容,可以依次推理出数据库每一种操作码对应的标记位以及对应的执行过程内容,为下一步抽取有效操作内容奠定基础。

1.3 Undo 数据块文件解析

利用Oracle内部工具数据库块浏览编辑器(BBED)可以直接查看和修改日志数据块文件。通过BBED工具DUMP日志文件块查看Oracle内部Undo日志块内容,如图3所示。

图3 Undo数据块文件结构Fig.3 Undo data block file structure

1.4 Undo 日志文件结构

通过分析追踪文件,将追踪文件内容与Undo数据块与十六进制数据块相匹配,分析解读Undo日志格式,经过多次比对,推断出Redo日志文件结构。

Redo日志由操作系统头(OS Head Block)、Undo头标记段(Undo Head Block)与Undo数据块(Undo Data Block)3种类型数据块组成。其中操作系统头位于第一个块,Undo头标记段位于第二个块,从第三块开始为Undo数据块。Undo日志文件结构如图4所示。

图4 Undo 日志文件结构Fig.4 Undo log file structure

日志文件通常使用操作系统的块大小,一般为512 B,Redo Logs循环写。日志格式依赖于操作系统与数据库版本,一般是由日志文件头(Redo Logs Header)以及后面的日志记录(Redo Record)组成,日志记录同样由记录头(Record Header)以及多个日志操作(Redo Change)组成;数据库的许多变化都放在记录(Record)中,记录可以大于一个块,也可以小于一个块,记录的大小和数据库的块大小有关,默认情况下最大的记录是3个数据块。记录是Redo日志中表示数据库操作的一个原子单位,每个Redo记录包含每个Change所需的Undo信息。

 2 前映像数据抽取模型

Oracle数据库Undo日志抽取技术主要包括物理数据块Block处理、数据抽取引擎设计两大部分。本文将对数据抽取技术进行详细阐述。

2.1 Undo KDO结构

前映像日志的 KDO结构记录数据变化关键信息,利用Oracle内部工具BBED可以直接查看和修改KDO数据。通过BBED工具DUMP日志文件块查看Oracle内部Undo日志块内部KDO结构(见
表1)。

表1 Undo KDO结构Tab.1 Undo KDO structure

2.2 数据抽取引擎流程设计

在确定KDO结构后,对前映像日志数据块内容进行具体解析。针对前映像数据块内部结构特点,本文设计了日志数据抽取引擎,通过获取数据库版本信息、解析前映像的change第4块中的KDO数据,提取其中的操作码;根据不同的操作码采用不同的解析方式,获取附加日志数据块编号;根据附加日志结构,获取附加日志内部的主键列数据;将获取的主键列数据依次添加到改变列数据中。前映像数据抽取引擎如图5所示。

图5 前映像数据抽取引擎Fig.5 Pre-image data extraction engine

主要流程描述如下:

1)初始化UndoReader、数据库连接,获取当前日志文件路径;

2)根据具体情况,打开存放在文件系统、裸设备、ASM上的日志文件;

3)根据KDO公共结构解析change第4块中的KDO数据;

4)根据opKDO确定是哪一类DML操作,如果是INSERT操作,则进入步骤5),如果是UPDATE操作,则执行步骤8),如果是DELETE操作,则执行步骤13);

6)根据INSERT特定的KDO结构解析change第4块中余下KDO数据;

7)从第5块开始根据改变列数量(KDO.cc)读取各列的值;

8)计算附加日志开始change数据块编号index,然后执行步骤15);

9)根据UPDATE特定的KDO结构解析change第4块中余下KDO数据;

10)从第5块数据中获取改变的列编号,每两位一个;

11)从第5块数据中获取改变的列编号,每两位一个,返回改变列号list;

12)从change第6块数据开始,根据KDO.nchanged,逐个解析,获得列数据,column id与改变列号list对应;

13)获取附加日志开始change数据块编号index,然后执行步骤15);

14)opcode 为delete,无剩余KDO数据;

15)获取附加日志开始change数据块编号index = 5;

16)根据index在change的第index块中解析附加日志结构;

17)设置附加日志标志信息、开始列信息;

18)从change的index+1块中读取主键的列id(此id从1而非0开始),得到列号index;

19)从change第index+3块数据开始,根据opSupplemental.totalCols,逐个解析,获得主键列数据,column id与列号list对应;

20)添加到之前的改变列数据list中,然后重新继续新的数据抽取。

 3 测试结果与分析

为验证前映像数据抽取模型的可行性,搭建如图6所示的测试环境。本文设计的抽取模型软件系统架构由2部分组成,包括数据复制层与管理层。其中数据复制层由数据库抽取工具组成,抽取工具分别部署在源端数据库服务器(1台16核64 GB内存、Oracle11g数据库)、目标端数据库服务器(1台16核64 GB内存、oracle11g数据库);管理层由数据库抽取管理工具组成,抽取管理工具部署在管理库服务器(16核64 GB内存、Oracle11g数据库)与应用服务器(16核64 GB内存)。测试环境中网络带宽100 Mb/s,其余测试参数不再详述。

图6 测试环境拓扑Fig.6 Test environment topology

测试源端数据库执行DML操作时,数据抽取记录如图7所示。

图7 数据抽取记录Fig.7 Data extraction record

图7可以看出执行的DML操作数据已被抽取转换成数据对象格式,数据对象记录了详细的操作过程数据,后续在数据投递到目标端后,可以根据目标端数据库类型,组装成相应的SQL语句。

统计结果表明本文设计的前映像数据复制模型可以从Undo日志中抽取出变化附加日志信息,将抽取后的数据与源数据库信息进行比对,验证了抽取数据的完整性,进一步说明复制模型具有一定的工程应用价值。

 4 结语

数据库前映像数据抽取是数据复制领域中的关键技术,当前业界主要是以goldenGate为代表的逻辑级数据库日志抽取产品。本文设计了一种高效的数据抽取模型,测试结果证明该模型具有较好的实用价值。下一步将针对复杂混合云环境下分布式数据库前映像数据抽取技术进行研究,完善数据抽取模型,更好的支撑智能电网建设。

大云网官方微信售电那点事儿

责任编辑:售电衡衡

免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
我要收藏
个赞