数据库中数据双向同步的方法及设备
技术领域
本发明实施例涉及数据库数据同步技术领域,尤其涉及一种数据库中数据双向同步的方法及设备。
背景技术
在基于日志分析的数据库数据实时同步领域,数据库双向同步架构的技术关键在于如何对同步日志信息进行有效的控制和过滤,防止在特殊的双向环境,如双向实时同步以及环型结构同步中造成数据同步的死循环。
目前,在数据库的DML(Data Manipulation Language数据操纵语言)操作同步过程中,为保证双向同步的各数据库能够正确的完成同步操作,一般采用的方法如下:在目标数据库中创建一个提交事务表,记录已完成的提交事务信息。该表为同步系统内部表,需要与普通同步表进行区分。目标数据库复制进程在接收到源端数据库的提交事务信息时,会先在目标数据库中执行相应的事务操作,然后再在提交事务表中插入一行事务信息记录,复制进程会将源端数据库发送过来的事务操作,与最后一条插入提交事务表的事务信息记录,一起设置为一个整体的事务进行提交操作。该技术策略有两个好处:一是充分利用事务的ACID特性(原子性:Atomicity、一致性:Consistency、隔离性:Isolation、持久性:Durability),将同步事务操作与插入提交事务表操作构成一个整体,保证执行与记录的完整性和一致性。二是目标库事务同步时,会操作内部提交事务表,复制进程可以根据该辅助表来识别出该事务是由复制进程传递的事务还是第三方应用执行的事务,从而有效进行事务信息的控制和过滤。虽然上述方法可以实现数据库双向同步的事务过滤,但是需要在源和目标端数据库中创建辅助表(即前述的提交事务表),并对辅助表进行插入操作,对数据库有一定的侵入性,在一些敏感的生产系统上,可能会存在风险。
另外,数据库的DDL(data defination language,数据库定义语言)操作则不能有效利用上述DML操作的策略进行双向同步中的控制。DDL操作只能作为独立事务进行操作,不能把操作目标库上的提交事务表和它所属的DDL操作合并成一个事务进行提交,导致日志捕获解析时无法标识出DDL操作的来源,无条件的同步DDL操作会导致该DDL操作在成环的同步链路中形成死循环。因此,找到一种在无需创建辅助表以及执行辅助表数据插入的情况下,实现DDL操作和DML操作的双向同步,避免同步操作陷入死循环的方法,就成为业界亟待解决的技术问题。
发明内容
针对现有技术存在的上述问题,本发明实施例提供了一种数据库中数据双向同步的方法及设备。
第一方面,本发明的实施例提供了一种数据库中数据双向同步的方法,包括:给双向数据同步服务分配标记,将分配标记后的双向数据同步服务,与相应的目标端数据库建立连接,并将所述标记设置在所述连接上;分析同步日志文件,获取日志操作中的事务,并提取所述事务中相应的所述标记,若所述标记中的值不与所述同步服务分配的标记值对应,则所述双向数据同步服务采用设置了所述标记的连接,将所述事务发送至目标端数据库进行同步。
进一步地,所述给双向数据同步服务分配标记,包括:给双向数据同步服务分配唯一标记。
进一步地,所述标记,包括:数字和/或字符串。
进一步地,所述并将所述标记设置在所述连接上,包括:采用DBMS_STREAMS数据包中的SET_TAG函数,将所述标记设置在所述连接上;其中,所述DBMS_STREAMS数据包由数据库提供。
进一步地,所述的数据库中数据双向同步的方法,还包括:若所述同步服务分配标记中的值与所述捕获到的事务中标记值相对应,则丢弃所述事务。
第二方面,本发明的实施例提供了一种数据库中数据双向同步的装置,包括:
标记设置于连接建立模块,用于给双向数据同步服务分配标记,将分配标记后的双向数据同步服务,与相应的目标端数据库建立连接,并将所述标记设置在所述连接上;
数据同步模块,用于分析同步日志文件,获取日志操作中的事务,并提取所述事务中相应的所述标记,若所述标记中的值不与所述同步服务分配的标记值对应,则所述双向数据同步服务采用设置了所述标记的连接,将所述事务发送至目标端数据库进行同步。
第三方面,本发明的实施例提供了一种电子设备,包括:
至少一个处理器;以及
与处理器通信连接的至少一个存储器,其中:
存储器存储有可被处理器执行的程序指令,处理器调用程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据库中数据双向同步的方法。
第四方面,本发明的实施例提供了一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据库中数据双向同步的方法。
本发明实施例提供的数据库中数据双向同步的方法及设备,通过在数据双向同步服务中分配标记,并将所述标记设置在连接上,根据所述标记判断事务有效性后,双向数据同步服务采用设置了标记的连接,将操作事务发送至目标端数据库进行同步,可以在无需创建辅助表以及执行辅助表数据插入的情况下,实现DDL操作和DML操作的双向同步,避免同步操作陷入死循环。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的数据库中数据双向同步的方法流程图;
图2为本发明实施例提供的数据库中数据双向同步的装置结构示意图;
图3为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
当前的数据库数据同步技术领域中,主要问题在于无法标识出DDL操作的来源的问题,针对普通的DML操作同步也无需在源和目标库上创建任何辅助表。采用数据库提供的DBMS_STREAMS包功能,该包中SET_TAG函数允许设置与数据库建立连接的标记,设置完标记的连接在做任何数据库修改动作时,产生的数据库日志中都会包含该标记信息。在日志分析时,可以借助事务中的连接标记信息区分出事务的具体来源。在此基础上,本发明实施例提供了一种数据库中数据双向同步的方法,参见图1,该方法包括:
101、给双向数据同步服务分配标记,将分配标记后的双向数据同步服务,与相应的目标端数据库建立连接,并将所述标记设置在所述连接上;
102、分析同步日志文件,获取日志操作中的事务,并提取所述事务中相应的所述标记,若所述标记中的值不与所述同步服务分配的标记值对应,则所述双向数据同步服务采用设置了所述标记的连接,将所述事务发送至目标端数据库进行同步。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库中数据双向同步的方法,所述给双向数据同步服务分配标记,包括:给双向数据同步服务分配唯一标记。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库中数据双向同步的方法,所述标记,包括:数字和/或字符串。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库中数据双向同步的方法,所述并将所述标记设置在所述连接上,包括:采用DBMS_STREAMS数据包中的SET_TAG函数,将所述标记设置在所述连接上;其中,所述DBMS_STREAMS数据包由数据库提供。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库中数据双向同步的方法,还包括:若所述同步服务分配标记中的值与所述捕获到的事务中标记值相对应,则丢弃所述事务。
本发明实施例提供的数据库中数据双向同步的方法,通过在数据双向同步服务中分配标记,并将所述标记设置在连接上,根据所述标记判断事务有效性后,双向数据同步服务采用设置了标记的连接,将操作事务发送至目标端数据库进行同步,可以在无需创建辅助表以及执行辅助表数据插入的情况下,实现DDL操作和DML操作的双向同步,避免同步操作陷入死循环。
为了更加清晰的阐述本发明的技术方案的本质,在上述实施例的基础上,拟提出一个参数细化的实施例,从整体上展现本发明技术方案的全貌。需要说明的是,该参数细化的实施例仅仅是为了将本发明的技术本质进一步体现出来,并不是对本发明保护范围的限制,本领域技术人员在本发明各个实施例的基础上,通过组合技术特征,得到的任何满足本发明技术方案本质的组合型技术方案,只要能够实际实施,均在本专利的保护范围之内。参数细化的实施例的具体步骤如下:
S1、为各双向数据同步服务分别分配唯一的标记,分别将双向同步服务分配标记为A和B;
S2、在各双向数据同步服务跟对应的目标端数据库建立连接以后,在连接上通过数据库提供的DBMS_STREAMS包的SET_TAG函数把该服务对应的标记设置到该连接上。其中标记为A的数据同步服务和数据库的连接设置连接标记为BEGIN DBMS_STREAMS.SET_TAG(TAG==>HEXTORAW('A'));END;标记为B的数据同步服务和数据库的连接设置连接标记为:BEGIN DBMS_STREAMS.SET_TAG(TAG==>HEXTORAW('B'));END;
S3、标记为A或B的数据同步服务在对同步的数据入库时,需要使用设有连接标记的连接和数据库进行交互。
S4、在同步时分析日志文件时,捕获日志操作中的事务并提取事务对应的连接标记信息,通过判断标记中的值来识别该事务是否是同步服务执行的事务,如果是则丢弃,否则就把该事务发往目标端数据同步,从而实现了双向同步的事务过滤和发送功能。
标记为A的数据同步服务需要分析捕获到的事务中的标记是否为字符A,如果是,则表明该事务为它自身向数据库执行的操作,直接丢弃,否则就把事务发送到标记为B的数据同步服务。
标记为B的数据同步服务需要分析捕获到的事务中的标记是否为字符B,如果是,则表明该事务为它自身向数据库执行的操作,直接丢弃,否则就把事务发送到标记为A的数据同步服务。
本发明参数细化的实施例提供的数据库中数据双向同步的方法,步骤简单,容易实现,无需改变双向同步架构,即可实现操作的来源识别以及安全同步。该参数细化的实施例提供的方法不需要额外的在源和目标数据库中创建帮助识别事务来源的辅助表,并且可以同时支持DDL操作和DML操作的双向同步,无需针对DDL双向同步做特殊的处理。根据判断日志流中捕获到的事务标记就可以很清楚的知道事务的来源,判断事务归属后再进行同步操作,避免操作陷入死循环。
本发明各个实施例的实现基础是通过具有处理器功能的设备进行程序化的处理实现的。因此在工程实际中,可以将本发明各个实施例的技术方案及其功能封装成各种模块。基于这种现实情况,在上述各实施例的基础上,本发明的实施例提供了一种数据库中数据双向同步的装置,该装置用于执行上述方法实施例中的数据库中数据双向同步的方法。参见图2,该装置包括:
标记设置于连接建立模块201,用于给双向数据同步服务分配标记,将分配标记后的双向数据同步服务,与相应的目标端数据库建立连接,并将所述标记设置在所述连接上;
数据同步模块202,用于分析同步日志文件,获取日志操作中的事务,并提取所述事务中相应的所述标记,若所述标记中的值不与所述同步服务分配的标记值对应,则所述双向数据同步服务采用设置了所述标记的连接,将所述事务发送至目标端数据库进行同步。
本发明实施例提供的数据库中数据双向同步的装置,采用标记设置于连接建立模块和数据同步模块,通过在数据双向同步服务中分配标记,并将所述标记设置在连接上,根据所述标记判断事务有效性后,双向数据同步服务采用设置了标记的连接,将操作事务发送至目标端数据库进行同步,可以在无需创建辅助表以及执行辅助表数据插入的情况下,实现DDL操作和DML操作的双向同步,避免同步操作陷入死循环。
需要说明的是,本发明提供的装置实施例中的装置,除了可以用于实现上述方法实施例中的方法外,还可以用于实现本发明提供的其他方法实施例中的方法,区别仅仅在于设置相应的功能模块,其原理与本发明提供的上述装置实施例的原理基本相同,虽未进行文字描述,但是本领域技术人员在上述装置实施例的基础上,仅需要参考其他方法实施例中的具体技术方案,就可以对上述装置实施例中的装置进行改进,从而得到相应的装置类实施例,用于实现其他方法类实施例中的方法。
本发明实施例的方法是依托电子设备实现的,因此对相关的电子设备有必要做一下介绍。基于此目的,本发明的实施例提供了一种电子设备,如图3所示,该电子设备包括:至少一个处理器(processor)301、通信接口(Communications Interface)304、至少一个存储器(memory)302和通信总线303,其中,至少一个处理器301,通信接口304,至少一个存储器302通过通信总线303完成相互间的通信。至少一个处理器301可以调用至少一个存储器302中的逻辑指令,以执行如下方法:给双向数据同步服务分配标记,将分配标记后的双向数据同步服务,与相应的目标端数据库建立连接,并将所述标记设置在所述连接上;分析同步日志文件,获取日志操作中的事务,并提取所述事务中相应的所述标记,若所述标记中的值不与所述同步服务分配的标记值对应,则所述双向数据同步服务采用设置了所述标记的连接,将所述事务发送至目标端数据库进行同步。
此外,上述的至少一个存储器302中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。例如包括:给双向数据同步服务分配标记,将分配标记后的双向数据同步服务,与相应的目标端数据库建立连接,并将所述标记设置在所述连接上;分析同步日志文件,获取日志操作中的事务,并提取所述事务中相应的所述标记,若所述标记中的值不与所述同步服务分配的标记值对应,则所述双向数据同步服务采用设置了所述标记的连接,将所述事务发送至目标端数据库进行同步。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。基于这种认识,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本专利中,术语"包括"、"包含"或者其任何其它变体意在涵盖非排它性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句"包括……"限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。