具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
图1是根据本发明的用于备份数据库的数据处理方法的第一实施例的流程图。如图1所示,该方法包括如下步骤:
步骤S102,获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件。
备份文件是拷贝到存储介质上的文件,可以帮助用户保护数据,以防止其在系统硬件或存储介质出现故障时受到破坏。常见的实现备份的方式有:使用U盘或者移动硬盘将重要数据备出电脑;使用刻录机将重要数据刻成光盘;将数据保存在分区以外,以免重装系统或系统损坏造成数据丢失;利用软盘备份数据等。按照备份内容可以分为三种备份形式:完全备份、差异备份和增量备份。完全备份是备份全部选中的文件夹,并不依赖文件的存档属性来确定备份哪些文件;差异备份是针对完全备份,备份上一次的完全备份后发生变化的所有文件;增量备份是针对于上一次备份(完全备份或者差异备份)后,所有发生变化的文件。SQL Server备份策略为只备份数据库、备份数据库和事务日志或者差异备份。
选择从分区到镜像,就是启动备份功能。比如:将C盘数据备份到D盘。备份文件的还原是从镜像到分区的过程,比如:将C盘数据备份到D盘,如果C盘数据意外丢失,则可以使用从镜像到分区的功能进行还原,还原时对文件系统没有要求,会还原到备份时的状态。需要注意的是备份和还原时源盘(或者源分区)和目标分区的选择。
步骤S104,获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址。
头文件在程序设计中通常是源代码形式,由编译器在处理另一个源文件的时候自动包含进来。一般来说,程序员通过编译器指令将头文件包含进其他源文件的开始(或头部)。一个头文件一般包含类、子程序、变量和其他标识符的前置声明。需要在一个以上源文件中被声明的标识符可以被放在一个头文件中,并在需要的地方包含这个头文件。
在大多数现代计算机编程语言中,程序可以被分成如子程序的更小的组件,这些组件可以通过许多物理源文件分发,这些源文件被单独编译。当一个子程序在定义的位置以外的地方被使用时,就需要引入前置声明和函数原型的概念。
例如,一个函数在一个源文件中有如下定义:
int add(int a,int b)
{
return a+b;
}
在另一个源文件中引用的时候就可以声明成这样(包含函数原型):
int add(int,int);
int triple(int x)
{
return add(x,add(x,x));
}
该方法需要程序员为add在两处维护函数声明,即在一个包含函数实现的文件中和使用该函数的文件中。如果函数的定义改变了,程序员必须要更改散布在程序中的所有的原型。利用头文件将使该问题大为简化,减少程序员的维护负担。头文件被用来唯一指定接口,并提供一些文档来说明如何使用在该文件中声明的组件。当定义改变的时候,只须更新声明的一个独立副本(在头文件中的那个)。例如,在下面的情况下,头文件仅包含add的声明,每一个引用了add的源文件使用#include来包含头文件:
/*File add.h*/
#ifndef ADD_H
#define ADD_H
int add(int,int);
#endif/*ADD_H*/
/*File triple.c*/
#include"add.h"
int triple(int x)
{
return add(x,add(x,x));
}
步骤S106,确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息。
通常根据客户的不同需求会将备份文件中具有相同特定信息的子文件同时还原到目标磁盘路径下,例如:可以是文件名以数字开头的子文件,文件名中包含“data”的子文件,占用空间在1000KB以内的子文件,创建日期在距当前日期一个月以内的子文件以及文件类型为word的子文件等,或者也可以是满足以上多个特征信息的组合的子文件,例如:文件名中包含“data”并且占用空间在1000KB以内的子文件。首先,按照用户需求确定待移动的子文件是包含何种特定信息的子文件,从而将待移动子文件与非待移动子文件区分开来。
步骤S108,从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址。
头文件里包括宏定义、结构体、函数声明等诸多信息。通过读取头文件中存在的相关函数可以获取备份文件中所有子文件的原始存储地址(原始目录),其中就包含有了具备特征信息的多个待移动子文件的原始存储地址(原始目录)。具体的函数实现是在库文件中,目录函数所在的函数库为dir.h、dos.h。
步骤S110,将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址。
通过指定一个特定的目标存储地址(目标目录),可以使指定的存储地址变成当前文件的存储地址(目录)。例如,利用int chdir(char*path)使指定的目标目录path(如:"C:\\WPS")变成当前的工作目录,成功返回0;利用int findfirst(char*pathname,struct ffblk*ffblk,int attrib)查找指定的文件,成功返回0,pathname为指定的目录名和文件名,如"C:\\WPS\\TXT",ffblk为指定的保存文件信息的一个结构。
由于备份文件中每个子文件对应的原始存储地址可能存在差异,因此需要对每一个待移动子文件进行指定,也就是说,针对每一个待移动子文件将会生成一个移动函数。但是,这些移动函数不是分离执行的,而是当所有待移动子文件的移动函数全部生成之后,执行一个共同的移动操作,即实现该步骤中的“同步移动”。该移动子文件的策略将在一定程度上提高了子文件移动的效率,对于实现备份文件中批量子文件还原十分有利。
在该实施例中,给出了用于备份数据库的数据处理的具体实现方法:获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件;获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址;确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息;从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址;将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址。该方法中,通过动态读取备份文件的头文件信息,将含有相同特征信息的多个子文件移动到目标存储地址,实现了备份文件中子文件的批量移动,大大提高了子文件的移动效率。
图2是根据本发明的用于备份数据库的数据处理方法的第二实施例的流程图。该实施例可以作为图1所示实施例的一种优选实施方式,如图2所示,该用于备份数据库的数据处理方法包括:
步骤S201,获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件。
该步骤等同于上述第一实施例中的步骤S102,这里不再赘述。
步骤S202,获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址。
该步骤等同于上述第一实施例中的步骤S104,这里不再赘述。
步骤S204,确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息。
该步骤等同于上述第一实施例中的步骤S106,这里不再赘述。
步骤S206,检测备份文件包含的多个子文件的信息。
用户根据自己的需求选定备份文件中需要还原的对象,对备份文件中包含的所有子文件的信息逐一进行检测,检测之后将会找到含有上述特征信息的子文件。该检测过程是按照特征信息的属性来进行的,正如第一实施例中,待移动子文件包含的特征信息可以是文件名以数字开头、文件名中包含“data”、占用空间在1000KB以内、创建日期在距当前日期一个月以内或者文件类型为word的子文件等,或者是以上多个特征信息的组合。这样,在检测备份文件包含的多个子文件的信息时,针对不同的特征信息属性,将检测不同的方面,而不是检测头文件中包含的多个子文件的所有信息。例如:待移动子文件包含的特征信息是占用空间在1000KB以内,检测时只需检测备份文件包含的多个子文件各自占用的空间。这种检测方法对于提高子文件移动的效率十分有利。
步骤S207,判断子文件是否包含特征信息。
该步骤的判断,即是一个将步骤S206中的检测结果与特征信息中中的规定的具体标准进行比较的过程。例如,待移动子文件包含的特征信息是占用空间在1000KB以内,每当检测完毕一个备份文件中子文件的占用空间,则与1000KB进行比较,如果该子文件的占用空间小于或者等于1000KB,则判断该子文件是待移动的子文件,可以进行步骤S208;如果该子文件的占用空间大于1000KB,则判断该子文件不是待移动的子文件,不对其进行步骤S208,而是继续检测下一个子文件,并继续进行判断。
步骤S208,如果子文件包含特征信息,则读取子文件的原始存储地址。
例如:待移动子文件包含的特征信息是占用空间在1000KB以内,每当检测到一个备份文件中子文件的占用空间小于或者等于1000KB,则读取该子文件的原始存储地址;如果某子文件占用空间超过了1000KB,则不再读取该子文件的原始存储地址,而是继续检测下一个子文件占用的空间。步骤S208与步骤S207是动态读取过程,边判断边读取子文件的原始存储地址,节省了程序的运行时间,在一定程度上提高了程序执行效率。
步骤S210,将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址。
该步骤等同于第一实施例中的步骤S110,这里不再赘述。
在该实施例中,给出了从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址的具体实现步骤,包括:检测备份文件包含的多个子文件的信息;判断子文件是否包含特征信息;如果子文件包含特征信息,则读取子文件的原始存储地址;将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址。在该实施例中,由于采用了动态读取子文件信息的方式,因此简化了获取待移动子文件相应的原始存储地址的过程,提高了子文件移动程序的执行效率。
图3是根据本发明的用于备份数据库的数据处理方法的第三实施例的流程图。该实施例可以作为图1所示实施例的一种优选实施方式,如图3所示,该用于备份数据库的数据处理方法包括:
步骤S301,获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件。
该步骤等同于上述第一实施例中的步骤S102,这里不再赘述。
步骤S302,获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址。
该步骤等同于上述第一实施例中的步骤S104,这里不再赘述。
步骤S304,确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息。
该步骤等同于上述第一实施例中的步骤S106,这里不再赘述。
步骤S306,从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址。
该步骤等同于上述第一实施例中的步骤S108,这里不再赘述。
步骤S307,确定第一目标存储地址,其中,第一目标存储地址是预先设定的移动多个待移动子文件的目标存储地址。
根据不同用户的不同需求,可以人为设定待移动子文件移向的磁盘地址。比如,用户A需要把备份文件中的某些子文件移动到“C:\Documents and Settings\yonghuA”路径下,则可以将“C:\Documents and Settings\yonghuA”设置为目标存储地址。其他的用户可根据自身不同的需要,更改该目标存储地址。对于具有相同特征信息的子文件,只需设定一次目标存储地址,即可实现将所有待移动子文件同时移到目标存储地址。该方法使用户可以自行选择备份文件中多个待移动子文件的目标存储地址,使批量文件移动过程更加人性化,同时对于提高子文件移动效率也十分有利。
步骤S308,获取预设规则,其中,预设规则规定将多个待移动子文件由相应的原始存储地址移动到第一目标存储地址。
该预设规则规定的是子文件移动过程的起始点和终止点,该规则可以体现在编写的移动相应子文件的程序中。比如,移动某子文件的程序为Move'AdventureWorks_Data'TO'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf',则从程序中可以看到预设规则是将AdventureWorks_Data由AdventureWorks_Data的原始存储地址移动到c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf。一旦设定了该预设规则,则上述检测出的含有相同特征信息的子文件将全部被移动到同一个目标存储地址。
步骤S310,按照预设规则将多个待移动子文件由相应的原始存储地址同步移动到第一目标存储地址。
在步骤S308中,给出了仅移动一个子文件的移动函数。这里,将对多个待移动子文件同步移动到目标存储地址进行举例说明。例如:待移动子文件包含的特征信息是文件名以数字开头并以数字结束,则通过检测得到了以下两个子文件的原始存储地址:'1 AdventureWorks_Data 2'和'3 AdventureWorks_Data 4',移动规则中设定的目标存储地址是c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf,则实现上述两个待移动子文件由相应的原始存储地址移动到第一目标存储地址的程序为:Move'1AdventureWorks_Data 2'TO'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf';Move'3 AdventureWorks_Data 4'TO'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf',生成两个程序后同步执行,便可将两个待移动子文件由相应的原始存储地址同步移动到第一目标存储地址。
在该实施例中,给出了将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址的具体实现步骤:确定第一目标存储地址,其中,第一目标存储地址是预先设定的移动多个待移动子文件的目标存储地址;获取预设规则,其中,预设规则规定将多个待移动子文件由相应的原始存储地址移动到第一目标存储地址;按照预设规则将多个待移动子文件由相应的原始存储地址同步移动到第一目标存储地址。通过以上步骤,允许用户自行指定目标存储地址,更加人性化地实现了备份文件中子文件的批量移动;同时,按照预设规则将多个子文件同步移动到目标存储地址,提高了文件移动效率,尤其适用于生产环境迁移时大量子文件的批量还原。
图4是根据本发明的用于备份数据库的数据处理方法的第四实施例的流程图。该实施例可以作为图1所示实施例的一种优选实施方式,如图4所示,该用于备份数据库的数据处理方法包括:
步骤S401,获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件。
该步骤等同于第一实施例中的步骤S102,这里不再赘述。
步骤S402,获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址。
该步骤等同于第一实施例中的步骤S104,这里不再赘述。
步骤S404,确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息。
该步骤等同于第一实施例中的步骤S106,这里不再赘述。
步骤S406,从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址。
该步骤等同于第一实施例中的步骤S108,这里不再赘述。
步骤S407,获取第二目标存储地址,其中,第二目标存储地址是数据库默认的移动多个待移动子文件的目标存储地址。
在一些情况下,用户出于工作效率的考虑,在不影响整体工作效果的前提下,用户只关注将备份文件中的某些子文件移出进行还原,并不关注将上述子文件移到什么目标存储地址。这时,待移动子文件将会自动移动到服务器默认的目标存储地址。这种目标存储地址的选择,可以很大程度上提高子文件的移动速率,节省整个程序的运行时间。需要注意的是,对于不同的服务器,默认目标存储地址可能不同;同一服务器,默认目标存储地址是可以更改的。如果更改了默认目标存储地址,则以后在不指定目标存储地址的情况下,所有文件还原之后都将保存在该默认目标存储地址。
步骤S408,获取预设规则,其中,预设规则规定将多个待移动子文件由相应的原始存储地址移动到第二目标存储地址。
如上述步骤S308中,预设规则规定的是子文件移动过程的起始点和终止点,该规则可以体现在编写的移动相应子文件的程序中。比如,移动某子文件的程序为Move'AdventureWorks_Data'TO,则从程序中可以看到预设规则是将AdventureWorks_Data由AdventureWorks_Data的原始存储地址移动到服务器默认的目标存储地址。
步骤S410,按照预设规则将多个待移动子文件由相应的原始存储地址同步移动到第二目标存储地址。
例如,待移动子文件包含的特征信息是文件名中包含data四个连续字母,通过检测得到了以下三个待移动子文件:'AdventureWorks_Data 1'、'3 AdventureWorks_Data 2'和'AdventureWorks_Data 3'。执行程序Move'AdventureWorks_Data 1'TO;Move'AdventureWorks_Data 2'TO;Move'AdventureWorks_Data 2'TO,则可以将三个待移动子文件同步移动到服务器默认的目标存储地址。
在该实施例中,给出了将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址的具体实现步骤:获取第二目标存储地址,其中,第二目标存储地址是数据库默认的移动多个待移动子文件的目标存储地址;获取预设规则,其中,预设规则规定将多个待移动子文件由相应的原始存储地址移动到第二目标存储地址;按照预设规则将多个待移动子文件由相应的原始存储地址同步移动到第二目标存储地址。通过以上步骤,可以在用户不特意指定目标存储地址的情况下实现子文件的移动,在对整体工作效果没有影响的前提下,这种移动方式更加快捷高效,对于提高生产环境中批量文件还原的速度大有益处。
图5是根据本发明的用于备份数据库的数据处理方法的第五实施例的流程图。该实施例可以作为图1所示实施例的一种优选实施方式,如图5所示,该用于备份数据库的数据处理方法包括:
步骤S501,获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件。
该步骤等同于第一实施例中的步骤S102,这里不再赘述。
步骤S502,获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址。
该步骤等同于第一实施例中的步骤S104,这里不再赘述。
步骤S504,确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息。
该步骤等同于第一实施例中的步骤S106,这里不再赘述。
步骤S506,从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址。
该步骤等同于第一实施例中的步骤S108,这里不再赘述。
步骤S507,获取数据库的注册表。
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。
注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件。16位驱动在WinNT下无法工作,所以所有设备都通过注册表来控制,一般这些是通过BIOS来控制的。
在没有注册表的情况下,操作系统不会获得必须的信息来运行和控制附属的设备和应用程序及正确响应用户的输入。
步骤S508,获取注册表中的键值信息。
注册表存储在一个层次结构的格式中,存储在其中的元素都基于一定的逻辑顺序。注册表键值是注册表中组织的基本单元。当在注册表中存储信息时,基于要存储的信息的类型选择适当的位置。
注册表由键(或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。
步骤S509,从注册表中的键值信息获取第二目标存储地址,其中,第二目标存储地址是数据库默认的移动多个待移动子文件的目标存储地址。
可以通过查询注册表中的键值信息准确地获取SqlSever的当前默认的目标存储地址。
步骤S510,获取预设规则,其中,预设规则规定将多个待移动子文件由相应的原始存储地址移动到第二目标存储地址。
该步骤等同于第一实施例中的步骤S408,这里不再赘述。
步骤S511,按照预设规则将多个待移动子文件由相应的原始存储地址同步移动到第二目标存储地址。
该步骤等同于第一实施例中的步骤S410,这里不再赘述。
在该实施例中,给出了获取第二目标存储地址的具体实现步骤:获取数据库的注册表;获取注册表中的键值信息;从注册表中的键值信息获取第二目标存储地址,其中,第二目标存储地址是数据库默认的移动多个待移动子文件的目标存储地址。通过以上步骤,可以通过注册表的键值信息准确获取当前默认的目标存储地址,从而更加准确地将多个待移动子文件转移到当前默认的目标存储地址,提高子文件移动效率。
图6是根据本发明的用于备份数据库的数据处理方法的第六实施例的流程图。该实施例可以作为图1所示实施例的一种优选实施方式,如图6所示,该用于备份数据库的数据处理方法包括:
步骤S601,获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件。
该步骤等同于第一实施例中的步骤S102,这里不再赘述。
步骤S602,获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址。
该步骤等同于第一实施例中的步骤S104,这里不再赘述。
步骤S604,确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息。
该步骤等同于第一实施例中的步骤S106,这里不再赘述。
步骤S606,从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址。
该步骤等同于第一实施例中的步骤S108,这里不再赘述。
步骤S607,检测备份文件中的多个子文件。
该步骤等同于步骤S206,这里不再赘述。
步骤S608,判断备份文件中的子文件是否是待移动子文件。
该步骤等同于步骤S207,这里不再赘述。
步骤S609,如果备份文件中的子文件是待移动子文件,则创建一个从待移动子文件的原始存储地址到目标存储地址的映射并创建一个用于将待移动子文件从相应的原始存储地址移动到目标存储地址的函数。
地址映射是指为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。例如:从待移动子文件的原始存储地址到目标存储地址的映射的函数形式如下所示:
RESTORE DATABASE[AdventureWorksCopy]FROM DISK=
'c:\mssql\backup\yukon\AW2K5_Full.bak'
WITH CHECKSUM,
MOVE'AdventureWorks_Data'TO
'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf',
MOVE'AdventureWorks_Log'TO
'c:\mssql\log\yukon\AdventureWorksCopy_Log.ldf',
RECOVERY,REPLACE,STATS=10;
步骤S610,同步执行用于移动多个待移动子文件的函数,将多个待移动子文件由相应的原始存储地址移动到目标存储地址。
将数据库备份文件头信息里取到的所有待移动子文件的文件名和目标存储地址分别写入Move语句,将所有Move语句同步执行,则可以实现将多个待移动子文件由相应的原始存储地址移动到目标存储地址。
在该实施例中,给出了将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址的具体实现步骤,包括:检测备份文件中的多个子文件判断备份文件中的子文件是否是待移动子文件;如果备份文件中的子文件是待移动子文件,则创建一个从待移动子文件的原始存储地址到目标存储地址的映射并创建一个用于将待移动子文件从相应的原始存储地址移动到目标存储地址的函数;同步执行用于移动多个待移动子文件的函数,将多个待移动子文件由相应的原始存储地址移动到目标存储地址。在该实施例中,通过针对每一个待移动子文件建立相应移动函数并同步执行所有函数的方式,实现了同步移动备份文件中多个待移动子文件的目的,简化了子文件的移动过程,提高了子文件移动程序的执行效率。
图7是根据本发明的用于备份数据库的数据处理装置的第一实施例的结构框图。如图7所示,该装置结构包括:
第一获取单元22,用于获取数据库中原始文件的备份文件,其中,备份文件包含多个子文件。
备份文件是拷贝到存储介质上的文件,可以帮助用户保护数据,以防止其在系统硬件或存储介质出现故障时受到破坏。常见的实现备份的方式有:使用U盘或者移动硬盘将重要数据备出电脑;使用刻录机将重要数据刻成光盘;将数据保存在分区以外,以免重装系统或系统损坏造成数据丢失;利用软盘备份数据等。按照备份内容可以分为三种备份形式:完全备份、差异备份和增量备份。完全备份是备份全部选中的文件夹,并不依赖文件的存档属性来确定备份哪些文件;差异备份是针对完全备份,备份上一次的完全备份后发生变化的所有文件;增量备份是针对于上一次备份(完全备份或者差异备份)后,所有发生变化的文件。SQL Server备份策略为只备份数据库、备份数据库和事务日志或者差异备份。
选择从分区到镜像,就是启动备份功能。比如:将C盘数据备份到D盘。备份文件的还原是从镜像到分区的过程,比如:将C盘数据备份到D盘,如果C盘数据意外丢失,则可以使用从镜像到分区的功能进行还原,还原时对文件系统没有要求,会还原到备份时的状态。需要注意的是备份和还原时源盘(或者源分区)和目标分区的选择。
第二获取单元24,用于获取备份文件的头文件信息,其中,头文件信息包含多个子文件对应的原始存储地址。
头文件在程序设计中通常是源代码形式,由编译器在处理另一个源文件的时候自动包含进来。一般来说,程序员通过编译器指令将头文件包含进其他源文件的开始(或头部)。一个头文件一般包含类、子程序、变量和其他标识符的前置声明。需要在一个以上源文件中被声明的标识符可以被放在一个头文件中,并在需要的地方包含这个头文件。
在大多数现代计算机编程语言中,程序可以被分成如子程序的更小的组件,这些组件可以通过许多物理源文件分发,这些源文件被单独编译。当一个子程序在定义的位置以外的地方被使用时,就需要引入前置声明和函数原型的概念。
例如,一个函数在一个源文件中有如下定义:
int add(int a,int b)
{
return a+b;
}
在另一个源文件中引用的时候就可以声明成这样(包含函数原型):
int add(int,int);
int triple(int x)
{
return add(x,add(x,x));
}
该方法需要程序员为add在两处维护函数声明,即在一个包含函数实现的文件中和使用该函数的文件中。如果函数的定义改变了,程序员必须要更改散布在程序中的所有的原型。利用头文件将使该问题大为简化,减少程序员的维护负担。头文件被用来唯一指定接口,并提供一些文档来说明如何使用在该文件中声明的组件。当定义改变的时候,只须更新声明的一个独立副本(在头文件中的那个)。例如,在下面的情况下,头文件仅包含add的声明,每一个引用了add的源文件使用#include来包含头文件:
/*File add.h*/
#ifndef ADD_H
#define ADD_H
int add(int,int);
#endif/*ADD_H*/
/*File triple.c*/
#include"add.h"
int triple(int x)
{
return add(x,add(x,x));
}
确定单元26,用于确定特征信息,其中特征信息是多个子文件中的多个待移动子文件共同含有的信息并且非待移动子文件没有含有的信息。
通常根据客户的不同需求会将备份文件中具有相同特定信息的子文件同时还原到目标磁盘路径下,例如:可以是文件名以数字开头的子文件,文件名中包含“data”的子文件,占用空间在1000KB以内的子文件,创建日期在距当前日期一个月以内的子文件以及文件类型为word的子文件等,或者也可以是满足以上多个特征信息的组合的子文件,例如:文件名中包含“data”并且占用空间在1000KB以内的子文件。首先,确定单元26按照用户需求确定待移动的子文件是包含何种特定信息的子文件,从而将待移动子文件与非待移动子文件区分开来。
读取单元28,用于从头文件信息中分别读取含有特征信息的多个待移动子文件对应的原始存储地址。
头文件里包括宏定义、结构体、函数声明等诸多信息。通过读取单元28读取头文件中存在的相关函数可以获取备份文件中所有子文件的原始存储地址(原始目录),其中就包含有了具备特征信息的多个待移动子文件的原始存储地址(原始目录)。具体的函数实现是在库文件中,目录函数所在的函数库为dir.h、dos.h。
移动单元210,用于将多个待移动子文件由相应的原始存储地址同步移动到目标存储地址。
通过指定一个特定的目标存储地址(目标目录),可以使指定的存储地址变成当前文件的存储地址(目录)。例如,利用int chdir(char*path)使指定的目标目录path(如:"C:\\WPS")变成当前的工作目录,成功返回0;利用int findfirst(char*pathname,struct ffblk*ffblk,int attrib)查找指定的文件,成功返回0,pathname为指定的目录名和文件名,如"C:\\WPS\\TXT",ffblk为指定的保存文件信息的一个结构。
由于备份文件中每个子文件对应的原始存储地址可能存在差异,因此需要对每一个待移动子文件进行指定,也就是说,针对每一个待移动子文件将会生成一个移动函数。但是,这些移动函数不是分离执行的,而是当所有待移动子文件的移动函数全部生成之后,执行一个共同的移动操作,即实现该步骤中的“同步移动”。该单元移动子文件的策略将在一定程度上提高了子文件移动的效率,对于实现备份文件中批量子文件还原十分有利。
图8是根据本发明的用于备份数据库的数据处理装置的第二实施例的结构框图。该实施例可以作为图7所示实施例的一种优选实施方式,如图8所示,该用于备份数据库的数据处理装置包括:
第一获取单元22、第二获取单元24、确定单元26、读取单元28以及移动单元210,其中,第一获取单元22、第二获取单元24、确定单元26以及移动单元210与图7中相同,这里不再赘述。读取单元28还可以包括:
第一检测模块32,用于检测备份文件包含的多个子文件的信息。
第一检测模块32对备份文件中包含的所有子文件的信息逐一进行检测,检测之后将会找到含有上述特征信息的子文件。该模块的检测过程是按照特征信息的属性来进行的,正如第一实施例中,待移动子文件包含的特征信息可以是文件名以数字开头、文件名中包含“data”、占用空间在1000KB以内、创建日期在距当前日期一个月以内或者文件类型为word的子文件等,或者是以上多个特征信息的组合。这样,在该模块检测备份文件包含的多个子文件的信息时,针对不同的特征信息属性,将检测不同的方面,而不是检测头文件中包含的多个子文件的所有信息。例如:待移动子文件包含的特征信息是占用空间在1000KB以内,检测时只需检测备份文件包含的多个子文件各自占用的空间。这种检测方法对于提高子文件移动的效率十分有利。
第一判断模块34,用于判断子文件是否包含所特征信息。
该模块的的判断过程,即是一个将步骤S206中的检测结果与特征信息中中的规定的具体标准进行比较的过程。例如,待移动子文件包含的特征信息是占用空间在1000KB以内,每当检测完毕一个备份文件中子文件的占用空间,则与1000KB进行比较,如果该子文件的占用空间小于或者等于1000KB,则判断该子文件是待移动的子文件,可以进行步骤S208;如果该子文件的占用空间大于1000KB,则判断该子文件不是待移动的子文件,不对其进行步骤S208,而是继续检测下一个子文件,并继续进行判断。
读取模块36,用于如果子文件包含特征信息,则读取子文件的原始存储地址。
例如:待移动子文件包含的特征信息是占用空间在1000KB以内,每当检测模块检测到一个备份文件中子文件的占用空间小于或者等于1000KB,则该模块读取该子文件的原始存储地址;如果某子文件占用空间超过了1000KB,则不再读取该子文件的原始存储地址,而是检测模块继续检测下一个子文件占用的空间。模块32和36所进行的过程是动态读取过程,边判断边读取子文件的原始存储地址,节省了程序的运行时间,在一定程度上提高了程序执行效率。
在该实施例中,给出了读取单元28的模块组成,包括:第一检测模块32、第一判断模块34和读取模块36。由于通过以上模块实现了动态读取子文件信息,因此简化了获取待移动子文件相应的原始存储地址的过程,提高了子文件移动程序的执行效率。
图9是根据本发明的用于备份数据库的数据处理装置的第三实施例的结构框图。该实施例可以作为图7所示实施例的一种优选实施方式,如图9所示,该用于备份数据库的数据处理装置包括:
第一获取单元22、第二获取单元24、确定单元26、读取单元28以及移动单元210,其中,第一获取单元22、第二获取单元24、确定单元26、读取单元28和图7中所述相同,这里不再赘述。移动单元210还可以包括:
确定模块42,用于确定第一目标存储地址,其中,第一目标存储地址是预先设定的移动多个待移动子文件的目标存储地址。
根据不同用户的不同需求,可以人为设定待移动子文件移向的磁盘地址。比如,用户A需要把备份文件中的某些子文件移动到“C:\Documents and Settings\yonghuA”路径下,则可以将“C:\Documents and Settings\yonghuA”设置为目标存储地址。其他的用户可根据自身不同的需要,更改该目标存储地址。对于具有相同特征信息的子文件,只需设定一次目标存储地址,即可实现将所有待移动子文件同时移到目标存储地址。该模块允许用户自行选择备份文件中多个待移动子文件的目标存储地址,使批量文件移动过程更加人性化,同时对于提高子文件移动效率也十分有利。
第一获取模块44,用于获取预设规则,其中,预设规则规定将多个待移动子文件由相应的原始存储地址移动到第一目标存储地址。
上述预设规则规定的是子文件移动过程的起始点和终止点,该规则可以体现在编写的移动相应子文件的程序中。比如,移动某子文件的程序为Move'AdventureWorks_Data'TO'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf',则从程序中可以看到预设规则是将AdventureWorks_Data由AdventureWorks_Data的原始存储地址移动到c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf。
第一移动模块46,用于按照预设规则将多个待移动子文件由相应的原始存储地址同步移动到第一目标存储地址。
这里,将对多个待移动子文件同步移动到目标存储地址进行举例说明。例如:待移动子文件包含的特征信息是文件名以数字开头并以数字结束,则通过检测得到了以下两个子文件原始存储地址:'1 AdventureWorks_Data 2'和'3 AdventureWorks_Data 4',c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf是移动规则中设定的目标存储地址,则第一移动模块46执行实现上述两个待移动子文件由原始存储地址移动到第一目标存储地址的程序为:
Move'1AdventureWorks_Data2'TO'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf';Move'3AdventureWorks_Data4'TO'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf'生成两个程序后同步执行,便可将两个待移动子文件由相应的原始存储地址同步移动到第一目标存储地址。
在该实施例中,给出了移动单元210还可以包括还可包含的模块组成:确定模块42、第一获取模块44和第一移动模块46。通过以上模块,允许用户自行指定目标存储地址,更加人性化地实现了备份文件中子文件的批量移动;同时,第一移动模块46按照预设规则将多个子文件同步移动到目标存储地址,提高了文件移动效率,尤其适用于生产环境迁移时大量子文件的批量还原。
下面是根据本发明的用于备份数据库的数据处理装置的第四实施例的结构框图。该实施例可以作为图7所示实施例的一种优选实施方式。该用于备份数据库的数据处理装置包括:
第一获取单元22、第二获取单元24、确定单元26、读取单元28以及移动单元210,其中,第一获取单元22、第二获取单元24、确定单元26、读取单元28和图7中所述相同,这里不再赘述。移动单元210还可以包括:
第二获取模块,用于获取第二目标存储地址,其中,第二目标存储地址是数据库默认的移动多个待移动子文件的目标存储地址。
在一些情况下,用户出于工作效率的考虑,在不影响整体工作效果的前提下,用户只关注将备份文件中的某些子文件移出进行还原,并不关注将上述子文件移到什么目标存储地址。这时,待移动子文件将会自动移动到服务器默认的目标存储地址。这种目标存储地址的选择,可以很大程度上提高子文件的移动速率,节省整个程序的运行时间。需要注意的是,对于不同的服务器,默认目标存储地址可能不同;同一服务器,默认目标存储地址是可以更改的。如果更改了默认目标存储地址,则以后在不指定目标存储地址的情况下,所有文件还原之后都将保存在该默认目标存储地址。
第三获取模块,用于获取预设规则,其中,预设规则规定将多个待移动子文件由相应的原始存储地址移动到第二目标存储地址。
预设规则规定的是子文件移动过程的起始点和终止点,该规则可以体现在编写的移动相应子文件的程序中。比如,移动某子文件的程序为Move'AdventureWorks_Data'TO,则从程序中可以看到预设规则是将AdventureWorks_Data由AdventureWorks_Data的原始存储地址移动到服务器默认的目标存储地址。
第二移动模块,用于按照预设规则将多个待移动子文件由相应的原始存储地址同步移动到第二目标存储地址。
例如,待移动子文件包含的特征信息是文件名中包含data四个连续字母,通过第一检测模块检测得到了以下三个待移动子文件:'AdventureWorks_Data 1'、'3AdventureWorks_Data 2'和'AdventureWorks_Data 3'。执行程序Move'AdventureWorks_Data 1'TO;Move'AdventureWorks_Data 2'TO;Move'AdventureWorks_Data 2'TO,则第二移动模块可以将三个待移动子文件同步移动到服务器默认的目标存储地址。
在该实施例中,给出了移动单元210还可以包括的模块组成:第二获取模块、第三获取模块和第二移动模块。通过以上模块,可以实现在用户不特意指定目标存储地址的情况下实现子文件的移动,在对整体工作效果没有影响的前提下,这种移动方式更加快捷高效,对于提高生产环境中批量文件还原的速度大有益处。
下面是根据本发明的用于备份数据库的数据处理装置的第五实施例的结构框图。该实施例可以作为用于备份数据库的数据处理装置的第四实施例的一种优选实施方式。该用于备份数据库的数据处理装置包括:
第一获取单元22、第二获取单元24、确定单元26、读取单元28以及移动单元210,其中,移动单元210还包括第二获取模块、第三获取模块和第二移动模块。这里,除第二获取模块外,其他单元和模块与装置的第四实施例中所述相同,这里不再赘述。第二获取模块还可以包括:
第四获取模块,用于获取数据库的注册表。
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。
注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件。16位驱动在WinNT下无法工作,所以所有设备都通过注册表来控制,一般这些是通过BIOS来控制的。
在没有注册表的情况下,操作系统不会获得必须的信息来运行和控制附属的设备和应用程序及正确响应用户的输入。
第五获取模块,用于获取注册表中的键值信息。
注册表存储在一个层次结构的格式中,存储在其中的元素都基于一定的逻辑顺序。注册表键值是注册表中组织的基本单元。当在注册表中存储信息时,基于要存储的信息的类型选择适当的位置。
注册表由键(或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。
第六获取模块,用于从注册表中的键值信息获取第二目标存储地址。
第六获取模块可以通过查询注册表中的键值信息准确地获取SqlSever的当前默认的目标存储地址。
在该实施例中,给出了第二获取模块还可包含的模块组成:第四获取模块、第五获取模块和第六获取模块。通过以上模块,可以实现通过注册表的键值信息准确获取当前默认的目标存储地址,从而更加准确地将多个待移动子文件转移到当前默认的目标存储地址,提高子文件移动效率。
下面是根据本发明的用于备份数据库的数据处理装置的第六实施例的结构框图。该实施例可以作为图7的一种优选实施方式。该用于备份数据库的数据处理装置包括:
第一获取单元22、第二获取单元24、确定单元26、读取单元28以及移动单元210,其中,第一获取单元22、第二获取单元24、确定单元26、读取单元28与图7实施例中所述相同,这里不再赘述。移动单元210还可以包括:
第二检测模块,用于检测备份文件中的多个子文件。
第二判断模块,用于判断备份文件中的子文件是否是待移动子文件。
创建模块,用于如果备份文件中的子文件是待移动子文件,则创建一个从待移动子文件的原始存储地址到目标存储地址的映射并创建一个用于将待移动子文件从相应的原始存储地址移动到目标存储地址的函数。
地址映射是指为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。例如:从待移动子文件的原始存储地址到目标存储地址的映射的函数形式如下所示:
RESTORE DATABASE[AdventureWorksCopy]FROM DISK=
'c:\mssql\backup\yukon\AW2K5_Full.bak'
WITH CHECKSUM,
MOVE'AdventureWorks_Data'TO
'c:\mssql\data\yukon\AdventureWorksCopy_Data.mdf',
MOVE'AdventureWorks_Log'TO
'c:\mssql\log\yukon\AdventureWorksCopy_Log.ldf',
RECOVERY,REPLACE,STATS=10;
执行模块,用于同步执行用于移动多个待移动子文件的函数,将多个待移动子文件由相应的原始存储地址移动到目标存储地址。
执行模块将数据库备份文件头信息里取到的所有待移动子文件的文件名和目标存储地址分别写入Move语句,将所有Move语句同步执行,实现了将多个待移动子文件由相应的原始存储地址移动到目标存储地址。
在该实施例中,给出了移动单元210还可包括的模块组成:第二检测模块、第二判断模块和执行模块。通过以上模块,可针对每一个待移动子文件建立相应移动函数并同步执行所有函数的方式,实现同步移动备份文件中多个待移动子文件的目的,从而简化了子文件的移动过程,提高了子文件移动程序的执行效率。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。