一种对DB2数据库建表日志列名解析的方法及装置制造方法及图纸

技术编号:28373617 阅读:20 留言:0更新日期:2021-05-08 00:00
本发明专利技术公开了一种对DB2数据库建表日志列名解析的方法及装置,该方法包括:步骤S1,在解析建表日志时,对原始SQL日志进行解析,从SQL语句中分离出表名和schema名,并存入用于表示表基本信息的一解析结构体中;步骤S2,对初始化表的日志,从中获取表ID、表空间ID以及表的各列属性信息,存入解析结构体中,并构建一个任务结构体,于任务结构体设置一个建表操作的标志数,将获取到的表ID、表空间ID存任务结构体中;步骤S3,按照任务队列的顺序读取任务结构体,根据所述任务结构体、解析结构体及数据库系统表获取表名、schema名、列名、列属性信息拼装成JSON格式的SQL操作基本信息发送到KAFKA。

【技术实现步骤摘要】
一种对DB2数据库建表日志列名解析的方法及装置
本专利技术涉及计算机数据备份容灾
,特别是涉及一种对DB2数据库建表日志列名解析的方法及装置。
技术介绍
DB2为IBM开发的一种大型关系型数据库平台,它支持多用户或应用程序在同一条SQL语句中查询不同database甚至不同DBMS中的数据,是目前使用最广泛的关系数据库系统之一。目前,DB2数据库在解析CreateTable(建表)日志时会依次产生三种类型的日志数据:一种是Componentidentifier为11、Functionidentifier为4的原始SQL日志记录,需要设置数据库属性LOG_DDL_STMTS为YES;一种是Componentidentifier为4、Functionidentifier为101的建表日志记录;还有一种是Componentidentifier为1、Functionidentifier为128的初始化表的日志记录,要求在建表或修改表时声明datacapturechanges属性,其中,原始SQL日志记录包括输入SQL的原文,建表日志的数据均为数据库内部使用,初始化表日志中主要包含表的列属性与列的个数等。在实时解析CreateTable(建表)操作时,需获取到表名与表结构,其中表结构主要包括列名与列属性,可以从原始SQL日志记录分析中获取表名、在初始化表日志中可获取到列属性但没有列名,而在解析完毕将JSON格式的新建表的基本信息发送至KAFKA时,需要发送表名、schema名、列名、列属性等信息。为解决上述问题,目前直接方法一般采取从原始SQL日志中直接解析SQL语句,按照CreateTable(建表)的语法或其他特征来分解SQL语句的各个单词,从而获取列名。但是,以SQL语法来解析CreateTable(建表)语句中的各类信息,基本等同于实现一个用于解析CreateTable(建表)语句的编译器,这样虽然能保证程序完善,但对开发人员的技术水平要求较高,实现起来过于复杂、费时;用SQL语句里的其他特征(如空格、逗号和左右括号等)以字符串匹配的方式来解析CreateTable(建表)语句中的各类信息,虽然实现起来较为简单,但是难以覆盖使用CreateTable(建表)操作的各种情形,可能导致CreateTable(建表)操作解析失败甚至程序崩溃。
技术实现思路
为克服上述现有技术存在的不足,本专利技术之目的在于提供一种对DB2数据库建表日志列名解析的方法及装置,以实现在Createtable(建表)日志解析中获取列名的目的。为达上述目的,本专利技术提出一种对DB2数据库建表日志列名解析的方法,包括如下步骤:步骤S1,在解析建表日志时,对原始SQL日志进行解析,从SQL语句中分离出表名和schema名,并存入用于表示表基本信息的一解析结构体中;步骤S2,对初始化表的日志,从中获取表ID、表空间ID以及表的各列属性信息,存入所述解析结构体中,并构建一个任务结构体,于所述任务结构体设置一个建表操作的标志数,将获取到的表ID、表空间ID存所述任务结构体中;步骤S3,按照任务队列的顺序读取任务结构体,并判断是否建表操作,对于建表操作,根据所述任务结构体、解析结构体及数据库系统表获取表名、schema名、列名、列属性等信息拼装成JSON格式的SQL操作的基本信息发送到KAFKA。优选地,于步骤S1中,对于原始SQL日志中带括号的建表语句,对其按照首个左括号和其前的空格分离得到表名和schema名。优选地,对于原始SQL日志中不带括号的建表语句,根据建表语法分离得到表名和schema名。优选地,于步骤S3中,首先按照任务队列的顺序读取任务结构体,根据步骤S2中设置的标志数确定当前任务结构体的操作是否建表操作,若是建表操作,再根据所述任务结构体中保存的表ID和表空间ID找到相应的解析结构体;依据所述解析结构体提供的表名以及表的schema名于数据库系统表中查询获得相应的列名,并将列名存入所述解析结构体,使所述解析结构体中的列属性和列名相互对应;最后将所述解析结构体中的表名、schema名、各列列名和列属性等拼装成JSON格式的建表操作的基本信息,并将其发送至KAFKA。优选地,在将相应的列名存入所述解析结构体之前,将查询到的信息存入一个新的暂时结构体中,并将其与所述解析结构体进行比较,进行异常处理。优选地,于步骤S3中,在将相应的列名存入所述解析结构体之前,判断所述解析结构体与所述暂时结构体中保存的列个数和列的属性是否均相同,若所述解析结构体与暂时结构体中保存的列个数和列的属性均相同,则可认为是同一张表,则将所述暂时结构体中的列名依次复制到所述解析结构体中,完成建表操作的列名解析。优选地,若所述解析结构体与暂时结构体中保存的列个数和列的属性不均相同,则认为出错,产生提示信息,提示当前表可能已被删除并退出。为达到上述目的,本专利技术还提供一种对DB2数据库建表日志列名解析的装置,包括:原始SQL日志解析单元,用于在解析建表日志时,对原始SQL日志进行解析,从SQL语句中分离出表名和schema名,并存入表示表基本信息的一解析结构体中;初始化表日志解析单元,用于对初始化表的日志,从中获取表ID、表空间ID以及表的各列属性信息,存入所述解析结构体中,并构建一个任务结构体,于所述任务结构体设置一个建表操作的标志数,把获取到的表ID、表空间ID存入所述任务结构体中;解析查询单元,用于按照任务队列txn的顺序读取任务结构体,并判断是否建表操作,对于建表操作,根据所述任务结构体、解析结构体及数据库系统表获取表名、schema名、列名、列属性等信息拼装成JSON格式的SQL操作的基本信息发送到KAFKA。优选地,所述解析查询单元根据所述初始化表日志解析单元设置的标志数确定当前操作是否建表操作,再根据所述任务结构体中保存的表ID和表空间ID找到相应的解析结构体;依据所述解析结构体提供的表名以及表的schema名于数据库系统表中查询获得相应的列名,并将列名存入所述解析结构体,使所述解析结构体中的列属性和列名相互对应;最后将所述解析结构体中的表名、schema名、各列列名和列属性拼装成JSON格式的建表操作的基本信息,并将其发送至KAFKA。优选地,所述装置还包括异常处理单元,用于在将相应的列名存入所述解析结构体之前,判断所述解析结构体与所述暂时结构体中保存的列个数和列的属性是否均相同,若所述解析结构体与暂时结构体中保存的列个数和列的属性均相同,则可认为是同一张表,则将所述暂时结构体中的列名依次复制到所述解析结构体中,完成建表操作的列名解析。与现有技术相比,本专利技术一种对DB2数据库建表日志列名解析的方法及装置通过解析日志时,首先从SQL语句中分离出表名和schema名,从初始化表的日志中获取获取表ID、表空间ID以及表的各列属性信息,并将该些信息统一保存在解析结构体中,同时构建一个任务结构体,于所述任务结构体设置一个建表操作的标志本文档来自技高网
...

【技术保护点】
1.一种对DB2数据库建表日志列名解析的方法,包括如下步骤:/n步骤S1,在解析建表日志时,对原始SQL日志进行解析,从SQL语句中分离出表名和schema名,并存入用于表示表基本信息的一解析结构体中;/n步骤S2,对初始化表的日志,从中获取表ID、表空间ID以及表的各列属性信息,存入所述解析结构体中,并构建一个任务结构体,于所述任务结构体设置一个建表操作的标志数,将获取到的表ID、表空间ID存所述任务结构体中;/n步骤S3,按照任务队列的顺序读取任务结构体,并判断是否建表操作,对于建表操作,根据所述任务结构体、解析结构体及数据库系统表获取表名、schema名、列名、列属性等信息拼装成JSON格式的SQL操作的基本信息发送到KAFKA。/n

【技术特征摘要】
1.一种对DB2数据库建表日志列名解析的方法,包括如下步骤:
步骤S1,在解析建表日志时,对原始SQL日志进行解析,从SQL语句中分离出表名和schema名,并存入用于表示表基本信息的一解析结构体中;
步骤S2,对初始化表的日志,从中获取表ID、表空间ID以及表的各列属性信息,存入所述解析结构体中,并构建一个任务结构体,于所述任务结构体设置一个建表操作的标志数,将获取到的表ID、表空间ID存所述任务结构体中;
步骤S3,按照任务队列的顺序读取任务结构体,并判断是否建表操作,对于建表操作,根据所述任务结构体、解析结构体及数据库系统表获取表名、schema名、列名、列属性等信息拼装成JSON格式的SQL操作的基本信息发送到KAFKA。


2.如权利要求1所述的一种对DB2数据库建表日志列名解析的方法,其特征在于:于步骤S1中,对于原始SQL日志中带括号的建表语句,对其按照首个左括号和其前的空格分离得到表名和schema名。


3.如权利要求2所述的一种对DB2数据库建表日志列名解析的方法,其特征在于:对于原始SQL日志中不带括号的建表语句,根据建表语法分离得到表名和schema名。


4.如权利要求3所述的一种对DB2数据库建表日志列名解析的方法,其特征在于:于步骤S3中,首先按照任务队列的顺序读取任务结构体,根据步骤S2中设置的标志数确定当前任务结构体的操作是否建表操作,若是建表操作,再根据所述任务结构体中保存的表ID和表空间ID找到相应的解析结构体;依据所述解析结构体提供的表名以及表的schema名于数据库系统表中查询获得相应的列名,并将列名存入所述解析结构体,使所述解析结构体中的列属性和列名相互对应;最后将所述解析结构体中的表名、schema名、各列列名和列属性等拼装成JSON格式的建表操作的基本信息,并将其发送至KAFKA。


5.如权利要求4所述的一种对DB2数据库建表日志列名解析的方法,其特征在于:在将相应的列名存入所述解析结构体之前,将查询到的信息存入一个新的暂时结构体中,并将其与所述解析结构体进行比较,进行异常处理。


6.如权利要求5所述的一种对DB2数据库建表日志列名解析的方法,其特征在于:于步骤S3中,在将相应的列名存入所述解析结构体之前,判断所述解析结构体与所述暂时结构体中保存的...

【专利技术属性】
技术研发人员:蓝炳雄高志会胡军擎江俊
申请(专利权)人:上海英方软件股份有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1