一种关系数据库前映像的附加日志解析模型研究
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.2 追踪文件解析
追踪文件(Trace file)是以trc为后缀的文本文件,记录了各种SQL操作及所消耗的时间等。根据追踪文件可以查询到详细的数据库操作过程,包括SEQ、SCN、KDO、OPCode等详细的事务过程信息。具体追踪文件内容如
通过追踪文件中的内容,可以依次推理出数据库每一种操作码对应的标记位以及对应的执行过程内容,为下一步抽取有效操作内容奠定基础。
1.3 Undo 数据块文件解析
利用Oracle内部工具数据库块浏览编辑器(BBED)可以直接查看和修改日志数据块文件。通过BBED工具DUMP日志文件块查看Oracle内部Undo日志块内容,如
1.4 Undo 日志文件结构
通过分析追踪文件,将追踪文件内容与Undo数据块与十六进制数据块相匹配,分析解读Undo日志格式,经过多次比对,推断出Redo日志文件结构。
Redo日志由操作系统头(OS Head Block)、Undo头标记段(Undo Head Block)与Undo数据块(Undo Data Block)3种类型数据块组成。其中操作系统头位于第一个块,Undo头标记段位于第二个块,从第三块开始为Undo数据块。Undo日志文件结构如
日志文件通常使用操作系统的块大小,一般为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结构(见
2.2 数据抽取引擎流程设计
在确定KDO结构后,对前映像日志数据块内容进行具体解析。针对前映像数据块内部结构特点,本文设计了日志数据抽取引擎,通过获取数据库版本信息、解析前映像的change第4块中的KDO数据,提取其中的操作码;根据不同的操作码采用不同的解析方式,获取附加日志数据块编号;根据附加日志结构,获取附加日志内部的主键列数据;将获取的主键列数据依次添加到改变列数据中。前映像数据抽取引擎如
主要流程描述如下:
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 测试结果与分析
为验证前映像数据抽取模型的可行性,搭建如
测试源端数据库执行DML操作时,数据抽取记录如
从
统计结果表明本文设计的前映像数据复制模型可以从Undo日志中抽取出变化附加日志信息,将抽取后的数据与源数据库信息进行比对,验证了抽取数据的完整性,进一步说明复制模型具有一定的工程应用价值。
4 结语
数据库前映像数据抽取是数据复制领域中的关键技术,当前业界主要是以goldenGate为代表的逻辑级数据库日志抽取产品。本文设计了一种高效的数据抽取模型,测试结果证明该模型具有较好的实用价值。下一步将针对复杂混合云环境下分布式数据库前映像数据抽取技术进行研究,完善数据抽取模型,更好的支撑智能电网建设。
责任编辑:售电衡衡
-
权威发布 | 新能源汽车产业顶层设计落地:鼓励“光储充放”,有序推进氢燃料供给体系建设
2020-11-03新能源,汽车,产业,设计 -
中国自主研制的“人造太阳”重力支撑设备正式启运
2020-09-14核聚变,ITER,核电 -
探索 | 既耗能又可供能的数据中心 打造融合型综合能源系统
2020-06-16综合能源服务,新能源消纳,能源互联网
-
新基建助推 数据中心建设将迎爆发期
2020-06-16数据中心,能源互联网,电力新基建 -
泛在电力物联网建设下看电网企业数据变现之路
2019-11-12泛在电力物联网 -
泛在电力物联网建设典型实践案例
2019-10-15泛在电力物联网案例
-
权威发布 | 新能源汽车产业顶层设计落地:鼓励“光储充放”,有序推进氢燃料供给体系建设
2020-11-03新能源,汽车,产业,设计 -
中国自主研制的“人造太阳”重力支撑设备正式启运
2020-09-14核聚变,ITER,核电 -
能源革命和电改政策红利将长期助力储能行业发展
-
探索 | 既耗能又可供能的数据中心 打造融合型综合能源系统
2020-06-16综合能源服务,新能源消纳,能源互联网 -
5G新基建助力智能电网发展
2020-06-125G,智能电网,配电网 -
从智能电网到智能城市