《一种基于日志的异构多源数据库同步方法.pdf》由会员分享,可在线阅读,更多相关《一种基于日志的异构多源数据库同步方法.pdf(8页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN102346775A43申请公布日20120208CN102346775ACN102346775A21申请号201110287814422申请日20110926G06F17/3020060171申请人苏州博远容天信息科技有限公司地址215000江苏省苏州市高新区科灵路2号苏高新软件园4幢4层72发明人董阳董斌李德逸王伟信孙学磊74专利代理机构南京经纬专利商标代理有限公司32200代理人楼高潮54发明名称一种基于日志的异构多源数据库同步方法57摘要本发明公开了一种基于日志的异构多源数据库同步方法,包括以下四个步骤1)源数据读取,在源数据库端根据源数据库的日志文件,提取源数据库的。
2、操作,反向生成数据操作的SQL执行脚本;2)SQL脚本传递;3)数据冲突处理;4)目标数据写入。本发明用于实现异构的多个源数据库和目标数据库之间的数据同步,能够跨越数据库异构的障碍,并且对源数据库没有任何性能和结构方面的影响。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书4页附图1页CN102346795A1/2页21一种基于日志的异构多源数据库同步方法,其特征在于,包括以下步骤步骤1)源数据读取,在源数据库端根据源数据库的日志文件,提取源数据库的操作,反向生成数据操作的SQL执行脚本;步骤2)SQL脚本传递;步骤3)数据冲突处理;步骤4)目标数据写入。2根。
3、据权利要求1所述的基于日志的异构多源数据库同步方法,其特征在于,所述步骤1的具体步骤如下步骤11)在源数据库端通过源数据库的内置系统函数FN_DBLOG读取SQL的日志文件,将事先作为参数配置好的需要同步数据的表名称作为查询条件得到要同步表的所有日志,并将“LOP_INSERT_ROWS”、“LOP_DELETE_ROWS”、“LOP_UPDATE_ROWS”三个参数作为条件筛选对同步表进行新增、删除、修改进行操作的语句,最后得到二进制的行数据;步骤12)通过DBCCLOGDBIDDBNAME,TYPE01对二进制的行数据进行分析先取定长字段,根据表结构指定长度,忽略不定长字段和其他不支持以及。
4、不需要考虑的字段,循环变长字段列表读取数据,就此得到行数据的对应格式,字段类型、字段名称、占用列数、变长和列对应字段的内容,然后对该内容进行拼接,得到相应增加、删除、修改的SQL执行脚本步骤13)根据作为参数配置好的需要同步数据的表名称,从二进制的行数据中获取该表的表结构,成为SQL附属脚本。3根据权利要求1所述的基于日志的异构多源数据库同步方法,其特征在于,所述步骤2的具体步骤如下步骤21)SQL执行脚本生成,传递完成信号,目的数据库端从源数据库端获取SQL执行脚本;步骤22)对所述SQL执行脚本标注获取的源数据库的数据库类型、版本、IP地址、数据库名称及将SQL附属脚本也作为标记;步骤23。
5、)将所述SQL执行脚本及其附属标记存入临时表。4根据权利要求1所述的基于日志的异构多源数据库同步方法,其特征在于,所述步骤3的具体步骤如下读取临时表数据,将源数据库SQL执行脚本,根据SQL附属脚本,按目标数据库的数据类型进行转换,转换表结构的字段类型,转换列对应字段的数据内容的存储格式,根据以上转换将SQL执行脚本按对应的方式进行相应的转换,生成可在目标数据库顺利执行的SQL语句,用目标数据库的SQL分析命令进行语句检查,检查通过,存入转换后的SQL执行脚本,进入下一步,否则,重新转换SQL执行脚本,直到读取临时表结束;将临时表中同一目标表的数据按在源数据库中执行时间进行排序,删除不同的源数。
6、据库中重复的SQL执行脚本,按照预设置的处理逻辑对SQL执行脚本进行优化,然后按时间重新进行序列处理。5根据权利要求4所述的基于日志的异构多源数据库同步方法,其特征在于,所述优化的方法如下1)将多条数据插入语句合并为一条数据批量插入语句;权利要求书CN102346775ACN102346795A2/2页32)将多条数据删除语句合并为一条数据删除语句;3)将多条对同一主键的行数据修改语句合并为一条数据修改语句;4)在数据批量插入语句后增加NOLOGGING选项,使其执行时,提高执行速度。6根据权利要求1或2或3或4或5所述的基于日志的异构多源数据库同步方法,其特征在于,所述步骤4的具体步骤如下将。
7、周期内的SQL脚本按标注的序号,在目的数据库端逐一执行,单条SQL脚本执行时,不进行数据库提交,全部执行完成后,统一提交。权利要求书CN102346775ACN102346795A1/4页4一种基于日志的异构多源数据库同步方法0001技术领域0002本发明属于数据库同步领域,具体涉及一种基于日志的异构多源数据库同步方法。0003背景技术0004目前在数据库同步领域,同类数据库之间的数据同步有着比较完善的方法,如SQLSERVER的数据复制、发布。0005异构数据库之间的数据同步也有着较多的方式,如异构数据库数据的统合中间件、异构数据库基于SQL的数据同步等相关方法,但都不太完善,存在着一些问题。
8、。0006具体问题包括1、对源数据库有读取数据操作,影响了源数据库的性能;2、需要在目标数据库建立中间表,影响了目标数据库的完整性;3、只能对单个异构源数据库和目标数据库之间同步,不能对异构的多源数据库与单一目标数据库同步。0007而数据同步是不能对源数据库有任何性能和结构有任何影响的,否则会对源数据库的管理造成极大的困扰。0008而异构多源数据库的同步是目前信息化集成、解决信息孤岛等集成化项目中迫切需要的一种数据库同步接口方式。0009在数据库同步领域,一直在寻求相应解决的方法,是当前重要的研发课题之一。0010发明内容0011为克服现有技术中不足,本发明旨在提供一种基于日志的异构多源数据库。
9、同步方法,该方法以使得数据能够在多源数据库与目标数据库之间同步,能够跨越数据库异构的障碍,并且对源数据库没有任何性能和结构方面的影响。0012为实现上述技术目的,为达到上述技术效果,本发明通过以下具体的技术方案实现一种基于日志的异构多源数据库同步发放,包括以下步骤步骤1)源数据读取,在源数据库端根据源数据库的日志文件,提取源数据库的操作,反向生成数据操作的SQL执行脚本。0013在源数据库端通过源数据库的内置系统函数FN_DBLOG读取SQL的日志文件,将事先作为参数配置好的需要同步数据的表名称作为查询条件得到要同步表的所有日志,并将“LOP_INSERT_ROWS”、“LOP_DELETE_。
10、ROWS”和“LOP_UPDATE_ROWS”三个参数作为条件筛选说明书CN102346775ACN102346795A2/4页5对同步表进行新增、删除、修改进行操作的语句,最后得到二进制的行数据,如“01220E02025200E7F2C01F29A03004500E20200”。0014通过DBCCLOGDBIDDBNAME,TYPE01对二进制的行数据进行分析,先取定长字段,根据表结构指定长度,忽略不定长字段和其他不支持以及不需要考虑的字段,循环变长字段列表读取数据,就此得到行数据的对应格式,字段类型、字段名称、占用列数、变长和列对应字段的内容,对该内容进行拼接,得到相应增加、删除、修改。
11、的SQL执行脚本。0015然后根据作为参数配置好的需要同步数据的表名称,从二进制的行数据中获取该表的表结构,成为SQL附属脚本。0016步骤2SQL脚本传递;SQL执行脚本生成,传递完成信号,目的数据库端从源数据库端获取SQL执行脚本;然后对该脚本标注获取的源数据库的数据库类型、版本、IP地址、数据库名称、并将SQL附属脚本也作为标记,最后将该SQL执行脚本及其附属标记存入临时表。0017源数据库端与目标数据库端SQL脚本传递的间隔时间,是由根据业务需要及网络现状,事先配置好的传输间隔参数SENDTIME来确定。0018步骤3数据冲突处理;源数据库与目标数据库数据类型不同,SQL执行脚本不能通。
12、用,需要转换格式,进行处理;多源数据库同时对目标数据库的目标表同步数据,会有数据冲突,需要进行序列处理。0019读取临时表数据,将源数据库SQL执行脚本,根据SQL附属脚本,按目标数据库的数据类型进行转换,转换表结构的字段类型,转换列对应字段的数据内容的存储格式,根据以上转换将SQL执行脚本按对应的方式进行相应的转换,生成可在目标数据库顺利执行的SQL语句,用目标数据库的SQL分析命令进行语句检查,检查通过,存入转换后的SQL执行脚本,进入下一步,否则,重新转换SQL执行脚本,直到读取临时表结束;将临时表中同一目标表的数据按在源数据库中执行时间进行排序,删除不同的源数据库中重复的SQL执行脚本。
13、,按照预设置的处理逻辑对SQL执行脚本进行优化。0020优化方式,将多条数据插入语句合并为一条数据批量插入语句;将多条数据删除语句合并为一条数据删除语句;将多条对同一主键的行数据修改语句合并为一条数据修改语句;在数据批量插入语句后增加NOLOGGING选项,使其执行时,提高执行速度。0021然后按时间重新进行序列处理。0022步骤目标数据写入。0023将周期内的SQL脚本按标注的序号,在目的数据库端逐一执行,单条SQL脚本执行时,不进行数据库提交,全部执行完成后,统一提交。0024与现有技术相比,本发明具有以下有益效果在于1、本发明的基于日志的异构多源数据库同步方法,能够对源数据库没有任何的数。
14、据读取操作,对源数据库的性能没有任何影响;2、本发明的基于日志的异构多源数据库同步方法,不会影响目标数据库的完整性;3、本发明的基于日志的异构多源数据库同步方法,能够对异构的多个源数据库与单一目标数据库进行数据同步,能够适应于大型的数据化集成项目。0025、本发明的基于日志的异构多源数据库同步方法,通过在数据冲突处理中的SQL说明书CN102346775ACN102346795A3/4页6执行脚本优化,能够极大的降低了目标数据库的SQL脚本的执行时间,增强了目标数据库的同步响应速度,适用于百万级的大批量数据同步。0026上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可。
15、依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。0027附图说明0028此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1为本发明的一种基于日志的异构多源数据库同步方法的流程示意图。0029具体实施方式0030下面将参考附图并结合实施例,来详细说明本发明。0031参见图1所示,一种基于日志的异构多源数据库同步方法,其特征在于,包括以下步骤步骤1)源数据读取,在源数据库端根据源数据库的日志文件,提取源数据库的操作,反向生成。
16、数据操作的SQL执行脚本;步骤2)SQL脚本传递;步骤3)数据冲突处理;步骤4)目标数据写入。0032进一步的,所述步骤1的具体步骤如下步骤11)在源数据库端通过源数据库的内置系统函数FN_DBLOG读取SQL的日志文件,将事先作为参数配置好的需要同步数据的表名称作为查询条件得到要同步表的所有日志,并将“LOP_INSERT_ROWS”、“LOP_DELETE_ROWS”、“LOP_UPDATE_ROWS”三个参数作为条件筛选对同步表进行新增、删除、修改进行操作的语句,最后得到二进制的行数据;步骤12)通过DBCCLOGDBIDDBNAME,TYPE01对二进制的行数据进行分析先取定长字段,根。
17、据表结构指定长度,忽略不定长字段和其他不支持以及不需要考虑的字段,循环变长字段列表读取数据,就此得到行数据的对应格式,字段类型、字段名称、占用列数、变长和列对应字段的内容,然后对该内容进行拼接,得到相应增加、删除、修改的SQL执行脚本步骤13)根据作为参数配置好的需要同步数据的表名称,从二进制的行数据中获取该表的表结构,成为SQL附属脚本。0033进一步的,所述步骤2的具体步骤如下步骤21)SQL执行脚本生成,传递完成信号,目的数据库端从源数据库端获取SQL执行脚本;步骤22)对所述SQL执行脚本标注获取的源数据库的数据库类型、版本、IP地址、数据库名称及将SQL附属脚本也作为标记;说明书CN。
18、102346775ACN102346795A4/4页7步骤23)将所述SQL执行脚本及其附属标记存入临时表。0034进一步的,所述步骤3的具体步骤如下读取临时表数据,将源数据库SQL执行脚本,根据SQL附属脚本,按目标数据库的数据类型进行转换,转换表结构的字段类型,转换列对应字段的数据内容的存储格式,根据以上转换将SQL执行脚本按对应的方式进行相应的转换,生成可在目标数据库顺利执行的SQL语句,用目标数据库的SQL分析命令进行语句检查,检查通过,存入转换后的SQL执行脚本,进入下一步,否则,重新转换SQL执行脚本,直到读取临时表结束;将临时表中同一目标表的数据按在源数据库中执行时间进行排序,删。
19、除不同的源数据库中重复的SQL执行脚本,按照预设置的处理逻辑对SQL执行脚本进行优化,然后按时间重新进行序列处理。0035进一步的,所述优化的方法如下1)将多条数据插入语句合并为一条数据批量插入语句;2)将多条数据删除语句合并为一条数据删除语句;3)将多条对同一主键的行数据修改语句合并为一条数据修改语句;4)在数据批量插入语句后增加NOLOGGING选项,使其执行时,提高执行速度。0036进一步的,所述步骤4的具体步骤如下将周期内的SQL脚本按标注的序号,在目的数据库端逐一执行,单条SQL脚本执行时,不进行数据库提交,全部执行完成后,统一提交。0037本发明实现了数据在多源异构数据库之间进行同步的及时性及高效性,在技术上具有突出的实时性特点和显著的进步。0038以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。说明书CN102346775ACN102346795A1/1页8图1说明书附图CN102346775A。