CN108416040B - 一种数据库修复方法、装置、终端设备及存储介质 - Google Patents
一种数据库修复方法、装置、终端设备及存储介质 Download PDFInfo
- Publication number
- CN108416040B CN108416040B CN201810209358.3A CN201810209358A CN108416040B CN 108416040 B CN108416040 B CN 108416040B CN 201810209358 A CN201810209358 A CN 201810209358A CN 108416040 B CN108416040 B CN 108416040B
- Authority
- CN
- China
- Prior art keywords
- log
- database
- takeover
- serial number
- standby
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/219—Managing data history or versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库修复方法、装置、终端设备及存储介质。该方法包括若主数据库最大日志序列号大于备用数据库接管主数据库时最大日志序列号,则根据控制文件版本号查找备用数据库中接管日志序列号;如果检查点日志序列号大于接管日志序列号,则调整至小于或等于接管日志序列号后确定接管日志序列号至最大日志序列号为待修复日志序列段;否则确定接管日志序列号至最大日志序列号为待修复日志序列段;将主数据库在待修复日志序列段内数据页号对应的数据页用备用数据库相应的数据页覆盖;将备用数据库在接管日志序列号后的归档日志文件拷贝到主数据库中;将备用数据库控制文件覆盖主数据库的控制文件。该方法能降低修复故障主数据库的时间。
Description
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种数据库修复方法、装置、终端设备及存储介质。
背景技术
随着网络时代的发展,对数据服务的可靠性提出了越来越高的要求。数据库系统中,除了主数据库对外提供服务,还有备用数据库处于备用状态,一旦主数据库出现故障,备用数据库将自动或手动接管主数据库对外提供服务。
故障主数据库恢复正常后,将作为原备用数据库的备用数据库重新加入数据库系统中,在故障主数据库重新加入数据库系统的过程中,如果故障主数据库无法加入,那么,数据库厂商,就需要重新搭建另外的备用数据库接管故障主数据库加入数据库系统。这种方式,在数据库系统规模很大的情况下(比如TB级)非常耗时。
发明内容
本发明提供的一种数据库修复方法、装置、终端设备及存储介质,能够有效降低修复故障主数据库的时间。
第一方面,本发明实施例提供了一种数据库修复方法,包括:获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;
如果所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号,则获取所述主数据库中的检查点日志序列号和控制文件版本号;
根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;
如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;
将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
第二方面,本发明实施例还提供了一种数据库修复装置,包括:
序列号获取模块,用于获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;
数据获取模块,用于当所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号时,获取所述主数据库中的检查点日志序列号和控制文件版本号;
接管序号查找模块,用于根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;
待修复段确定模块,用于如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;
数据覆盖模块,用于将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
第三方面,本发明实施例还提供了一种终端设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例提供的数据库修复方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例提供的数据库修复方法。
本发明实施例提供了一种数据库修复方法、装置、终端设备及存储介质,针对主数据库故障重新加入数据库系统的情况,例如,当备用数据库故障,主数据库单独对外提供服务后,主数据库故障,备用数据库重启,故障主数据库被备用数据库接管后又重新启动,此时,故障主数据库的最大日志序列号比备用数据库接管该故障主数据库时的最大日志序列号大,那么故障主数据库将不能加入数据库系统;本发明实施例首先获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;如果所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号,则获取所述主数据库中的检查点日志序列号和控制文件版本号;其次,根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;然后,如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;最后将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。利用上述技术方案,能够基于联机日志文件和归档日志文件直接将故障数据库修复为正常状态,使修复后的故障数据库重新加入数据库系统。针对大规模数据库系统,该修复方法能够比重新搭建新备用数据库节约大量时间。
附图说明
图1a为本发明实施例一提供的一种数据库修复方法的流程示意图;
图1b给出了现有技术中数据库修复方法示意图;
图1c给出了本发明实施例一的数据库修复方法示意图;
图1d给出了本发明实施例一中联机日志文件和归档日志文件对比图;
图2a为本发明实施例二提供的一种数据库修复方法的流程示意图;
图2b给出了本发明实施例二中主数据库和备用数据库日志文件关系示意图;
图2c给出了本发明实施例二对主数据库归档日志文件和联机日志文件删除的实现流程图;
图2d给出了本发明实施例二对备用数据库归档日志文件和魔数值获取的实现流程图;
图3为本发明实施例三提供的一种数据库修复装置的结构示意图;
图4为本发明实施例四提供的一种终端设备的硬件结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1a为本发明实施例一提供的一种数据库修复方法的流程示意图,该方法可适用于主数据库产生分裂时,对主数据库进行修复的情况,其中,主数据库产生分裂的过程可以理解为备用数据库故障,主数据库单独提供服务后,所述主数据库故障,所述备用数据库重启并接管所述主数据库且所述主数据库重启,即当故障主数据库的最大日志序列号大于备用数据库接管该故障主数据库时的最大日志序列号时,称主数据库产生分裂。该方法可以由数据库修复装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成在终端设备中。此外,该方法也可以为人机交互的方法,可以由用户在终端设备上采用相应的命令实现。
如图1a所述,本发明实施例一提供的一种数据库修复方法,包括如下步骤:
S101、获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号。
在本实施例中,日志序列号(Log Sequence Number,LSN)可以理解为标识特定日志文件记录在日志文件中位置的序号。最大日志序列号可以理解为数据库系统已分配的最大日志序列号。接管可以理解为主数据库发生故障后,通过手动或自动的方式,将备用数据库切换为主数据库,继续提供服务。
其中,日志序列号是由数据库系统自动分配并维护的数值,具有自动递增、全局唯一特性。每一个日志序列号代表着数据库系统内部产生的一个物理事务。物理事务(PhysicalTransaction,ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。新建的数据库的日志序列号为0,以后每当有事务提交,日志序列号增加1。日志序列号是全局递增的,后提交物理事务产生的日志序列号一定比前一个更大。
具体地,本步骤可以通过查询记录日志总体信息的视图获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号。示例性地,本步骤可以通过终端设备(如客户端)连接至主数据库,并执行select语句。如,执行语句select*from v$rlog。
图1b给出了现有技术中数据库修复方法示意图。现有技术中当主数据库产生分裂之后(主数据库分裂时的最大日志序列号大于备用数据库接管所述主数据库时的最大日志序列号),直接重新搭建一个备用数据库。具体地,如图1b所示,在数据库系统11中,主数据库处于主用模式并对外提供完整的数据库服务,备用数据库在系统中处于备用模式,提供只读服务。当主数据库产生分裂时,备用数据库接管主数据库形成新主数据库。此时,由于主数据库的最大日志序列号比备用数据库接管主数据库时的最大日志序列号大,该分裂的主数据库不能加入数据库系统12中。现有技术中通过重新搭建一个新备用数据库的方式来替换分裂库。
需要说明的是,分裂库是指与主数据库数据不一致,且无法通过重做归档日志文件将数据恢复到一致状态的库。其它数据库一般将这种库称为脑裂。示例性地,分裂库产生的过程如下:
当数据库系统正常情况下,主数据库和备用数据库的控制文件版本号(tguid值)是一样大的,在出现主备切换后,控制文件版本号会增加1。此处假设主数据库和备用数据库的控制文件版本号为100(需要注意的是控制文件版本号是十六进制表示的,此处100为以十进制为例)。备用数据库产生故障,主数据库单独对外提供服务后,主数据库故障,备用数据库重启并强制接管主数据库,此时,主数据库和备用数据库的控制文件版本号发生了变化,备用数据库切换为新主数据库,相应地,备用数据库的控制文件版本号变为101。而主数据库的控制文件版本号的值还是100。在主数据库重启后,其控制文件版本号还是100,此时主数据库就产生了分裂形成了分裂库。因为此时的主数据库和备用数据库的控制文件版本号的值不同,说明此时这两个数据库状态不一致。此时,主数据库的最大日志序列号大于备用数据库相应地最大日志序列号,因此主数据库无法加入数据库系统12中,主数据库变成了分裂库。
其中,控制文件版本号(tguid值)是控制文件中的一个全局唯一值。每次更新控制文件,都会生成一个新的控制文件版本号。控制文件中所有的控制记录项都是根据控制文件版本号链接起来,可以用来重现主备数据库的模式、状态变化历史。控制记录项包含上一个控制文件版本号和相关描述信息。正常数据库系统中,主数据库和备用数据库的控制文件版本号是一样的,一旦发生了主备切换,控制文件就会被修改,主数据库和备用数据库的控制文件版本号就会增加1。
图1c给出了本发明实施例一的数据库修复方法示意图。具体地,如图1c所示,在数据库系统13中,主数据库处于主用模式并对外提供服务,备用数据库在数据库系统13中处于备用模式。当主数据库产生分裂时,备用数据库接管主数据库变为新主数据库。针对产生分裂的主数据库,本发明则直接将分裂的主数据库修改为正常状态形成新备用数据库重新加入数据库系统14。
S102、如果所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号,则获取所述主数据库中的检查点日志序列号和控制文件版本号。
在本实施例中,检查点日志序列号可以理解为数据库系统产生检查点时的日志序列号。检查点日志序列号的物理事务修改的数据页,都已经从Buffer缓冲区写入磁盘。
一般地,如果主数据库的最大日志序列号大于备用数据库接管主数据库时的最大日志序列号,则可以认为此时主数据库产生分裂,可以进一步获取主数据库检查点日志序列号和控制文件版本号以用于修复此时的主数据库。
具体地,本步骤可以通过查询记录日志总体信息的视图,获取主数据库的检查点日志序列号和控制文件版本号。示例性地,本步骤可以通过执行数据库修复方法的终端设备连接至主数据库,并执行select语句。如,select*from v$rlog,以获取检查点日志序列号。此外,本步骤中可以通过控制文件版本号获取指令获取控制文件版本号。
S103、根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号。
在本实施例中,本步骤可以根据主数据库的控制文件版本号,在备用数据库的控制文件中找到接管日志序列号。示例性地,如果获取到主数据库检查点日志序列号是33102,最大日志序列号是62046、控制文件版本号是100,则在备用数据库的控制文件中找到接管控制文件版本号为100的接管记录,及接管时所对应的日志序列号,此时的日志序列号称为接管日志序列号(假设接管日志序列号为51802)。
S104、如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段。
需要说明的是,如果接管日志序列号小于主数据库检查点日志序列号(ckpt_lsn),则不适用本方法修复。原因是根据数据库系统的规定,日志不能被截断到检查点日志序列号之前。因为检查点日志序列号之前的日志可能已被覆盖,找不到对应的内容。此时可以尝试先关闭掉主数据库,然后调整检查点日志序列号,使新的检查点日志序列号小于或等于接管日志序列号。
示例性地,本步骤可以使用dmlcvt工具调整检查点日志序列号,先杀掉主数据库,然后执行dmlcvt f_type=4f_path=D:\zb_rt\EP01\DAMENG\dm.ini OP_TYPE=3。需要说明的是,本实施例中在执行指令中所涉及的路径并不作限定,本领域技术人员可以根据需求适应性调整。
此外,本步骤在确定待修复日志序列段的过程中,将获取的接管日志序列号和主数据库的最大日志序列号所形成的日志序列号段确定为待修复日志序列段。需要注意的是,本步骤确定出的待修复日志序列段就是主数据库比备用数据库多出来的日志部分。本实施例中修复主数据库的目的就是将主数据库中对应待修复日志序列段的数据修改掉。基于上述示例,待修复日志序列段可以确定为(51802,62046)。
S105、将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
在本实施例中,日志文件分为联机日志文件和归档日志文件。联机日志文件和归档日志文件的内容是一样的,唯一区别就是时间长短,联机日志文件是近期的日志,而归档日志文件记录了长期以来的日志。
图1d给出了本发明实施例一中联机日志文件和归档日志文件对比图。如图1d所示,其中联机日志文件左方箭头表示联机日志文件记录时间的长度,归档日志文件左方的箭头表示归档日志文件记录时间的长度,需要说明的是,此处箭头的长度仅用于表示归档日志文件的时间长于联机日志文件。
日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便数据库系统在出现系统故障和介质故障时能够进行故障恢复。在数据库运行过程中,任何修改数据库的操作都会产生重做日志,例如,当一条元组插入到一个表中的时候,插入的结果写入了日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当数据库系统出现故障时,通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使数据库系统恢复到故障之前的状态。需要说明的是,数据库可以在归档模式和非归档模式下运行。只有当数据库处于归档模式下,才将联机日志文件中的内容保存到硬盘中,形成归档日志文件。
其中,联机日志指的是数据库系统运行过程中产生的日志。当用户在数据库中添加、删除、修改对象或者改变数据,数据库系统都会按照特定的格式,将这些操作执行的结果写入到当前的联机日志文件中。联机日志文件主要用于数据库的备份,还原与恢复。创建数据库时,联机日志文件通常被扩展至一定长度,其内容则被初始化为空,当数据库系统运行时,该文件逐渐被产生的日志所填充。每个数据库实例必须至少有2个重做日志文件,这两个文件循环使用。为了做到循环利用,当所有日志文件空间被占满时,数据库系统需要清空一部分日志以便重用日志文件的空间,为了保证被清空的日志所“保护”的数据在磁盘上是安全的,需要采用检查点。当数据库系统产生检查点时,数据库系统将系统缓冲区中的日志和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这部分日志空间也可以被安全重用了(即这部分内容可以被覆盖了)。
归档日志文件是数据库在归档模式下运行时,重做联机日志文件被连续拷贝到归档日志文件的部分。系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志文件,数据库系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。
本步骤在确定出待修复日志序列段后,可以将主数据库在待修复日志序列段内数据页号对应的数据页用备用数据库相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,在覆盖和拷贝完成后,本步骤可以控制主数据库运行拷贝来的归档日志文件,并将备用数据库中的控制文件覆盖主数据库的控制文件,其中控制文件的覆盖步骤的执行顺序不作限定,可以在判断出主数据库的最大日志序列号大于备用数据库接管主数据库时的最大日志序列号后任一位置处。
其中,控制主数据库运行拷贝来的归档日志文件,即利用该拷贝来的归档日志文件恢复主数据库。数据恢复是指重做归档日志文件,将数据库恢复到一致性状态的过程。恢复操作主要包括重做归档日志文件、更新魔数值等步骤。
备用数据库上接管日志序列号后修改的数据页可能有1、2、3、4、5和6,在将所述备用数据库中相应的数据页同步至主数据库上时,可能将数据页1、2和3进行了覆盖(因为备用数据库中相应的数据页的确定是由主数据库中查找到的被修改数据页的数据页号决定的,其中数据页号没有被修改,数据页号只是记录在联机日志文件中,被修改的是数据页号所对应的数据页内容)。需要说明的是待修复日志序列段内的数据页号所对应的数据页均是被修改的数据页。示例性地,主数据库上的数据页(例如数据页号1、2和3所对应的数据页)在接管日志序列号之后被修改过,与备用数据库上的数据页内容不一致。修复方法是,把备用数据库上的数据页(例如数据页1、2和3)拷贝过来,直接覆盖。具体地,根据主数据库在待修复日志序列段内数据页号,确定备用数据库中与主数据库中所确定的数据页号处于相同页号的数据页,并利用备用数据库中确定出的数据页覆盖主数据库中相应数据页。
覆盖操作之后,备数据库上的数据页1、2和3可能又进行了新的修改。那么,新修改的数据页1、2、3和数据页4、5和6就需要主数据库通过归档日志文件恢复操作来和备用数据库保持同步。通过重做主数据库中拷贝来的归档日志文件,将数据库系统的这段数据操作全部恢复到主数据库上,这样主数据库的日志序列号、联机日志文件和数据页就和备用数据库的日志序列号、联机日志文件和数据页处于一致状态了。
示例性地,可以使用dmrman工具将归档日志文件全部恢复到主数据库上,即,执行dmrman CTLSTMT="RECOVER DATABASE'D:\zb_rt\EP01\DAMENG\dm.ini'WITHARCHIVEDIR'D:\zb_rt\EP01\DAMENG\arch'。
示例性地,在对故障主数据库的待修复日志序列段进行修复的过程中的具体做法可以为:首先消除故障主数据库文件中已修改的数据页,将这些数据页内容更新到和新主数据库对应页的内容一致;其次删除掉故障主数据库比新主数据库(新主数据库就是数据库系统13中的备用数据库接管主数据库形成的数据库)多余的联机日志文件和归档日志文件;之后修复缺失的联机日志文件和归档日志文件;然后利用修复的这部分归档日志文件将原故障主数据库恢复到和新主数据库一致的状态;最后修复控制文件。需要说明的是,当主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号时,说明此时主数据库产生了故障,此时主数据库产生了分裂,相应地,备用数据库成为了新主数据库。
此外,需要修复具体文件为:数据文件、联机日志文件、归档日志文件和控制文件。将故障主数据库的这些文件内容修复到和新主数据库当前内容一致,即修复成功。
本发明实施例一提供的一种数据库修复方法,首先获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;如果所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号,则获取所述主数据库中的检查点日志序列号和控制文件版本号;其次,根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;然后,如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;最后将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。利用上述方法,能够在主数据库产生分裂时,根据主数据库的检查点日志序列号和控制文件版本号,确定出主数据库中待修复日志序列段,并基于备用数据库接管日志序列号后相应的数据页(所述数据页是指数据页号和主数据库中查找到的被修改数据页的数据页号一样的数据页)和归档日志文件修复主数据库,使故障的主数据库重新加入数据库系统中,从而有效地提高了修复故障主数据库的效率。
实施例二
图2a为本发明实施例二提供的一种数据库修复方法的流程示意图,本实施例二在上述各实施例的基础上进行优化。在本实施例中,将获取所述主数据库中的检查点日志序列号和控制文件版本号,进一步具体化为:查询记录日志总体信息的视图,以获取所述主数据库中的检查点日志序列号;查询控制文件内容,以获取控制文件版本号。
进一步地,本实施例还将根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,进一步优化为:根据所述控制文件版本号,查找所述备用数据库中与所述控制文件版本号相同的控制文件版本号;将在所述备用数据库中查找出的控制文件版本号所对应的日志序列号确定为接管日志序列号。
在上述优化的基础上,本实施例还把将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,具体优化为:在所述主数据库的联机日志文件中获取所述待修复日志序列段内的数据页号;根据所述数据页号查找备用数据库中对应的数据页,并将所述备用数据库中查找出的数据页覆盖所述主数据库中在所述待修复日志序列段内数据页号对应的数据页;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中。本实施例尚未详尽的内容请参考实施例一。
如图2a所示,本发明实施例二提供的一种数据库修复方法,包括如下步骤:
S201、获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号。
在本实施例中,获取主数据库的最大日志序列号和备用数据库接管主数据库时的最大日志序列号可以用于确定此时的主数据库产生了分裂,即,通过重启数据库不能够加入数据库系统中。
S202、判断主数据库的最大日志序列号是否大于所述备用数据库接管所述主数据库时的最大日志序列号,若是,则执行S203;若否,则返回执行S201。
在本实施例中,如果主数据库的最大日志序列号大于备用数据库接管主数据库时的最大日志序列号,则此时主数据库重启后不能够加入数据库系统中,则可以执行S203;否则,可以说明主数据库最大日志序列号不大于备用数据库接管所述主数据库时的最大日志序列号,则可以说明此时主数据库重启后能够加入数据库系统中,则可以返回执行S201直到出现不能够通过重启主数据库加入数据库系统中的数据库。
示例性地,数据库系统中,读写分离的主数据库先将重做(redo)日志写入本地磁盘再发送重做日志到备用数据库;备用数据库强制接管,主数据库被接管时最大日志序列号大于备用数据库接管所述主数据库时的最大日志序列号。
S203、查询记录日志总体信息的视图,以获取所述主数据库中的检查点日志序列号。
在本实施例中,当主数据库产生分裂后,主要思想是截断多余的联机日志文件和归档日志文件,消除被修改的数据页,将这些数据页内容更新到和新主数据库对应页当前内容一致,最后拷贝新主数据库的归档日志文件,利用归档日志文件恢复到新主数据库当前状态。需要说明的是,此时新主数据库是主数据库故障后,备用数据库接管主数据库后成为新主数据库。
本步骤中,可以通过select语句获取主数据库的检查点日志序列号,示例性地,在连接至主数据库的终端设备上执行select*from v$rlog,以获取检查点日志序列号。
S204、查询控制文件内容,以获取控制文件版本号。
在本实施例中,如果数据守护还在运行,在终端设备监视器上,使用“showdmwatcher ctl实例名”指令以显示相应数据库的控制文件内容。示例性地,执行showdmwatcher ctl GRP1_RT_01指令以查找数据库的控制文件内容;如果数据守护已关闭,则使用dmctlcvt工具分别将主数据库和备用数据库的dmwatcher.ctl文件转换为文本格式。
示例性地,执行dmctlcvt dwctl2t D:\zb_rt\EP01\DAMENG\dmwatcher.ctl D:\zb_rt\EP01\DAMENG\dmwatcher.txt指令以将主数据库(EP01)的控制文件转换为文本格式。从而能够通过查询控制文件内容,获取控制文件版本号。
S205、根据所述控制文件版本号,查找所述备用数据库中与所述控制文件版本号相同的控制文件版本号。
在本步骤中,可以采用show指令或dmctlcvt工具查询备用数据库的控制文件内容,并基于主数据库控制文件版本号,在备用数据库中找到接管主数据库控制文件版本号的接管记录及对应的日志序列号。
S206、将在所述备用数据库中查找出的控制文件版本号所对应的日志序列号确定为接管日志序列号。
本步骤中,在查找备用数据库与主数据库控制文件版本号相同的控制文件版本号后,将查找出的控制文件版本号所对应的日志序列号确定为接管日志序列号,以用于确定主数据库中待修复日志序列段。
S207、判断检查点日志序列号是否大于所述接管日志序列号,若是,则执行S208;若否,则执行S209。
在本实施例中,如果检查点日志序列号大于接管日志序列号,则需要进一步调整检查点日志序列号,相应地,执行S208;否则,直接基于接管日志序列号和最大日志序列号确定待修复日志序列段,即执行S209。
S208、调整至所述检查点日志序列号小于或等于所述接管日志序列号。
在本实施例中,如果检查点日志序列号大于所述接管日志序列号,则需要调整检查点日志序列号小于或等于所述接管日志序列号。
S209、确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段。
S210、在所述主数据库的联机日志文件中获取所述待修复日志序列段内的数据页号。
在本实施例中,当主数据库故障时,主数据库的数据文件中接管日志序列号后数据页号对应的数据页需要被删除掉。具体地,如果要将主数据库中接管日志序列号后数据页号对应的数据页删除掉,可以将其使用备用数据库(在主数据库故障后,备用数据库就会成为新主数据库对外提供服务)中相应数据页替换掉。
因此,本步骤首先在主数据库的联机日志文件中获取待修复日志序列段内的数据页号。
示例性地,本步骤可以获取主数据库中在待修复日志序列段内的数据页号(比如数据页号1、2、3),输出到指定路径的文件中,例如,ref_pages000.txt。如,使用dmlcvt工具获取接管日志序列号之后的数据页号,输出到指定路径的ref_pages000.txt文件中,用法如下:
dmlcvt f_type=4f_path=D:\zb_rt\EP01\DAMENG\dm.ini OP_TYPE=4lsn_start=51802out_path=D:\zb_rt\EP01\DAMENG\。
利用dmdata_cmp增加过滤功能,将最终需要修复的数据页输出到ref_pages_cmp.txt文件中,如:
dmdata_cmpTYPE=6INI_PATH=D:\zb_rt\EP01\DAMENG\dm.ini CMP_LSN=51802IN_FILE_PATH=D:\zb_rt\EP01\DAMENG\ref_pages000.txt
OUT_FILE_PATH=D:\zb_rt\EP01\DAMENG\ref_pages_cmp.txt。
查看生成的ref_pages_cmp.txt文件,如果文件内容不为空,则可以继续进行替换数据页操作。那么根据ref_pages000.txt的页号取出备用数据库上对应的数据页(数据页1、2和3),然后,使用这些数据页覆盖掉主数据库目录下数据文件中相应的页。这样,主数据库的数据文件中接管日志序列号之后的已修改的数据页内容,就会被修改成和备用数据库的相应页内容一致。
S211、根据所述数据页号查找所述备用数据库中对应的数据页,并将所述备用数据库中查找出的数据页覆盖所述主数据库中在所述待修复日志序列段内数据页号对应的数据页。
本步骤中,覆盖数据页可以使用dmdata_cmp连接至备用数据库,根据所述数据页号取出备用数据库中对应的数据页,以用来覆盖主数据库中在待修复日志序列段内数据页号对应的数据页。
示例性地,本步骤实现数据页的覆盖操作可以通过dmdata_cmp TYPE=7INI_PATH=D:\zb_rt\EP01\DAMENG\dm.iniIN_FILE_PATH=D:\zb_rt\EP01\DAMENG\ref_pages_cmp.txt IP=192.168.0.103PORT=5242USER=SYSDBA PWD=SYSDBA指令完成。
S212、将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中。
本步骤中,在修复数据文件后,可以进一步将备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中。其中,归档日志文件很多个,接管日志序列号只处于其中一个,接管日志序列号之后的所有归档日志文件都要拷贝,不是只拷贝接管日志序列号所处的归档日志文件的后半部分(所述后半部分以接管日志序列号位置处开始)。具体地,可以首先删除故障主数据库中多余的联机日志文件和归档日志文件,然后修补上故障主数据库中所缺失的联机日志文件和归档日志文件。因为备用数据库在切换为新数据库之后,可能数据库有了新的修改,产生了新的日志,而这部分新产生的日志正是故障的主数据库缺失的部分,要修补上。此外故障主数据库故障后,可能产生新的日志,而这部分新产生的日志正是故障主数据库所多余的部分,所述多余是相对的概念。因为检查点日志序列号和接管日志序列号之间的日志,故障主数据库和备用数据库上都有了。所以接管日志序列号之后的部分,是故障主数据库上有,备用数据库上没有的,才是多余的。所以修复的起点是接管日志序列号。
图2b给出了本发明实施例二中主数据库和备用数据库日志文件关系示意图。需要说明的是,此时的主数据库21为产生分裂的主数据库21,备用数据库22为新主数据库。具体地,如图2b所示,其中主数据库21中包括了联机日志文件和归档日志文件,左方箭头分别表示联机日志文件和归档日志文件所记录的时长,主数据库21在接管日志序列号所对应时刻后产生了新的日志,即图2b中所示出的多余的部分,而备用数据库22在接管日志序列号所对应时刻后也产生了新的日志,这部分日志为主数据库21所缺失的部分。
进一步地,所述将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,包括:
删除所述主数据库中在所述待修复日志序列段内的归档日志文件及联机日志文件;
获取所述备用数据库中在所述接管日志序列号后的所有归档日志文件及所述备用数据库的魔数值,并将获取的所述备用数据库中的归档日志文件拷贝至所述主数据库的归档目录中,将所述主数据库中拷贝后的归档日志文件所对应的魔数值修改为所述主数据库的魔数值。
其中,魔数值(DB_MAGIC值)可以理解为用于标识数据库的数值。数据库的魔数值,用来标识某一个数据库,但魔数值是可以变化的,每经过一次还原、恢复操作后,魔数值就会产生变化,以此来区分备份源库和还原目标库。
需要说明的是,故障主数据库的联机日志文件的修复比较特殊。在利用主数据库拷贝来的归档日志文件将故障主数据库恢复到和新主数据库一致的状态时,待修复日志序列段的联机日志文件就会被自动修复上。
示例性地,将所述主数据库中拷贝来的归档日志文件所对应的魔数值修改为所述主数据库的魔数值可以通过dmmdf FILE=D:\zb_rt\EP01\DAMENG\arch TYPE=7DB_MAGIC_SRC=1472628978DB_MAGIC_DST=1472628136指令实现。
进一步地,图2c给出了本发明实施例二对主数据库归档日志文件和联机日志文件删除的实现流程图。具体地,如图2c所示,对主数据库归档日志文件和联机日志文件删除包括如下操作:
S2121、删除所述主数据库在所述待修复日志序列段内的联机日志文件。
本步骤为删除主数据库中多余的联机日志文件操作,具体地,可以从接管日志序列号后开始截断主数据库的联机日志文件,删除掉待修复日志序列段内日志文件。示例性地,本步骤可以通过dmlcvt指令删除联机日志文件,具体地,执行dmlcvt f_type=4f_path=D:\zb_rt\EP01\DAMENG\dm.ini OP_TYPE=5lsn_start=51802指令。需要进一步说明的,本实施例中所涉及的路径本领域技术人员可以根据需求进行修改。
S2122、根据所述接管日志序列号、所述主数据库中各归档日志文件的起始日志序列号和结束日志序列号,查找所述主数据库中待截断归档日志文件及所述主数据库的魔数值。
在本实施例中,起始日志序列号可以理解为归档日志文件起点所对应的日志序列号。结束日志序列号可以理解为归档日志文件终点所对应的日志序列号。
在删除主数据库中多余归档日志文件的过程中,可以从接管日志序列号开始截断主数据库的归档日志文件,删除掉待修复日志序列段内日志文件。本步骤首先查找待截断归档日志文件,并记录主数据库魔数值,以在修复归档日志文件时会用到。
其中,查找待截断归档日志文件具体操作可以为:在主数据库上根据接管日志序列号找出需要截断的归档日志文件。即,分别使用每一个归档日志文件的起始日志序列号和结束日志序列号和接管日志序列号进行比较,当接管日志序列号处于起始日志序列号和结束日志序列号内(即,起始日志序列号≤接管日志序列号≤结束日志序列号)时,说明该文档就是要找的待截断归档日志文件。
示例性地,本步骤可以通过终端设备连接至主数据库上,通过dmrachk工具,根据接管日志序列号找出待截断归档日志文件。
如,执行dmrachk arch_path=D:\zb_rt\EP01\DAMENG\arch操作。同时,根据该操作查出并记录主数据库的魔数值。
S2123、从所述主数据库中待截断归档日志文件内所述接管日志序列号位置处开始,删除所述接管日志序列号后所有归档日志文件的内容。
本步骤在查找出待截断归档日志文件后,可以截取该待截断归档日志文件,即:从待截断归档日志文件的接管日志序列号处开始截断。接管日志序列号之后的所有归档日志文件内容全部删除掉。保留接管日志序列号之前的部分。
具体地,本步骤截断归档日志文件可以通过dmlcvt工具实现,示例性地,执行dmlcvtf_type=2f_path=D:\zb_rt\EP01\DAMENG\arch\ARCHIVE_LOCAL1_xxxxxxx.logOP_TYPE=2lsn_start=51802。
进一步地,图2d给出了本发明实施例二对备用数据库归档日志文件和魔数值获取的实现流程图。具体地,如图2d所示,对备用数据库归档日志文件和魔数值获取包括如下操作:
S2124、根据所述接管日志序列号、所述备用数据库中各归档日志文件的起始日志序列号和结束日志序列号,查找所述备用数据库中待截断归档日志文件及所述备用数据库的魔数值。
在修复主数据库的归档日志文件的过程中,可以将备用数据库上产生的新归档日志文件拷贝到主数据库上,修补成主数据库的归档日志文件。修补主数据库归档日志文件,首先从接管日志序列号开始截断备用数据库的归档日志文件,其次找出备用数据库中待修复到主数据库的所有归档日志文件,这些日志文件中记录的日志就是备用数据库上产生的新日志。将新的日志文件拷贝到主数据库上;然后修改拷贝的归档日志文件中的魔数值为主数据库的魔数值。因为归档日志文件的魔数值为备用数据库的,备用数据库的魔数值需要修改成主数据库的魔数值。
具体地,本步骤首先确定待截断归档日志文件并记录备用数据库的魔数值。即,分别使用每一个归档日志文件的起始日志序列号和结束日志序列号与接管日志序列号进行比较,当接管日志序列号处于起始日志序列号和结束日志序列号内时,说明该归档日志文件就是要找的待截断归档日志文件。从这个归档日志文件的接管日志序列号开始,后面所有的归档日志文件都是新产生的。
示例性地,在查找备用数据库中待截断归档日志文件的过程中,首先将备用数据库当前日志归档,并且切换归档日志文件。终端设备连接备用数据库执行:alter systemarchive log current;然后使用dmrachk工具,根据接管日志序列号找出需要拷贝的归档日志文件。具体地,通过dmrachk工具查找需要拷贝的待截断归档日志文件,如,dmrachkarch_path=D:\zb_rt\EP02\DAMENG\arch。同时,根据该操作查出并记录备用数据库的魔数值。
S2125、从所述备用数据库中待截断归档日志文件内所述接管日志序列号位置处开始,获取所述接管日志序列号后的所有归档日志文件。
在确定出待截断归档日志文件后,本步骤可以截断该待截断归档日志文件。由于备用数据库的待截断归档日志文件可能和主数据库的归档有部分重叠(接管日志序列号之前的那部分),因此还需要删除掉重叠的部分。具体做法是,从第一个归档日志文件的接管日志序列号处开始截断。复制出接管日志序列号之后的所有归档日志文件内容,生成一个新的归档文件。
示例性地,由于拷贝的待截断归档日志文件可能和主数据库的归档部分重叠,因此还需要使用dmlcvt工具获取出该待截断归档日志文件从接管日志序列号加1开始的内容,生成一个新的归档日志文件,即执行:dmlcvt f_type=2f_path=D:\zb_rt\EP02\DAMENG\arch\xxx.log OP_TYPE=4lsn_start=51803out_path=D:\zb_rt\EP02\DAMENG\arch\。
在获取备用数据库接管日志序列号后的归档日志文件后,可以拷贝生成的新归档文件及待截断归档日志文件后的所有归档日志文件到主数据库的归档目录中。
S213、将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
本步骤中修复控制文件,采用拷贝的方式,直接将主数据库的控制文件替换为备用数据库的同名控制文件,这样两个库的控制文件就保持一致了。
本发明实施例二提供的一种数据库修复方法,具体化了获取检查点日志序列号和控制文件版本号的操作、查找备用数据库中接管日志序列号的操作、覆盖主数据库数据页和拷贝归档日志文件操作。利用该方法,能够在主数据库产生分裂时,根据主数据库的检查点日志序列号和控制文件版本号,确定出主数据库中待修复日志序列段,并基于备用数据库接管日志序列号后相应的数据页和归档日志文件修复主数据库,使故障的主数据库重新加入数据库系统中,从而有效地提高了修复主数据库的效率。
实施例三
图3为本发明实施例三提供的一种数据库修复装置的结构示意图,该装置可适用于主数据库产生分裂时,对主数据库进行修复的情况,其中,主数据库产生分裂的过程可以理解为备用数据库故障,主数据库单独提供服务后,所述主数据库故障,所述备用数据库重启并接管所述主数据库且所述主数据库重启,即当故障主数据库的最大日志序列号大于备用数据库接管该故障主数据库时的最大日志序列号时,称主数据库产生分裂。其中该装置可由软件和/或硬件实现,并一般集成在终端设备中。在本实施例中终端设备可以为电脑、智能平板或智能手机等可以进行数据库修复的电子设备。
如图3所示,该数据库修复装置包括:序列号获取模块31、数据获取模块32、接管序号查找模块33、待修复段确定模块34和数据覆盖模块35。
其中,序列号获取模块31,用于获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;
数据获取模块32,用于当所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号时,获取所述主数据库中的检查点日志序列号和控制文件版本号;
接管序号查找模块33,用于根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;
待修复段确定模块34,用于如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;
数据覆盖模块35,用于将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
在本实施例中,该数据库修复装置,首先通过序列号获取模块31获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;其次通过数据获取模块32当所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号时,获取所述主数据库中的检查点日志序列号和控制文件版本号;然后通过接管序号查找模块33根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;之后通过待修复段确定模块34如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;最后通过数据覆盖模块35将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
本发明实施例三提供的一种数据库修复装置,能够在主数据库产生分裂时,根据主数据库的检查点日志序列号和控制文件版本号,确定出主数据库中待修复日志序列段,并基于备用数据库接管日志序列号后相应的数据页和归档日志文件修复主数据库,使故障的主数据库重新加入数据库系统中,从而有效地提高了修复主数据库的效率。
进一步地,数据获取模块32,具体可用于:查询记录日志总体信息的视图,以获取所述主数据库中的检查点日志序列号;查询控制文件内容,以获取控制文件版本号。
在上述优化的基础上,接管序号查找模块33,进一步地具体用于:根据所述控制文件版本号,查找所述备用数据库中与所述控制文件版本号相同的控制文件版本号;将在所述备用数据库中查找出的控制文件版本号所对应的日志序列号确定为接管日志序列号。
在上述优化的基础上,数据覆盖模块35,进一步地具体包括:
数据页号获取单元,用于在所述主数据库的联机日志文件中获取所述待修复日志序列段内的数据页号;
数据页覆盖单元,用于根据所述数据页号查找所述备用数据库中对应的数据页,并将所述备用数据库中查找出的数据页覆盖所述主数据库中在所述待修复日志序列段内数据页号对应的数据页;
归档日志拷贝单元,用于将所述备用数据库中在所述接管日志序列号后的归档日志文件拷贝到所述主数据库中。
进一步地,归档日志拷贝单元,进一步地具体包括:
归档删除子单元,用于删除所述主数据库中在所述待修复日志序列段内的归档日志文件及联机日志文件;
归档拷贝子单元,用于获取所述备用数据库中在所述接管日志序列号后的所有归档日志文件及所述备用数据库的魔数值,并将获取的所述备用数据库中的归档日志文件拷贝至所述主数据库的归档目录中,将所述主数据库中拷贝后的归档日志文件所对应的魔数值修改为所述主数据库的魔数值。
进一步地,归档删除子单元,进一步地具体用于:删除所述主数据库在所述待修复日志序列段内的联机日志文件;根据所述接管日志序列号、所述主数据库中各归档日志文件的起始日志序列号和结束日志序列号,查找所述主数据库中待截断归档日志文件及所述主数据库的魔数值;从所述主数据库中待截断归档日志文件内所述接管日志序列号位置处开始,删除所述接管日志序列号后所有归档日志文件的内容。
进一步地,归档拷贝子单元,进一步地具体用于:根据所述接管日志序列号、所述备用数据库中各归档日志文件的起始日志序列号和结束日志序列号,查找所述备用数据库中待截断归档日志文件及所述备用数据库的魔数值;从所述备用数据库中待截断归档日志文件内所述接管日志序列号位置处开始,获取所述接管日志序列号后的所有归档日志文件。
上述数据库修复装置可执行本发明任意实施例所提供的数据库修复方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4为本发明实施例四提供的一种终端设备的硬件结构示意图。如图4所示,本发明实施例四提供的终端设备包括:一个或多个处理器41和存储装置42;该终端设备中的处理器41可以是一个或多个,图4中以一个处理器41为例;存储装置42用于存储一个或多个程序;所述一个或多个程序被所述一个或多个处理器41执行,使得所述一个或多个处理器41实现如本发明实施例中任一项所述的数据库修复方法。
所述终端设备还可以包括:输入装置43和输出装置44。
终端设备中的处理器41、存储装置42、输入装置43和输出装置44可以通过总线或其他方式连接,图4中以通过总线连接为例。
该终端设备中的存储装置42作为一种计算机可读存储介质,可用于存储一个或多个程序,所述程序可以是软件程序、计算机可执行程序以及模块,如本发明实施例一或二所提供数据库修复方法对应的程序指令/模块(例如,附图3所示的数据库修复装置中的模块,包括:序列号获取模块31、数据获取模块32、接管序号查找模块33、待修复段确定模块34和数据覆盖模块35)。处理器41通过运行存储在存储装置42中的软件程序、指令以及模块,从而执行终端设备的各种功能应用以及数据处理,即实现上述方法实施例中数据库修复方法。
存储装置42可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储装置42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至终端设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置43可用于接收输入的数字或字符信息,以及产生与终端设备的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。
并且,当上述终端设备所包括一个或者多个程序被所述一个或者多个处理器41执行时,程序进行如下操作:获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;如果所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号,则获取所述主数据库中的检查点日志序列号和控制文件版本号;根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
此外,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行一种数据库修复方法,该方法包括:获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;如果所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号,则获取所述主数据库中的检查点日志序列号和控制文件版本号;根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述最大日志序列号为待修复日志序列段;将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
可选的,该程序被处理器执行时还可以用于执行本发明任意实施例所提供的一种数据库修复方法的技术方案。通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种数据库修复方法,其特征在于,包括:
获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;
如果所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号,则获取所述主数据库中的检查点日志序列号和控制文件版本号;
根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;
如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述主数据库的最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述主数据库的最大日志序列号为待修复日志序列段;
将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
2.根据权利要求1所述的方法,其特征在于,所述获取所述主数据库中的检查点日志序列号和控制文件版本号,包括:
查询记录日志总体信息的视图,以获取所述主数据库中的检查点日志序列号;
查询控制文件内容,以获取控制文件版本号。
3.根据权利要求1所述的方法,其特征在于,所述根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,包括:
根据所述控制文件版本号,查找所述备用数据库中与所述控制文件版本号相同的控制文件版本号;
将在所述备用数据库中查找出的控制文件版本号所对应的日志序列号确定为接管日志序列号。
4.根据权利要求1所述的方法,其特征在于,所述将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,包括:
在所述主数据库的联机日志文件中获取所述待修复日志序列段内的数据页号;
根据所述数据页号查找所述备用数据库中对应的数据页,并将所述备用数据库中查找出的数据页覆盖所述主数据库中在所述待修复日志序列段内数据页号对应的数据页;
将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中。
5.根据权利要求4所述的方法,其特征在于,所述将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,包括:
删除所述主数据库中在所述待修复日志序列段内的归档日志文件及联机日志文件;
获取所述备用数据库中在所述接管日志序列号后的所有归档日志文件及所述备用数据库的魔数值,并将获取的所述备用数据库中的归档日志文件拷贝至所述主数据库的归档目录中,将所述主数据库中拷贝后的归档日志文件所对应的魔数值修改为所述主数据库的魔数值;
所述魔数值用于标识数据库,以区分数据库系统中的主数据库和备用数据库。
6.根据权利要求5所述的方法,其特征在于,所述删除所述主数据库中在所述待修复日志序列段内的归档日志文件及联机日志文件,包括:
删除所述主数据库在所述待修复日志序列段内的联机日志文件;
根据所述接管日志序列号、所述主数据库中各归档日志文件的起始日志序列号和结束日志序列号,查找所述主数据库中待截断归档日志文件及所述主数据库的魔数值;
从所述主数据库中待截断归档日志文件内所述接管日志序列号位置处开始,删除所述接管日志序列号后所有归档日志文件的内容。
7.根据权利要求5所述的方法,其特征在于,所述获取所述备用数据库中在所述接管日志序列号后的所有归档日志文件及备用数据库的魔数值,包括:
根据所述接管日志序列号、所述备用数据库中各归档日志文件的起始日志序列号和结束日志序列号,查找所述备用数据库中待截断归档日志文件及所述备用数据库的魔数值;
从所述备用数据库中待截断归档日志文件内所述接管日志序列号位置处开始,获取所述接管日志序列号后的所有归档日志文件。
8.一种数据库修复装置,其特征在于,包括:
序列号获取模块,用于获取主数据库的最大日志序列号和备用数据库接管所述主数据库时的最大日志序列号;
数据获取模块,用于当所述主数据库的最大日志序列号大于所述备用数据库接管所述主数据库时的最大日志序列号时,获取所述主数据库中的检查点日志序列号和控制文件版本号;
接管序号查找模块,用于根据所述控制文件版本号查找所述备用数据库中的接管日志序列号,所述接管日志序列号是所述备用数据库接管所述主数据库时的日志序列号;
待修复段确定模块,用于如果所述检查点日志序列号大于所述接管日志序列号,则调整至所述检查点日志序列号小于或等于所述接管日志序列号后,确定所述接管日志序列号至所述主数据库的最大日志序列号为待修复日志序列段;否则,确定所述接管日志序列号至所述主数据库的最大日志序列号为待修复日志序列段;
数据覆盖模块,用于将所述主数据库中在所述待修复日志序列段内数据页号对应的数据页用所述备用数据库中相应的数据页覆盖;将所述备用数据库中在所述接管日志序列号后的所有归档日志文件拷贝到所述主数据库中,以使在所述主数据库中运行拷贝来的归档日志文件;并且,将所述备用数据库中的控制文件覆盖所述主数据库中的控制文件。
9.一种终端设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一项所述的数据库修复方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的数据库修复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810209358.3A CN108416040B (zh) | 2018-03-14 | 2018-03-14 | 一种数据库修复方法、装置、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810209358.3A CN108416040B (zh) | 2018-03-14 | 2018-03-14 | 一种数据库修复方法、装置、终端设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108416040A CN108416040A (zh) | 2018-08-17 |
CN108416040B true CN108416040B (zh) | 2020-10-27 |
Family
ID=63131347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810209358.3A Active CN108416040B (zh) | 2018-03-14 | 2018-03-14 | 一种数据库修复方法、装置、终端设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108416040B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542682B (zh) * | 2018-11-16 | 2021-03-30 | 上海达梦数据库有限公司 | 一种数据备份方法、装置、设备和存储介质 |
CN109684421B (zh) * | 2018-12-25 | 2023-05-02 | 四川效率源信息安全技术股份有限公司 | 一种基于图论的雕复Oracle数据库文件的方法 |
CN109739691A (zh) * | 2018-12-30 | 2019-05-10 | 上海达梦数据库有限公司 | 数据库备份和恢复方法、装置、终端设备及存储介质 |
CN110109934B (zh) * | 2019-05-08 | 2021-07-30 | 上海达梦数据库有限公司 | 一种数据库管理方法、装置、服务器及存储介质 |
CN110543386B (zh) * | 2019-09-16 | 2022-06-10 | 上海达梦数据库有限公司 | 一种数据存储方法、装置、设备和存储介质 |
CN110888790B (zh) * | 2019-11-29 | 2024-02-27 | 杭州迪普科技股份有限公司 | 日志管理方法及装置、电子设备、存储介质 |
CN111444147B (zh) * | 2020-03-30 | 2023-05-12 | 上海达梦数据库有限公司 | 一种数据页创建方法、装置、终端设备及存储介质 |
CN112104743B (zh) * | 2020-09-21 | 2022-08-16 | 北京金山云网络技术有限公司 | 序列生成方法、装置和电子设备 |
CN112231150B (zh) * | 2020-10-27 | 2024-03-19 | 北京人大金仓信息技术股份有限公司 | 数据库集群中故障数据库恢复方法和装置 |
CN114676118B (zh) * | 2022-05-30 | 2022-08-12 | 深圳市科力锐科技有限公司 | 数据库切换方法、装置、设备及存储介质 |
CN116701526A (zh) * | 2022-12-05 | 2023-09-05 | 荣耀终端有限公司 | 数据同步的方法及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001256085A (ja) * | 2000-03-09 | 2001-09-21 | Toshiba Corp | リレーショナルデータベース管理システム |
CN1910555A (zh) * | 2004-01-15 | 2007-02-07 | 甲骨文国际公司 | 地理分布式集群 |
US8200633B2 (en) * | 2009-08-07 | 2012-06-12 | International Business Machines Corporation | Database backup and restore with integrated index reorganization |
CN104679614A (zh) * | 2015-03-31 | 2015-06-03 | 成都文武信息技术有限公司 | 一种数据库灾备系统 |
CN106817387A (zh) * | 2015-11-28 | 2017-06-09 | 成都华为技术有限公司 | 一种数据同步方法、装置和系统 |
-
2018
- 2018-03-14 CN CN201810209358.3A patent/CN108416040B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001256085A (ja) * | 2000-03-09 | 2001-09-21 | Toshiba Corp | リレーショナルデータベース管理システム |
CN1910555A (zh) * | 2004-01-15 | 2007-02-07 | 甲骨文国际公司 | 地理分布式集群 |
US8200633B2 (en) * | 2009-08-07 | 2012-06-12 | International Business Machines Corporation | Database backup and restore with integrated index reorganization |
CN104679614A (zh) * | 2015-03-31 | 2015-06-03 | 成都文武信息技术有限公司 | 一种数据库灾备系统 |
CN106817387A (zh) * | 2015-11-28 | 2017-06-09 | 成都华为技术有限公司 | 一种数据同步方法、装置和系统 |
Non-Patent Citations (1)
Title |
---|
一种关键数据灾备与恢复方法的设计与实现;黄立峰;《中国优秀博硕士学位论文全文数据库 (硕士)》;20061215;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108416040A (zh) | 2018-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108416040B (zh) | 一种数据库修复方法、装置、终端设备及存储介质 | |
US11461202B2 (en) | Remote data replication method and system | |
JP4638905B2 (ja) | データベースのデータ復旧システムおよびその方法 | |
US9940205B2 (en) | Virtual point in time access between snapshots | |
US8127174B1 (en) | Method and apparatus for performing transparent in-memory checkpointing | |
US7353335B2 (en) | Storage control method for database recovery in logless mode | |
CN109542682B (zh) | 一种数据备份方法、装置、设备和存储介质 | |
US20040163029A1 (en) | Data recovery techniques in storage systems | |
KR100515890B1 (ko) | 효율적인 데이터베이스 복구방법 | |
JP2006023889A (ja) | リモートコピーシステム及び記憶装置システム | |
JP7108782B2 (ja) | データリカバリー方法、装置、サーバ及びコンピュータ・プログラム | |
EP3796174B1 (en) | Restoring a database using a fully hydrated backup | |
CN116680256B (zh) | 数据库节点升级方法、装置和计算机设备 | |
CN101196839A (zh) | 双快闪只读存储器的数据修复与同步方法 | |
US10078558B2 (en) | Database system control method and database system | |
US10671567B2 (en) | System and method for optimized lock detection | |
US10169381B2 (en) | Database recovery by container | |
US11269739B2 (en) | Method and system for managing backup data | |
CN112231150B (zh) | 数据库集群中故障数据库恢复方法和装置 | |
JP2009265973A (ja) | データ同期システム、障害復旧方法、及び、プログラム | |
CN113672436A (zh) | 一种容灾备份方法、装置、设备及存储介质 | |
CN111522688A (zh) | 分布式系统的数据备份方法及装置 | |
US11074141B2 (en) | Database recovery using shared memory | |
JP2850756B2 (ja) | 分散処理システムにおけるファイルの障害復旧方式 | |
US10078641B1 (en) | Optimized lock detection in a change block tracker |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |