数据库数据实时同步方法及设备
技术领域
本发明实施例涉及数据库同步技术领域,尤其涉及一种数据库数据实时同步方法及设备。
背景技术
在数据库数据实时同步技术中,其中基于数据库日志分析的数据实时同步技术因其具备支持异构操作***和数据库平台、对源端数据库***侵入性较小、数据同步延时低等特点,而得到广泛研究和应用。异构数据库***之间的日志格式及日志内容差异较大,因此数据同步源端数据库的日志内容并不能直接应用到目标数据库中。基于日志分析的数据实时同步技术,一般原理是捕获源端数据库的增量日志内容,然后通过网络发送至目标端,在目标端使用SQL逆向生成技术恢复源端数据库的事务操作SQL语句,再通过通用的数据库访问接口如ODBC、OCI等接口,执行恢复后的SQL语句,实现源和目标端的数据实时同步。
在同步***目标端,同步软件日志接收模块,接收源端发送的消息,并解析消息内容,根据事务ID将同属于一个事务的操作进行缓存,当接收到事务的COMMIT消息时,则交由日志执行模块进行同步执行;同步软件日志执行模块,根据事务操作内容,构建SQL语句,在目标数据库同步执行。
上述数据库数据实时同步技术,包含了日志读取、日志解析、日志发送、日志接收、SQL逆向生成、SQL执行等一系列过程。这种处理流程对于一些数据量较大的批量数据,同步效率会较为低下。例如源端数据库在运维时,会执行批量的更新或删除大量的数据的SQL语句,这种运维操作会产生大量的日志,同步这些操作将会严重的拖慢同步软件的同步性能,造成较大的同步延时,影响同步应用。因此,找到一种能够实时高效地在源端与目标端数据库之间进行数据同步服务的方法,就成为业界广泛关注的技术问题。
发明内容
针对现有技术存在的上述问题,本发明实施例提供了一种数据库数据实时同步方法及设备。
第一方面,本发明的实施例提供了一种数据库数据实时同步方法,包括:在源端数据库中创建辅助表,并在所述辅助表中***同步的SQL语句,源端数据库同步服务捕获并分析源端数据库事务日志,若解析到所述辅助表操作,则对所述辅助表操作所属事务进行标识,并将该事务中除辅助表操作以外的操作都丢弃,得到分析后的消息包,并发送至目标端数据库同步服务;在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,并同步执行所述待同步的SQL操作语句。
进一步地,所述辅助表操作,包括:INSERT辅助表操作,用于向所述辅助表中***所述待同步的SQL操作语句。
进一步地,所述源端数据库同步服务捕获并分析源端数据库事务日志,包括:捕获源端数据库事务日志后,提取事务ID、表ID、操作类型和操作数据。
进一步地,所述在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,包括:根据所述事务ID,将属于同一事务操作进行归类缓存,通过所述操作类型和表ID,识别出所述INSERT辅助表操作,并从所述INSERT辅助表操作中,提取所述待同步的SQL操作语句;若所述待同步的SQL操作语句合法,并且解析到COMMIT操作,则将所述待同步的SQL操作语句,置于待执行状态。
进一步地,所述若所述待同步的SQL操作语句合法,包括:若所述待同步的SQL操作语句中包含非静态函数,则不合法;若所述待同步的SQL操作语句所涉及的表未使用全路径,则不合法。
进一步地,所述并同步执行所述待同步的SQL操作语句,包括:若同步执行所述待同步的SQL操作语句需要表映射,则对所述待同步的SQL操作语句中的对象名进行映射,并反拼从而还原映射后的待同步的SQL操作语句。
进一步地,所述并同步执行所述待同步的SQL操作语句,包括:按照所述源端数据库事务日志提交的顺序,同步执行所述待同步的SQL操作语句。
第二方面,本发明的实施例提供了一种数据库数据实时同步装置,包括:
消息包获取模块,用于在源端数据库中创建辅助表,并在所述辅助表中***同步的SQL语句,源端数据库同步服务捕获并分析源端数据库事务日志,若解析到所述辅助表操作,则对所述辅助表操作所属事务进行标识,并将该事务中除辅助表操作以外的操作都丢弃,得到分析后的消息包,并发送至目标端数据库同步服务;
SQL操作语句同步执行模块,用于在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,并同步执行所述待同步的SQL操作语句。
第三方面,本发明的实施例提供了一种电子设备,包括:
至少一个处理器;以及
与处理器通信连接的至少一个存储器,其中:
存储器存储有可被处理器执行的程序指令,处理器调用程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据库数据实时同步方法。
第四方面,本发明的实施例提供了一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据库数据实时同步方法。
本发明实施例提供的数据库数据实时同步方法及设备,通过在辅助表中***需要执行的辅助表操作(如SQL操作),并剔除所述辅助表操作以外的其他操作,仅将含有辅助表操作的日志打包发送至目标端数据库同步服务,可以较快的速率实现数据库数据的实时同步。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的数据库数据实时同步方法流程图;
图2为相关技术提供的数据库数据同步总体架构示意图;
图3为本发明实施例提供的数据库数据实时同步装置结构示意图;
图4为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
数据库的数据实时同步的原理可以参见图2。由图2中可见,源端同步服务实时读取并解析源端数据库中的日志。对于异构数据库***数据同步,源数据库的日志信息并不能直接应用于目标数据库,需要对源数据库的日志信息进行转换,生成软件内部特定格式的消息包,并且在内部消息包的控制信息中会进行特殊标识。源端同步服务会将解析后获取的源端数据库中的日志,发送给目标端同步服务,目标端同步服务接收日志后,回馈消息响应给源端同步服务(如SQL的逆向生成),最后在目标端数据库与源端数据库中同步执行日志中的相关操作(如执行SQL操作)。上述数据库数据实时同步中,包含了日志读取、日志解析、日志发送、日志接收、SQL逆向生成和SQL执行等过程。这种处理流程对于一些数据量较大的批量数据,同步效率较为低下。基于这种认识,本发明实施例提供了一种数据库数据实时同步方法,参见图1,该方法包括:
101、在源端数据库中创建辅助表,并在所述辅助表中***同步的SQL语句,源端数据库同步服务捕获并分析源端数据库事务日志,若解析到所述辅助表操作,则对所述辅助表操作所属事务进行标识,并将该事务中除辅助表操作以外的操作都丢弃,得到分析后的消息包,并发送至目标端数据库同步服务;
102、在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,并同步执行所述待同步的SQL操作语句。
在上述实施例的基础上,本发明实施例中提供的数据库数据实时同步方法,所述辅助表操作,包括:INSERT辅助表操作,用于向所述辅助表中***所述待同步的SQL操作语句。
在上述实施例的基础上,本发明实施例中提供的数据库数据实时同步方法,所述源端数据库同步服务捕获并分析源端数据库事务日志,包括:捕获源端数据库事务日志后,提取事务ID、表ID、操作类型和操作数据。
在上述实施例的基础上,本发明实施例中提供的数据库数据实时同步方法,所述在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,包括:根据所述事务ID,将属于同一事务操作进行归类缓存,通过所述操作类型和表ID,识别出所述INSERT辅助表操作,并从所述INSERT辅助表操作中,提取所述待同步的SQL操作语句;若所述待同步的SQL操作语句合法,并且解析到COMMIT操作,则将所述待同步的SQL操作语句,置于待执行状态。
在上述实施例的基础上,本发明实施例中提供的数据库数据实时同步方法,所述若所述待同步的SQL操作语句合法,包括:若所述待同步的SQL操作语句中包含非静态函数,则不合法;若所述待同步的SQL操作语句所涉及的表未使用全路径,则不合法。
在上述实施例的基础上,本发明实施例中提供的数据库数据实时同步方法,所述并同步执行所述待同步的SQL操作语句,包括:若同步执行所述待同步的SQL操作语句需要表映射,则对所述待同步的SQL操作语句中的对象名进行映射,并反拼从而还原映射后的待同步的SQL操作语句。
在上述实施例的基础上,本发明实施例中提供的数据库数据实时同步方法,所述并同步执行所述待同步的SQL操作语句,包括:按照所述源端数据库事务日志提交的顺序,同步执行所述待同步的SQL操作语句。
本发明实施例提供的数据库数据实时同步方法,通过在辅助表中***需要执行的辅助表操作(如SQL操作),并剔除所述辅助表操作以外的其他操作,仅将含有辅助表操作的日志打包发送至目标端数据库同步服务,可以较快的速率实现数据库数据的实时同步。
为了更加清晰的阐述本发明的技术方案的本质,在上述实施例的基础上,拟提出一个整体的实施例,从整体上展现本发明技术方案的全貌。需要说明的是,该整体实施例仅仅是为了将本发明的技术本质进一步体现出来,并不是对本发明保护范围的限制,本领域技术人员在本发明各个实施例的基础上,通过组合技术特征,得到的任何满足本发明技术方案本质的组合型技术方案,只要能够实际实施,均在本专利的保护范围之内。
S1)在同步***源端数据库中创建一张DMHS_SQL辅助表,该表结构如表1所示:
表1
字段名 |
字段类型 |
字段说明 |
SQLTEXT |
varchar(3000) |
存储待执行的事务操作SQL语句或NULL值 |
DT |
date |
操作日期时间,默认***日期 |
S2)在源端数据库执行事务操作时,在事务操作的最后加上一个INSERT辅助表操作,将事务操作的SQL语句作为字符串值***到辅助表中;具体示例如下:
S3)同步***中的源端数据库同步服务,捕获并分析源端数据库事务日志,当解析到日志中的事务信息包含辅助表操作时,对该事务中的辅助表的INSERT操作进行标识,该事务的其他操作直接丢弃,从而节省开销。
S4)同步***中的源端数据库同步服务,将分析完成的消息包存储在发送队列中,日志发送模块通过网络,将消息发送到目标端数据库同步服务。
源端同步服务的主要工作流程可以描述如下:在源端数据库中创建一张辅助表,源端同步服务实时捕获源数据库增量日志,并对日志进行分析,提取日志中诸如事务ID、表ID、操作类型、操作数据等信息,并打包成内部消息包。最后将消息包发送到目标端数据库进行数据的同步。
S5)同步***中的目标端数据库同步服务,接收源端数据库同步服务发送过来的消息包,并进行拆包处理。具体的拆包处理,可以详见如下步骤:
S5-1)根据消息包中的事务ID,将同属于一个事务的所有操作进行归类缓存。
进一步的,如上述步骤S2所示事务,包含2个INSERT操作和1个提交操作,其中INSERT操作分别包含了两条SQL语句:
操作1:INSERT操作,delete from sysdba.t1 where id>1000000 and id<9000000
操作2:INSERT操作,delete from sysdba.t2where id>1000000 and id<9000000
操作3:COMMIT操作
上述事务产生的其它操作在源端已经被丢弃,从而节省了大量的分析时间和传输时间,大大的提高了维护事务的解析和传输的效率。
S5-2)通过判断消息包中的消息操作类型,识别出辅助表的INSERT操作,并提取出INSERT中的SQL语句。
S5-3)通过分析INSERT中的SQL语句,对同步的SQL进行合法性判断,检查SQL中是否包含非静态的函数表达式,如果存在则报错处理;涉及的表名对像是否使用了全路径,如果未使用全路径,则报错处理。
进一步的,如果同步需要表映射,需要对分析SQL后产生的词法树中的对像名进行映射处理,然后再反拼还原出映射后的SQL语句。
S5-4)若解析到事务的COMMIT操作时,将待同步的SQL操作语句,提交给日志执行模块进行应用执行。
S6)同步***中的目标端数据库同步服务,在同步待执行的SQL操作语句时,需要严格遵守事务之间的提交顺序来先后执行,从而实现源和目标端数据库的数据同步
本发明各个实施例的实现基础是通过具有处理器功能的设备进行程序化的处理实现的。因此在工程实际中,可以将本发明各个实施例的技术方案及其功能封装成各种模块。基于这种现实情况,在上述各实施例的基础上,本发明的实施例提供了一种数据库数据实时同步装置,该装置用于执行上述方法实施例中的数据库数据实时同步方法。参见图3,该装置包括:
消息包获取模块301,用于在源端数据库中创建辅助表,并在所述辅助表中***同步的SQL语句,源端数据库同步服务捕获并分析源端数据库事务日志,若解析到所述辅助表操作,则对所述辅助表操作所属事务进行标识,并将该事务中除辅助表操作以外的操作都丢弃,得到分析后的消息包,并发送至目标端数据库同步服务;
SQL操作语句同步执行模块302,用于在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,并同步执行所述待同步的SQL操作语句。
本发明实施例提供的数据库数据实时同步装置,采用消息包获取模块和SQL操作语句同步执行模块,通过在辅助表中***需要执行的辅助表操作(如SQL操作),并剔除所述辅助表操作以外的其他操作,仅将含有辅助表操作的日志打包发送至目标端数据库同步服务,可以较快的速率实现数据库数据的实时同步。
本发明实施例的方法是依托电子设备实现的,因此对相关的电子设备有必要做一下介绍。基于此目的,本发明的实施例提供了一种电子设备,如图4所示,该电子设备包括:至少一个处理器(processor)401、通信接口(Communications Interface)404、至少一个存储器(memory)402和通信总线403,其中,至少一个处理器401,通信接口404,至少一个存储器402通过通信总线403完成相互间的通信。至少一个处理器401可以调用至少一个存储器402中的逻辑指令,以执行如下方法:在源端数据库中创建辅助表,并在所述辅助表中***同步的SQL语句,源端数据库同步服务捕获并分析源端数据库事务日志,若解析到所述辅助表操作,则对所述辅助表操作所属事务进行标识,并将该事务中除辅助表操作以外的操作都丢弃,得到分析后的消息包,并发送至目标端数据库同步服务;在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,并同步执行所述待同步的SQL操作语句。
此外,上述的至少一个存储器402中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。例如包括:在源端数据库中创建辅助表,并在所述辅助表中***同步的SQL语句,源端数据库同步服务捕获并分析源端数据库事务日志,若解析到所述辅助表操作,则对所述辅助表操作所属事务进行标识,并将该事务中除辅助表操作以外的操作都丢弃,得到分析后的消息包,并发送至目标端数据库同步服务;在目标端数据库同步服务对所述分析后的消息包进行拆包,得到待同步的SQL操作语句,并同步执行所述待同步的SQL操作语句。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。