掌桥专利:专业的专利平台
掌桥专利
首页

一种数据库双写方法、装置、电子设备及存储介质

文献发布时间:2024-01-17 01:27:33


一种数据库双写方法、装置、电子设备及存储介质

技术领域

本申请涉及计算机技术领域,具体而言,涉及一种数据库双写方法、装置、电子设备及存储介质。

背景技术

在软件开发过程中,对数据库的增删改查是软件开发中频繁要去处理的问题,在研发过程中,由于数据安全的需要,采用安全开源的mysql数据对oracle数据进行替换是从技术底层减少对国外的依赖、实现自主可控的必要措施,但是在替换的过程中,要实现程序的兼容性、稳定性和业务的连续性。通常情况下,在项目的初始阶段要实现数据的双写,即业务数据在写入Oracle数据库时,也同时写入Mysql数据库。

现有方法是通过在DAO(数据库访问)层增加Mysql数据的写入操作,在业务数据写Oracle时同时写入mysql数据库,但是该方法需要修改原有的业务代码,需要在原有的业务代码DAO(数据库访问)层增加Mysql数据的写入操作,增加了代码异常风险和研发工作量。

发明内容

本申请实施例的目的在于提供一种数据库双写方法、装置、电子设备及存储介质,采用监听oracle数据库日志的方式,当监听到oracle数据有数据库写或者修改操作时,同时对相应的Mysql数据库执行写或者修改操作,从而实现数据库的双写操作,无需修改业务代码,解决了现有方法需要修改原有的业务代码从而增加了代码异常风险和研发工作量的问题。

本申请实施例提供了一种数据库双写方法,所述方法包括:

利用文件系统监控器对Oracle日志文件进行实时监听,以获得所述Oracle日志文件的新增数据;

判断所述新增数据是否含有写和/或修改操作语句;

若所述新增数据中含有写和/或修改操作语句,则在相应的MySql数据库中执行对应操作。

在上述实现过程中,采用监听oracle数据库日志的方式,当监听到oracle数据有数据库写或者修改操作时,同时对相应的Mysql数据库执行写或者修改操作,从而实现Oracale数据库与Mysql数据库的双写,实现数据在两个数据库中同时插入或更新,且无需修改业务代码,解决了现有方法需要修改原有的业务代码从而增加了代码异常风险和研发工作量的问题。

进一步地,在所述利用文件系统监控器对Oracle日志文件进行实时监听的步骤之前,所述方法还包括:

在Oracle数据库中设置用于监听的日志路径。

在上述实现过程中,设置日志路径,以便对日志路径进行监听。

进一步地,所述利用文件系统监控器对Oracle日志文件进行实时监听,以获得所述Oracle日志文件的新增数据,包括:

利用WatchService并基于预先设置的监听模式对所述Oracle日志文件的文件路径进行监听,所述监听模式为修改事件监听;

利用预先创建的线程获取Oracle日志文件的新增数据。

在上述实现过程中,监听文件的修改事件,当日志发生变化时,可获得新增数据。

进一步地,所述若所述新增数据中含有写和/或修改操作语句,则在相应的Mysql数据库中执行对应操作,包括:

若所述新增数据中含有insert和/或update语句,则提取所述新增数据中的SQL语句;

与MySql数据库建立连接并在所述MySql数据库中执行所述SQL语句。

在上述实现过程中,如果新增数据中有insert/update语句,则提取其中的SQL语句在对应的mysql数据库中执行一次,实现Oracale数据库与Mysql数据库的双写,从而实现在不影响现有业务逻辑的情况下,实现数据在两个数据库中同时插入或者更新。

本申请实施例还提供一种数据库双写装置,所述装置包括:

监听模块,用于利用文件系统监控器对Oracle日志文件进行实时监听,以获得所述Oracle日志文件的新增数据;

判断模块,用于判断所述新增数据是否含有写和/或修改操作语句;

执行模块,用于若所述新增数据中含有写和/或修改操作语句,则在相应的MySql数据库中执行对应操作。

在上述实现过程中,采用监听oracle数据库日志的方式,当监听到oracle数据有数据库写或者修改操作时,同时对相应的Mysql数据库执行写或者修改操作,从而实现Oracale数据库与Mysql数据库的双写,实现数据在两个数据库中同时插入或更新,且无需修改业务代码,解决了现有方法需要修改原有的业务代码从而增加了代码异常风险和研发工作量的问题。

进一步地,所述装置还包括:

日志路径设置模块,用于在Oracle数据库中设置用于监听的日志路径。

在上述实现过程中,设置日志路径,以便对日志路径进行监听。

进一步地,所述监听模块包括:

监听设置模块,用于利用WatchService并基于预先设置的监听模式对所述Oracle日志文件的文件路径进行监听,所述监听模式为修改事件监听;

新增数据获取模块,用于利用预先创建的线程获取Oracle日志文件的新增数据。

在上述实现过程中,监听文件的修改事件,当日志发生变化时,可获得新增数据。

进一步地,所述执行模块包括:

SQL语句获取模块,用于若所述新增数据中含有insert和/或update语句,则提取所述新增数据中的SQL语句;

SQL语句执行模块,用于与MySql数据库建立连接并在所述MySql数据库中执行所述SQL语句。

在上述实现过程中,如果新增数据中有insert/update语句,则提取其中的SQL语句在对应的mysql数据库中执行一次,实现Oracale数据库与Mysql数据库的双写,从而实现在不影响现有业务逻辑的情况下,实现数据在两个数据库中同时插入或者更新。

本申请实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行计算机程序以使所述电子设备执行上述中任一项所述的数据库双写方法。

本申请实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述中任一项所述的数据库双写方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种数据库双写方法的流程图;

图2为本申请实施例提供的基于Oracle日志监听的数据库双写方法的具体流程图;

图3为本申请实施例提供的新增数据获取流程图;

图4为本申请实施例提供的MySql数据库写入流程图;

图5为本申请实施例提供的一种数据库双写装置的结构框图;

图6为本申请实施例提供的另一种数据库双写装置的结构框图。

图标:

100-监听模块;110-日志路径设置模块;101-监听设置模块;102-新增数据获取模块;200-判断模块;300-执行模块;301-SQL语句获取模块;302-SQL语句执行模块。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

实施例1

请参看图1,图1为本申请实施例提供的一种数据库双写方法的流程图。

现有方法通过在DAO(数据库访问)层增加Mysql数据的写入操作,在业务数据写Oracle时同时写入mysql数据库,但是该方法需要修改原有业务代码,增加了代码异常风险和研发工作量。

本申请所采用的方法通过监听Oracle数据库日志,在监听到oracle数据在有数据库写(insert)或者修改(update)操作时,同时对相应的Mysql数据库执行写(insert)或者修改(update)操作,从而实现数据库的双写操作,不需要修改原有的业务代码,即可实现数据库的双写操作。

该方法具体包括以下步骤:

步骤S100:利用文件系统监控器对Oracle日志文件进行实时监听,以获得所述Oracle日志文件的新增数据;

步骤S200:判断所述新增数据是否含有写和/或修改操作语句;

步骤S300:若所述新增数据中含有写和/或修改操作语句,则在相应的MySql数据库中执行对应操作。

如图2所示,为基于Oracle日志监听的数据库双写方法的具体流程图。在步骤S100之前,所述方法还包括:

在Oracle数据库中设置用于监听的日志路径。

首先,需要开启Oracle日志的输入,具体地,通过命令lsnrctl SET LOG_DIRECTORY directory设置Oracle日志文件目录;通过命令lsnrctl SET LOG_FILE file_name设置Oracle日志文件名;通过命令lsnrctl SET LOG_STATUS on设置Oracle日志的状态为开启状态。

在Oracle数据库中设置日志路径、日志输出之后,启动Oracle日志监听程序,在监听到Oracle日志中有insert、update操作时,同时对对应的Mysql数据库执行相应的insert、update操作,从而实现同一数据在不同的数据库进行双写的目的。

如图3所示,为新增数据获取流程图,步骤S100具体包括以下步骤:

步骤S101:利用WatchService并基于预先设置的监听模式对所述Oracle日志文件的文件路径进行监听,所述监听模式为修改事件监听;

步骤S102:利用预先创建的线程获取Oracle日志文件的新增数据。

基于watchservice[ava.nio.file.WatchService],通过它可以实现文件变动的监听。

WatchService是基于操作系统的文件系统监控器,可以监控系统中所有文件的变化,无需遍历、无需比较,是一种基于信号收发的监控,具有效率高的优点,可对Oracle日志文件进行实时监听。

通过传入Oracle日志文件路径,同时设置监听模式为StandardWatchEventKinds.ENTRY_MODIFY[监视文件的修改事件]。

示例地:

Path path=Paths.get(Oracle日志文件路径);

WatchService watcher=FileSystems.getDefault().newWatchService();

ath.register(watcher,StandardWatchEventKinds.ENTRY_MODIFY)。

如果新增数据中不含有写和/或修改操作语句,则进行跳过处理。

如图4所示,为MySql数据库写入流程图,步骤S300具体包括以下步骤:

步骤S301:若所述新增数据中含有insert和/或update语句,则提取所述新增数据中的SQL语句;

步骤S302:与MySql数据库建立连接并在所述MySql数据库中执行所述SQL语句。

同时创建一个线程,不断获取当前Oracle日志文件的变化,当Oracle日志文件发生变化时,获取新增加的变化内容,如果变动的内容中没有insert或者update语句,则跳过;如果变动的内容中含有insert/update语句,则提取其中的SQL语句在对应的Mysql数据库中再执行一次。

具体可通过JDBC(JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成)创建Mysql连接。

示例地:

//通过正则表达式提取SQL语句(即双引号内的内容)代码如下:

通过以上方式实现Oracale数据库与Mysql数据库的双写操作,从而实现在不影响现有业务逻辑的情况下,达到数据在两个数据库中同时插入或者更新的目的。

该方法通过监听oracle数据库日志,在监听到oracle数据在有数据库写(insert)或者修改(update)操作时,同时对相应的Mysql数据库执行写(insert)或者修改(update)操作,从而实现数据库的双写操作,具有以下优点:

对业务代码零修改、零侵入,无需修改业务代码,即可以实现数据库的双写,减少因为增加数据库双写功能造成的代码异常风险,影响正常业务稳定性、连续性的问题;因为无业务代码的修改,所以提高了研发的效率。

该方法在金融科技领域也具有广泛的应用,通过数据库的双写操作,可实现对金融数据的自动备份,例如,当用户的金融账户发生变动时,通过数据库的双写操作可自动备份这种变动,增强了用户金融账户的安全性,且不影响用户的正常业务的开展。

实施例2

本申请实施例提供一种数据库双写装置,该装置应用于实施例1所述的数据库双写方法,如图5所示,为一种数据库双写装置的结构框图,该装置包括但不限于:

监听模块100,用于利用文件系统监控器对Oracle日志文件进行实时监听,以获得所述Oracle日志文件的新增数据;

判断模块200,用于判断所述新增数据是否含有写和/或修改操作语句;

执行模块300,用于若所述新增数据中含有写和/或修改操作语句,则在相应的MySql数据库中执行对应操作。

采用监听oracle数据库日志的方式,当监听到Oracle数据有数据库写或者修改操作时,同时对相应的Mysql数据库执行写或者修改操作,从而实现Oracale数据库与Mysql数据库的双写,实现数据在两个数据库中同时插入或更新,且无需修改业务代码,解决了现有方法需要修改原有的业务代码从而增加了代码异常风险和研发工作量的问题。

如图6所示,为另一种数据库双写装置的结构框图,所述装置还包括:

日志路径设置模块110,用于在Oracle数据库中设置用于监听的日志路径。

首先,需要开启Oracle日志的输入,具体地,通过命令lsnrctl SET LOG_DIRECTORY directory设置Oracle日志文件目录;通过命令lsnrctl SET LOG_FILE file_name设置Oracle日志文件名;通过命令lsnrctl SET LOG_STATUS on设Oracle日志的状态为开启状态。

在Oracle数据库中设置日志路径、日志输出之后,启动Oracle日志监听程序,在监听到Oracle日志中有insert、update操作时,同时对对应的Mysql数据库执行相应的insert、update操作,从而实现同一数据在不同的数据库进行双写的目的。

所述监听模块100包括:

监听设置模块101,用于利用WatchService并基于预先设置的监听模式对所述Oracle日志文件的文件路径进行监听,所述监听模式为修改事件监听;

新增数据获取模块102,用于利用预先创建的线程获取Oracle日志文件的新增数据。

监听文件的修改事件,当日志发生变化时,可获得新增数据。

基于watchservice[ava.nio.file.WatchService],通过它可以实现文件变动的监听。

WatchService是基于操作系统的文件系统监控器,可以监控系统中所有文件的变化,无需遍历、无需比较,是一种基于信号收发的监控,具有效率高的优点,可对Oracle日志文件进行实时监听。

通过传入Oracle日志文件路径,同时设置监听模式为StandardWatchEventKinds.ENTRY_MODIFY[监视文件的修改事件]。

示例地:

Path path=Paths.get(Oracle日志文件路径);

WatchService watcher=FileSystems.getDefault().newWatchService();

ath.register(watcher,StandardWatchEventKinds.ENTRY_MODIFY)。

如果新增数据中不含有写和/或修改操作语句,则进行跳过处理。

所述执行模块300包括:

SQL语句获取模块301,用于若所述新增数据中含有insert和/或update语句,则提取所述新增数据中的SQL语句;

SQL语句执行模块302,用于与MySql数据库建立连接并在所述MySql数据库中执行所述SQL语句。

如果新增数据中有insert/update语句,则提取其中的SQL语句在对应的mysql数据库中执行一次,实现Oracale数据库与Mysql数据库的双写,从而实现在不影响现有业务逻辑的情况下,实现数据在两个数据库中同时插入或者更新。

同时创建一个线程,不断获取当前Oracle日志文件的变化,当Oracle日志文件发生变化时,获取新增加的变化内容,如果变动的内容中没有insert或者update语句,则跳过;如果变动的内容中含有insert/update语句,则提取其中的SQL语句在对应的Mysql数据库中再执行一次。

具体可通过JDBC(JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成)创建Mysql连接。

示例地:

//通过正则表达式提取SQL语句(即双引号内的内容)代码如下:

通过以上方式实现Oracale数据库与Mysql数据库的双写操作,从而实现在不影响现有业务逻辑的情况下,达到数据在两个数据库中同时插入或者更新的目的。

该方法通过监听oracle数据库日志,在监听到oracle数据在有数据库写(insert)或者修改(update)操作时,同时对相应的Mysql数据库执行写(insert)或者修改(update)操作,从而实现数据库的双写操作,具有以下优点:

对业务代码零修改、零侵入,无需修改业务代码,即可以实现数据库的双写,减少因为增加数据库双写功能造成的代码异常风险,影响正常业务稳定性、连续性的问题;因为无业务代码的修改,所以提高了研发的效率。

本申请实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行计算机程序以使所述电子设备执行实施例1所述的数据库双写方法。

本申请实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行实施例1所述的数据库双写方法。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

相关技术
  • 一种浴室加热装置和用于控制浴室加热装置的方法、设备、电子设备及计算机可读存储介质
  • 数据库同步恢复方法、装置、计算机可读存储介质和电子设备
  • 实时数据库同步方法、装置、电子设备及存储介质
  • 数据库操作方法、装置、电子设备及存储介质
  • 一种漆面识别方法、装置、存储介质及电子设备
  • 数据库的双写测试方法、装置、设备及存储介质
  • 数据的双写同步方法、装置、电子设备及计算机存储介质
技术分类

06120116220861