CN112612648A - 一种SQL Server数据库恢复方法、终端设备及存储介质 - Google Patents
一种SQL Server数据库恢复方法、终端设备及存储介质 Download PDFInfo
- Publication number
- CN112612648A CN112612648A CN202011601800.0A CN202011601800A CN112612648A CN 112612648 A CN112612648 A CN 112612648A CN 202011601800 A CN202011601800 A CN 202011601800A CN 112612648 A CN112612648 A CN 112612648A
- Authority
- CN
- China
- Prior art keywords
- log
- block
- file
- virtual
- list
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- 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/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种SQL Server数据库恢复方法、终端设备及存储介质,该方法中包括:S1:针对ldf日志文件中包含的所有虚拟日志文件构建虚拟日志文件列表;S2:遍历虚拟日志文件列表,将每个虚拟日志文件包含的所有日志块均添加至日志块列表内;S3:根据日志块列表内每个日志块对应的日志类型构建操作日志列表;S4:遍历操作日志列表,针对操作日志列表中的每个操作日志进行还原操作。本发明既可以支持服务无法运行情况的恢复,且可以支持已提交事务的恢复,相比于比现有技术恢复效果更好。
Description
技术领域
本发明涉及数据恢复领域,尤其涉及一种SQL Server数据库恢复方法、终端设备及存储介质。
背景技术
SQL Server作为最受欢迎的数据库之一,具有非常广泛的应用。其删除数据的恢复也一直是行业内备受关注的热点。当前行业已有一些支持SQL Server数据恢复的技术,主要原理是通过解析数据库mdf文件来恢复删除的数据和基于事务日志回滚来恢复数据。通过事务日志可以支持以下操作:
(1)恢复个别事务。如当应用程序发出rollback命令,或者数据库引擎检测到错误(如失去与客户端的通信),可使用日志记录回滚未完成的事务所做的修改。
(2)在SQL Server启动时恢复所有未完成的事务。当服务器发生故障时,数据库可能处于这样的状态:还没有将某些修改从缓存写入数据文件,在数据文件内有未完成的事务所做的修改。当启动SQL Server实例时,它对每个数据库执行恢复操作。前滚日志中记录的、可能尚未写入数据文件的每个修改。在事务日志中找到的每个未完成的事务都将回滚,以确保数据库的完整性。
(3)将还原的数据库、文件、文件组或页前滚至故障点。先还原上次完整数据库备份和上次差异数据库备份,然后将后续的事务日志备份序列还原到故障点。当还原每个日志备份时,数据库引擎重新应用日志中记录的所有修改,向前滚所有事务。当最后的日志备份还原后,数据库引擎将使用日志信息回滚到该点未完成的所有事务。
但是基于mdf的恢复方式,如果数据删除后继续写入数据则删除数据可能会被覆盖导致无法恢复,且该方法无法获取数据删除时间。而基于事务日志回滚的恢复方法只能恢复当前未执行完成的事务而已提交事务无法进行回滚或者需要依赖实时的数据库备份,若缺乏专业的数据库管理员而没有实时做备份数据库可能导致无法恢复数据。
发明内容
为了解决上述问题,本发明提出了一种SQL Server数据库恢复方法、终端设备及存储介质。
具体方案如下:
一种SQL Server数据库恢复方法,包括以下步骤:
S1:针对ldf日志文件中包含的所有虚拟日志文件构建虚拟日志文件列表;
S2:遍历虚拟日志文件列表,将每个虚拟日志文件包含的所有日志块均添加至日志块列表内;
S3:根据日志块列表内每个日志块对应的日志类型构建操作日志列表;
S4:遍历操作日志列表,针对操作日志列表中的每个操作日志进行还原操作。
进一步的,虚拟日志文件列表的构建方法包括以下步骤:
S11:打开ldf日志文件,获取ldf日志文件大小FileSize和虚拟日志文件起始地址Offset1,初始设定虚拟日志文件需要i=0;
S12:设定第i个虚拟日志文件Vi的偏移地址VLF_Offset为Offset1;
S13:分别从ldf日志文件的Offset1处偏移4、8、12和24个字节处获取虚拟日志文件的序列号VLF_FseqNo、状态VLF_Status、大小VLF_Size和偏移地址Offset2;
S14:判断Offset2是否等于Offset1,如果是,将第i个虚拟日志文件Vi添加至虚拟日志文件列表,进入S15;否则,结束;
S15:令i=i+1,Offset1=Offset1+VLF_Size,判断Offset1≥FileSize是否成立,如果是,结束;否则,返回S12。
进一步的,将每个虚拟日志文件包含的所有日志块添加至日志块列表的过程包括以下步骤:
S21:初始化设定虚拟日志文件中日志块的序号j=0;获取虚拟日志文件中日志块的起始地址Offset3;
S22:将第j个日志块Bj的偏移地址Block_Offset设定为Offset3;
S23:分别从虚拟日志文件的Offset1处偏移2、4、6、8和10个字节处获取日志块的日志数量Log_Count、第一条日志的偏移地址Log_SlotOffset、大小Block_Size、状态Block_Status和起始序列号Start_LSN;
S24;将日志块Bj添加至日志块列表,令j=j+1,Offset3=Offset3+Block_Size,判断Offset3≥虚拟日志文件的偏移地址VLF_Offset+虚拟日志文件的大小VLF_Size是否成立,如果是,结束;否则,返回S22。
进一步的,操作日志列表的构建过程包括针对每个日志块对应的操作日志进行如下步骤的操作:
S31:查找日志块对应的操作日志的日志类型,当日志类型为插入记录、删除记录或更新记录时,进入S32;当日志类型为开始事务或结束事物时,则获取操作日志的事务开始时间或结束时间,进入S34;
S32:从文件Log_Offset中获取操作日志的所在表对象的索引ID Index_id和所在表对象ID Object_id;
S33:从文件Log_Offset中获取数据块1和数据块2的长度DataLength1和DataLength2后,根据数据块1和数据块2的长度获取数据块1和数据块2的值Data1和Data2;
如果日志类型为插入记录,则将操作日志的Redo_length参数赋值为DataLength1,将Redo_data参数赋值为Data1;如果日志类型为删除记录,则将日志的Undo_length参数赋值为DataLength1,Redo_data参数赋值为Data1;如果日志类型为更新记录,则将日志的Redo_length参数赋值为DataLength1,Redo_data参数赋值为Data1,日志的Undo_length参数赋值为DataLength2,Redo_data参数赋值为Data2;
S34:将操作日志加入操作日志列表内。
进一步的,查找日志块Bj对应的第k个操作日志Lk的日志类型的过程包括以下步骤:
S311:初始化设定日志块中的操作日志的序号k=0,设定第k个操作日志Lk的起始地址为Log_Offset=Block_Offset+Log_SlotOffset-2*(i+1);
其中Block_Offset表示日志块Bj的偏移地址,Log_SlotOffset表示日志块Bj中的第一条记录的地址;
S312:将操作日志Lk的序列号LSN赋值为日志块Bj的起始序列号与k的和;
S313:分别从日志块的Log_Offset处偏移2、4、16、22和23个字节处获取操作日志Lk的固定长度Fix_length、前一个日志序列号Previous_LSN、事务ID Transaction_id、日志类型Operation_Type和上下文类型Context_Type。
进一步的,步骤S4中针对每个操作日志进行的还原过程包括以下步骤:
S41:获取ldf文件对应的数据库mdf文件,并解析mdf文件获取数据库的系统表信息,其中系统表包括sysschobjs和syscolpars;
S42:获取操作日志的Index_id和Object_id;
S43:通过Object_id查找系统表sysschobjs以获取操作日志所属的表名;
S44:通过Object_id查找系统表syscolpars以获取操作日志所属表的表结构信息;
S45:通过表结构信息,解析操作日志对应的Redo_data参数和Undo_data参数中的内容并恢复。
一种SQL Server数据库恢复终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述的方法的步骤。
本发明采用如上技术方案,既可以支持服务无法运行情况的恢复,且可以支持已提交事务的恢复。由于SQL Server事务日志中会记录所有事务日志及每个事务对数据库的修改,包括事务时间,事务id及修改的数据等,通过本发明所述方法恢复效果比现有软件恢复效果更好。
附图说明
图1所示为本发明实施例一中Ldf日志文件结构示意图。
图2所示为本发明实施例一中虚拟日志文件结构示意图。
图3所示为本发明实施例一中日志块结构示意图。
图4所示为该实施例的流程图。
图5所示为本发明实施例一中表结构示意图。
图6所示为本发明实施例一中插入记录的开始事务示意图。
图7所示为本发明实施例一中插入记录的提交示意图。
图8所示为本发明实施例一中删除记录的开始事务示意图。
图9所示为本发明实施例一中删除记录的提交示意图。
图10所示为本发明实施例一中恢复效果示意图。
具体实施方式
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。
现结合附图和具体实施方式对本发明进一步说明。
实施例一:
SQL Server把一个物理ldf日志文件从逻辑上划分为多个虚拟日志文件(VirtualLog File,VLF)。一个SQL Server数据库,可以定义多个物理日志文件,SQL Server逻辑上把他们当作一个整体,顺序写入日志记录,用完第一个,再用下一个:即第一个日志文件的当前空间,如果没有可分配的VLF时,就会使用下一个日志文件的VLF,直到最后一个日志文件也没有可分配的VLF时,会重新回到第一个日志开始增长。
Ldf日志文件的结构如图1所示,其对应的每个虚拟日志文件包含偏移地址(VLF_Offset)、日志大小(VLF_Size)、序列号(VLF_FseqNo)、虚拟日志文件状态(VLF_Status)等信息。
每个虚拟日志文件由多个日志块Block组成,如图2所示。每个日志块包含:块起始偏移地址(Block_Offset)、块大小(Block_Size)、块包含的日志个数(Log_Count)、前一个块的大小(Block_PrevSize)、块的起始序列号(Start_LSN)、日志块的状态(Block_Status)、日志块的第一条日志的偏移地址(Log_SlotOffset)等。
每个日志块中包含多个操作日志记录,每个事务可能会有多条操作日志记录,例如执行删除一条记录,最少会有开始事务,删除,结束事务三条记录。每个操作日志记录由唯一的按顺序增长的序列号LSN来标记,如图3所示。
每条记录至少包含:日志序列号(LSN)、日志类型(Operation_Type)、上下文类型(Context_Type)、事务id(Transaction_id)、日志长度(Record_Length)、前一个日志序列号(Previous_LSN)、事务开始时间(Begin_time)、事务结束时间(End_time),操作前数据(Undo_data)、操作前数据长度(Undo_length)、操作后数据(Redo_data)、操作后数据长度(Redo_length)等信息。
基于上述的ldf日志文件结构,本发明实施例提供了一种SQL Server数据库恢复方法,如图4所示,所述方法包括以下步骤:
S1:针对ldf日志文件中包含的所有虚拟日志文件构建虚拟日志文件列表。
虚拟日志文件列表的构建方法包括以下步骤:
S11:打开ldf日志文件,获取ldf日志文件大小FileSize和虚拟日志文件起始地址Offset1,初始设定虚拟日志文件需要i=0。
需要说明的是,虚拟日志文件起始地址根据ldf日志文件中文件头至第一个虚拟日志文件的偏移地址确定,该实施例中偏移地址为8192个字节。
S12:设定第i个虚拟日志文件Vi的偏移地址VLF_Offset为Offset1。
S13:分别从ldf日志文件的Offset1处偏移4、8、12和24个字节处获取虚拟日志文件的序列号VLF_FseqNo、状态VLF_Status、大小VLF_Size和偏移地址Offset2。
S14:判断Offset2是否等于Offset1,如果是,将第i个虚拟日志文件Vi添加至虚拟日志文件列表,进入S15;否则,结束。
S15:令i=i+1,Offset1=Offset1+VLF_Size,判断Offset1≥FileSize是否成立,如果是,结束;否则,返回S12。
该实施例中构建的虚拟日志文件列表为VS={V1,V2 V3,....,Vn},其中,列表中的每个元素Vi(i∈[1,n])对应一个虚拟日志文件,其包含四个属性:VLF_Offset(虚拟日志文件偏移地址,整型)、VLF_Size(虚拟日志文件大小,整型)、VLF_FseqNo(虚拟日志文件序列号,整型)、VLF_Status(虚拟文件日志状态,整型)。
S2:遍历虚拟日志文件列表,将每个虚拟日志文件包含的所有日志块均添加至日志块列表内。
将每个虚拟日志文件包含的所有日志块添加至日志块列表的过程包括以下步骤:
S21:初始化设定虚拟日志文件中日志块的序号j=0;获取虚拟日志文件中日志块的起始地址Offset3。
虚拟日志文件中日志块的起始地址与虚拟日志文件的文件头的偏移量为8192个字节。
S22:将第j个日志块Bj的偏移地址Block_Offset设定为Offset3。
S23:分别从虚拟日志文件的Offset1处偏移2、4、6、8和10个字节处获取日志块的日志数量Log_Count、第一条日志的偏移地址Log_SlotOffset、大小Block_Size、状态Block_Status和起始序列号Start_LSN。
S24;将日志块Bj添加至日志块列表,令j=j+1,Offset3=Offset3+Block_Size,判断Offset3≥虚拟日志文件的偏移地址VLF_Offset+虚拟日志文件的大小VLF_Size是否成立,如果是,结束;否则,返回S22。
该实施例中构建的日志块列表为BS={B1,B2,B3,....,Bm},其中,列表中的每个元素Bj(j∈[1,m])对应一个日志块,其包含六个属性:Block_Offset(日志块偏移地址,整型),Block_Size(日志块大小,整型),Log_Count(日志数量,整型),Block_PrevSize(前一个块大小,整型),Start_LSN(块的起始序列号,整型),Block_Status(日志块的状态),Log_SlotOffset(块内第一条日志的偏移地址,整型)。
S3:根据日志块列表内每个日志块对应的日志类型构建操作日志列表。
操作日志列表的构建过程包括针对每个日志块对应的操作日志进行如下步骤的操作:
S31:查找日志块对应的操作日志的日志类型,当日志类型为插入记录、删除记录或更新记录时,进入S32;当日志类型为开始事务或结束事物时,则获取操作日志的事务开始时间或结束时间,进入S34。
事务开始时间和事务结束时间分别从日志块的Log_Offset处偏移40和24个字节处获取。
查找日志块Bj对应的第k个操作日志Lk的日志类型的过程包括以下步骤:
S311:初始化设定日志块中的操作日志的序号k=0,设定第k个操作日志Lk的起始地址为Log_Offset=Block_Offset+Log_SlotOffset-2*(i+1);
其中Block_Offset表示日志块Bj的偏移地址,Log_SlotOffset表示日志块Bj中的第一条记录的地址。
S312:将操作日志Lk的序列号LSN赋值为日志块Bj的起始序列号与k的和。
S313:分别从日志块的Log_Offset处偏移2、4、16、22和23个字节处获取操作日志Lk的固定长度Fix_length、前一个日志序列号Previous_LSN、事务ID Transaction_id、日志类型Operation_Type和上下文类型Context_Type。
S32:从文件Log_Offset中获取操作日志的所在表对象的索引ID Index_id和所在表对象ID Object_id;
S33:从文件Log_Offset中获取数据块1和数据块2的长度DataLength1和DataLength2后,根据数据块1和数据块2的长度获取数据块1和数据块2的值Data1和Data2;
如果日志类型为插入记录(Operation_Type等于2),则将操作日志的Redo_length参数赋值为DataLength1,将Redo_data参数赋值为Data1;如果日志类型为删除记录(Operation_Type等于3),则将日志的Undo_length参数赋值为DataLength1,Redo_data参数赋值为Data1;如果日志类型为更新记录(Operation_Type等于4),则将日志的Redo_length参数赋值为DataLength1,Redo_data参数赋值为Data1,日志的Undo_length参数赋值为DataLength2,Redo_data参数赋值为Data2;
S34:将操作日志加入操作日志列表内。
重复步骤S31~S34,知道所有操作日志均处理完毕,判断标准根据日志块Bj的日志数量Log_Count确定。
该实施例中构建的操作日志列表为LS={L1,L2 L3,....,Lp},其中,列表中的每个元素Lk(k∈[1,p])对应一个操作日志,其包含十五个属性:LSN(序列号,整型)、Operation_Type(日志类型,整型)、Context_Type(上下文类型,整型)、Fix_length(日志固定长度,整型),Transaction_id(事务id,整型),Record_Length(日志长度,整型),Previous_LSN(前一个日志序列号,整型),Begin_time(事务开始时间,整型),End_time(事务结束时间),Undo_data(回滚数据,数据块),Undo_length(回滚数据长度,整型),Redo_data(重做数据,数据块),Redo_length(重做数据长度,整型),Object_id(日志所属对象id,整型),Index_id(日志所属索引id,整型)。
S4:遍历操作日志列表,针对操作日志列表中的每个操作日志进行还原操作。
步骤S4中针对每个操作日志进行的还原过程包括以下步骤:
S41:获取ldf文件对应的数据库mdf文件,并解析mdf文件获取数据库的系统表信息,其中系统表包括sysschobjs和syscolpars。
sysschobjs表中主要包含该数据库文件中的所有表名及表类型等信息syscolpars表中包含了每张表的表结构信息。
S42:获取操作日志的Index_id和Object_id;
S43:通过Object_id查找系统表sysschobjs以获取操作日志所属的表名;
S44:通过Object_id查找系统表syscolpars以获取操作日志所属表的表结构信息;
S45:通过表结构信息,解析操作日志对应的Redo_data参数和Undo_data参数中的内容并恢复。
实验验证
(1)创建一个SQL Server数据库TESTDB。
(2)在数据库TEST_DB上创建一张表TestTab,表结构详情如图5所示。
(3)开启事务,往表TestTab中插入5条记录,再提交事务,如图6和图7所示。
(4)开启事务,删除表中的后三条记录,再提交事务,如图8和图9所示。
(5)使用本实施例方法对数据库进行恢复,恢复效果如图10所示。
本发明实施例一针对现有方法无法处理记录被覆盖情况且无法获取记录的删除时间等问题,在基于ldf日志文件结构的基础上,结合现有的mdf文件离线解析方法,提出一种基于ldf日志文件的数据库记录删除恢复方法,该方法通过分析ldf日志文件结构,提取日志列表(列表中包含事务开始时间,结束时间),再结合日志所在的表对象id获取表结构从而得到删除日志的内容。既可以支持服务无法运行情况的恢复,且可以支持已提交事务的恢复。由于SQL Server事务日志中会记录所有事务日志及每个事务对数据库的修改,包括事务时间,事务id及修改的数据等,通过该方法恢复效果比现有软件恢复效果更好。
实施例二:
本发明还提供一种SQL Server数据库恢复终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。
进一步地,作为一个可执行方案,所述SQL Server数据库恢复终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述SQL Server数据库恢复终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述SQL Server数据库恢复终端设备的组成结构仅仅是SQL Server数据库恢复终端设备的示例,并不构成对SQL Server数据库恢复终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述SQL Server数据库恢复终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。
进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(CentralProcessing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述SQL Server数据库恢复终端设备的控制中心,利用各种接口和线路连接整个SQL Server数据库恢复终端设备的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述SQL Server数据库恢复终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。
所述SQL Server数据库恢复终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)以及软件分发介质等。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
Claims (8)
1.一种SQL Server数据库恢复方法,其特征在于,包括以下步骤:
S1:针对ldf日志文件中包含的所有虚拟日志文件构建虚拟日志文件列表;
S2:遍历虚拟日志文件列表,将每个虚拟日志文件包含的所有日志块均添加至日志块列表内;
S3:根据日志块列表内每个日志块对应的日志类型构建操作日志列表;
S4:遍历操作日志列表,针对操作日志列表中的每个操作日志进行还原操作。
2.根据权利要求1所述的SQL Server数据库恢复方法,其特征在于:虚拟日志文件列表的构建方法包括以下步骤:
S11:打开ldf日志文件,获取ldf日志文件大小FileSize和虚拟日志文件起始地址Offset1,初始设定虚拟日志文件需要i=0;
S12:设定第i个虚拟日志文件Vi的偏移地址VLF_Offset为Offset1;
S13:分别从ldf日志文件的Offset1处偏移4、8、12和24个字节处获取虚拟日志文件的序列号VLF_FseqNo、状态VLF_Status、大小VLF_Size和偏移地址Offset2;
S14:判断Offset2是否等于Offset1,如果是,将第i个虚拟日志文件Vi添加至虚拟日志文件列表,进入S15;否则,结束;
S15:令i=i+1,Offset1=Offset1+VLF_Size,判断Offset1≥FileSize是否成立,如果是,结束;否则,返回S12。
3.根据权利要求1所述的SQL Server数据库恢复方法,其特征在于:将每个虚拟日志文件包含的所有日志块添加至日志块列表的过程包括以下步骤:
S21:初始化设定虚拟日志文件中日志块的序号j=0;获取虚拟日志文件中日志块的起始地址Offset3;
S22:将第j个日志块Bj的偏移地址Block_Offset设定为Offset3;
S23:分别从虚拟日志文件的Offset1处偏移2、4、6、8和10个字节处获取日志块的日志数量Log_Count、第一条日志的偏移地址Log_SlotOffset、大小Block_Size、状态Block_Status和起始序列号Start_LSN;
S24;将日志块Bj添加至日志块列表,令j=j+1,Offset3=Offset3+Block_Size,判断Offset3≥虚拟日志文件的偏移地址VLF_Offset+虚拟日志文件的大小VLF_Size是否成立,如果是,结束;否则,返回S22。
4.根据权利要求1所述的SQL Server数据库恢复方法,其特征在于:操作日志列表的构建过程包括针对每个日志块对应的操作日志进行如下步骤的操作:
S31:查找日志块对应的操作日志的日志类型,当日志类型为插入记录、删除记录或更新记录时,进入S32;当日志类型为开始事务或结束事物时,则获取操作日志的事务开始时间或结束时间,进入S34;
S32:从文件Log_Offset中获取操作日志的所在表对象的索引ID Index_id和所在表对象ID Object_id;
S33:从文件Log_Offset中获取数据块1和数据块2的长度DataLength1和DataLength2后,根据数据块1和数据块2的长度获取数据块1和数据块2的值Data1和Data2;
如果日志类型为插入记录,则将操作日志的Redo_length参数赋值为DataLength1,将Redo_data参数赋值为Data1;如果日志类型为删除记录,则将日志的Undo_length参数赋值为DataLength1,Redo_data参数赋值为Data1;如果日志类型为更新记录,则将日志的Redo_length参数赋值为DataLength1,Redo_data参数赋值为Data1,日志的Undo_length参数赋值为DataLength2,Redo_data参数赋值为Data2;
S34:将操作日志加入操作日志列表内。
5.根据权利要求4所述的SQL Server数据库恢复方法,其特征在于:查找日志块Bj对应的第k个操作日志Lk的日志类型的过程包括以下步骤:
S311:初始化设定日志块中的操作日志的序号k=0,设定第k个操作日志Lk的起始地址为Log_Offset=Block_Offset+Log_SlotOffset-2*(i+1);
其中Block_Offset表示日志块Bj的偏移地址,Log_SlotOffset表示日志块Bj中的第一条记录的地址;
S312:将操作日志Lk的序列号LSN赋值为日志块Bj的起始序列号与k的和;
S313:分别从日志块的Log_Offset处偏移2、4、16、22和23个字节处获取操作日志Lk的固定长度Fix_length、前一个日志序列号Previous_LSN、事务ID Transaction_id、日志类型Operation_Type和上下文类型Context_Type。
6.根据权利要求1所述的SQL Server数据库恢复方法,其特征在于:步骤S4中针对每个操作日志进行的还原过程包括以下步骤:
S41:获取ldf文件对应的数据库mdf文件,并解析mdf文件获取数据库的系统表信息,其中系统表包括sysschobjs和syscolpars;
S42:获取操作日志的Index_id和Object_id;
S43:通过Object_id查找系统表sysschobjs以获取操作日志所属的表名;
S44:通过Object_id查找系统表syscolpars以获取操作日志所属表的表结构信息;
S45:通过表结构信息,解析操作日志对应的Redo_data参数和Undo_data参数中的内容并恢复。
7.一种SQL Server数据库恢复终端设备,其特征在于:包括处理器、存储器以及存储在所述存储器中并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1~6中任一所述方法的步骤。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1~6中任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011601800.0A CN112612648B (zh) | 2020-12-29 | 2020-12-29 | 一种SQL Server数据库恢复方法、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011601800.0A CN112612648B (zh) | 2020-12-29 | 2020-12-29 | 一种SQL Server数据库恢复方法、终端设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112612648A true CN112612648A (zh) | 2021-04-06 |
CN112612648B CN112612648B (zh) | 2022-11-08 |
Family
ID=75249032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011601800.0A Active CN112612648B (zh) | 2020-12-29 | 2020-12-29 | 一种SQL Server数据库恢复方法、终端设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612648B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110004586A1 (en) * | 2009-07-15 | 2011-01-06 | Lon Jones Cherryholmes | System, method, and computer program product for creating a virtual database |
CN103412803A (zh) * | 2013-08-15 | 2013-11-27 | 华为技术有限公司 | 数据恢复的方法及装置 |
CN107220145A (zh) * | 2017-05-19 | 2017-09-29 | 北京计算机技术及应用研究所 | 一种闪存数据库数据恢复的方法 |
CN108664359A (zh) * | 2018-05-23 | 2018-10-16 | 上海达梦数据库有限公司 | 一种数据库恢复方法、装置、设备及存储介质 |
CN109684292A (zh) * | 2019-01-10 | 2019-04-26 | 江苏华存电子科技有限公司 | 一种闪存数据库快速进行数据恢复的方法 |
US10613941B1 (en) * | 2015-09-30 | 2020-04-07 | EMC IP Holding Company LLC | Hybrid NVRAM logging in filesystem namespace |
CN112052120A (zh) * | 2020-08-27 | 2020-12-08 | 厦门市美亚柏科信息股份有限公司 | 数据库删除数据恢复方法和装置 |
-
2020
- 2020-12-29 CN CN202011601800.0A patent/CN112612648B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110004586A1 (en) * | 2009-07-15 | 2011-01-06 | Lon Jones Cherryholmes | System, method, and computer program product for creating a virtual database |
CN103412803A (zh) * | 2013-08-15 | 2013-11-27 | 华为技术有限公司 | 数据恢复的方法及装置 |
US10613941B1 (en) * | 2015-09-30 | 2020-04-07 | EMC IP Holding Company LLC | Hybrid NVRAM logging in filesystem namespace |
CN107220145A (zh) * | 2017-05-19 | 2017-09-29 | 北京计算机技术及应用研究所 | 一种闪存数据库数据恢复的方法 |
CN108664359A (zh) * | 2018-05-23 | 2018-10-16 | 上海达梦数据库有限公司 | 一种数据库恢复方法、装置、设备及存储介质 |
CN109684292A (zh) * | 2019-01-10 | 2019-04-26 | 江苏华存电子科技有限公司 | 一种闪存数据库快速进行数据恢复的方法 |
CN112052120A (zh) * | 2020-08-27 | 2020-12-08 | 厦门市美亚柏科信息股份有限公司 | 数据库删除数据恢复方法和装置 |
Non-Patent Citations (1)
Title |
---|
耿小芬: "事物日志与SQLServer数据库维护", 《晋城职业技术学院学报》 * |
Also Published As
Publication number | Publication date |
---|---|
CN112612648B (zh) | 2022-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11740974B2 (en) | Restoring a database using a fully hydrated backup | |
US9703640B2 (en) | Method and system of performing incremental SQL server database backups | |
US11914485B2 (en) | Restoration of specified content from an archive | |
US8060713B1 (en) | Consolidating snapshots in a continuous data protection system using journaling | |
US7756833B2 (en) | Method and system for synthetic backup and restore | |
US8965850B2 (en) | Method of and system for merging, storing and retrieving incremental backup data | |
US8977597B2 (en) | Generating and applying redo records | |
US7797358B1 (en) | Methods and apparatus for continuous data protection system having journal compression | |
US7689599B1 (en) | Repair of inconsistencies between data and metadata stored on a temporal volume using transaction log replay | |
US7774565B2 (en) | Methods and apparatus for point in time data access and recovery | |
EP1503290B1 (en) | Transaction consistent copy-on-write database | |
US7681001B2 (en) | Storage system | |
US9753811B2 (en) | Unobtrusive copies of actively used compressed indices | |
CN110569147B (zh) | 一种基于索引的删除文件恢复方法、终端设备及存储介质 | |
EP3796174A1 (en) | Restoring a database using a fully hydrated backup | |
US8762347B1 (en) | Method and apparatus for processing transactional file system operations to enable point in time consistent file data recreation | |
CN113419897A (zh) | 一种文件处理方法、装置、电子设备及其存储介质 | |
US11620056B2 (en) | Snapshots for any point in time replication | |
CN112612648B (zh) | 一种SQL Server数据库恢复方法、终端设备及存储介质 | |
US6978354B1 (en) | Method for creating a virtual data copy of a volume being restored | |
CN115858471A (zh) | 业务数据变更记录方法、装置、计算机设备及介质 | |
JPH033046A (ja) | ログ記録管理方式 | |
US20230393948A1 (en) | Storage system and method of restoring storage system | |
CN115878563B (zh) | 一种分布式文件系统目录级快照的实现方法及电子设备 | |
CN118245447A (zh) | 容灾复制方法、装置、存储设备和系统 |
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 |