数据库恢复是和数据库备份相对应的操作,它是将数据库备份重新加载到系统中的过程。数据库恢复可以创建备份完成时数据库中存在的相关文件,但是备份以后的所有数据库修改都将丢失。
SQL Server进行数据库恢复时,系统将自动进行安全性检查,以防止误操作而使用了不完整的信息或其他的数据备份覆盖现有的数据库。当出现以下几种情况时,系统将不能恢复数据库。
(1)还原操作中的数据库名称与备份集中记录的数据库名称不匹配。
(2)需要通过还原操作自动创建一个或多个文件,但已有同名的文件存在。
(3)还原操作中命名的数据库已在服务器上,但是与数据库备份中包含的数据库不是同一个数据库,例如数据库名称虽相同,但是数据库的创建方式不同。
如果重新创建一个数据库,可以禁止这些安全检查。
一。数据库恢复模型
根据保存数据的需要和对存储介质使用的考虑,SQL Server提供了3种数据库恢复模型:简单恢复、完全恢复、大容量日志记录恢复。
1.简单恢复模型
简单恢复模型可以将数据库恢复到上次备份处,但是无法将数据库还原到故障点或待定的即时点。它常用于恢复最新的完整数据库备份、差异备份。
简单恢复模型的有点是允许高性能大容量复制操作,以及可以回收日志空间。但是必须重组最新的数据库或者差异备份后的更改。
2.完全恢复模型
完全恢复模型使用数据库备份和事务日志备份提供将数据库恢复到故障点或特定即时点的能力。为保证这种恢复程度,包括大容量操作(如SELECT INTO、CREATE INDEX和大容量装载数据)在内的所有操作都将完整地记入日志。
完全恢复模型的优点是可以恢复到任意即时点,这样数据文件的丢失和损坏不会导致工作损失,但是如果事务日志损坏,则必须重新做最新的日志备份后进行修改。
3.大容量日志记录恢复模型
大容量日志记录恢复模型为某些大规模或大容量复制操作提供最佳性能和最少日志使用空间。在这种模型中,大容量复制操作的数据丢失程度要比完全恢复模型严重,因为在这种模型下,只记录操作的最小日志,无法逐个控制这些操作。它只允许数据库恢复到事务日志备份的结尾处,不支持即时点恢复。
大容量日志记录恢复模型的优点是可以节省日志空间,但是如果日志损坏或者日志备份后发生了大容量操作,则必须重做自上次备份后所做的更改。
不同的hi付模型针对不同的性能、磁盘和磁带空间以及保护数据丢失的需要。恢复模型决定总体备份策略,包括可以使用的备份类型,即选择一种恢复模型,可以确定如何备份数据以及能承受何种程度的数据丢失,由此确定了数据的恢复过程。
二。查看备份信息
由于恢复数据库与备份数据库之间往往存在较长的时间差,难以记住备份设备和备份文件及其所备份的数据库,需要对这些信息进行查看。
需要查看的信息通常包括:备份集内的数据和日志文件、备份首部信息、介质首部信息。可以使用SQL Server管理平台和Transact-SQL语句查看这些信息。
1.使用SQL Server管理平台查看备份信息
使用SQL Server查看所有备份介质属性的操作步骤如下:
(1) 打开SQL Server管理平台,在对象资源管理器中,展开结点”服务器树“→”服务器对象“→”备份设备“,右击某个具体备份设备名称,在弹出的快捷菜单上选择”属性“命令,打开”备份设备“属性窗口。
(2)在”备份设备“属性窗口选择”媒体内容“选择卡,打开的窗口,在列表框中列出所选备份媒体的有关信息。
2.使用Transact-SQL语句查看备份信息
RESTORE HEADERONLY语句的格式为:
RESTORE HEADERONLY
FROM <backpi_device>
[WITH {NOUNLOAD|UNLOAD}
[[,]FILE =file_number]
[[,]PASSWORD={password|@password_var}]
[[,]MEDIAPASSWORD={mediapassword|@mediapassword_var}]
<backup_device>::={
{'logical_backup_device_name'|@logical_backup_device_name_var}
|{DISK|TAPE}={'physical_backup_device_name'|@physical_backup_name_var}
}]
各选项含义如下:
(1)<backup_device>:指定备份操作时要使用的逻辑或物理设备。
(2)FILE=file_number:标识要处理的备份集。
(3)PASSWORD={password|@password_var}:备份集密码。
(4)MEDIAPASSWORD={mediapassword|@mediapassword_var}:媒体集密码。
RESTORE HEADERONLY 语句返回的结果集包括:备份集名称、备份集类型、备份集的有效时间、服务器名称、数据库名称、备份大小等信息。
举例:使用Transact-SQL语句得到back4数据库备份的信息。
RESTORE HEADERONLY FROM back4
三。恢复数据库
1.使用SQL Server管理平台恢复数据库
其操作步骤如下:
(1)在SQL Server管理平台的”对象资源管理器“中,展开数据库文件夹,右击要进行还原的数据库图标,这里以Sales数据库为例,从弹出的快捷菜单中选择”任务/还原/数据库“选项,打开”还原数据库“窗口。
(2)在”还原数据库“窗口的”常规“选项卡中,”目标数据库“下拉列表框用于选择要还原的数据库;”目标时间点“文本框用于设置还原时间点,可以保留默认值,也可以通过单击旁边的浏览按钮打开”时点还原“对话框,选择具体的日期和时间,对于完整数据库备份恢复,只能恢复到完全备份完成的时间点;”还原的源“区域中的”源数据库“下拉列表框用于选择要还原的备份的数据库存的名称;”源设备“文本框用于设置还原的备份设备的位置;”选择用于还原的备份集“网格用于选择还原的备份。
(3)选择”选项“项。在其中进行还原选项和恢复状态的设置。其中,”覆盖现有数据库“复选框被选中表示恢复操作覆盖所有现有数据库及相关文件;”保留复制设置“复选框被选中表示将已发布的数据库还原到创建该数据库的服务器之外的服务器时,保留复制设置;”还原每个备份之前进行提示“复选框被选中表示在还原每个备份设置之前要求用户确认;”限制访问还原的数据库“复选框被选中表示还原后的数据库仅供db_owner、dbreator或sysadmin的成员使用;”将数据库文件还原为“区域可选择数据文件和日志文件的路径。
(4)设置完成后,单击”确定“按钮,即可还原数据库,并在还原成功后出现消息对话框,要求用户确认还原已成功完成。
差异备份、日志备份、文件和文件组备份的还原操作与完整数据库备份的还原操作过程相似。
2.使用Transact-SQL语句RESTORE恢复数据库
与BACKUP 语句 相对应,RESTORE语句可以恢复整个数据库备份、数据文件及文件组备份、事务日志备份。
RESTORE语句的语法格式为:
RESTORE {DATABASE|LOG}
{database_name|@database_name_var}
<file_or_filegroup>[,...n]
[FROM <backup_device>[,...n]]
[WITH
[RESTRICTED_USER]
[[,]FILE={file_number|@file_number}]
[[,]PASSWORD={password|@password_var}]
[[,]MEDIANAME={media_name|@media_name_var}]
[[,]mediapassword={mediapassword|@mediapassword_var}]
[[,]MOVE'logical_file_name'TO'operating_system_file_name'][,...n]
[[,]KEEP_REPLICATION]
[[,]{NORECOVERY|RECOVERY|STANDBY=undo_file_name}]
[[,]REPLACE]
[[,]RESTART]
[[,]STATS[=percentage]]
[[,]STOPAT={date_time|@date_time_var}
|[,]STOPATMARK='mark_name'[AFTER datetime]
|[,]STOPBEFOREMARK='mark_name'[AFTER datetime]]
]
各选项含义如下:
(1)DATABASE:指定要恢复备份的数据库。
(2)LOG:指定对数据库恢复事务日志备份。SQL Server检查已备份的事务日志,以确保按正确的序列将事务恢复到正确的数据库。
(3){database_name|@database_name_var}:将日志或整个数据库要还原到的数据库。
(4)<file_or_filegroup>:指定包括在要恢复的数据库中的逻辑文件或文件组的名称,可以指定多个文件或文件组。
(5)FROM<backup_device>:指定从中恢复备份的备份设备,其定义与BACKUP语句相同。
(6)RESTRICTED_USER:限制只有db_owner、db_creator或sysadmin角色的成员才能访问最近恢复的数据库。该选项与RECOVERY一起使用。
(7)FILE={file_number|@file_number}:标识要恢复的备份集。
(8)PASSWORD={password|@password_var}:提供备份集密码。
(9)MEDIAPASSWORD={mediapassword|@mediapassword_var}:提供媒体的密码。
(10)MOVE'logical_file_name'TO'operating_system_file_name':指定将给定的logical_file_name移到operating_system_file参数指定的位置。默认情况下,logical_file_name将恢复到其原始位置。
(11)NORECOVERY:指示在执行恢复操作后不回退任何未提交事务。
(12)RECOVERY:指示在执行恢复操作后回退未提交的事务,为默认值。
(13)STANDBY=undo_file_name:指定撤销文件名从而可以取消恢复。
(14)REPLACE:表示如果已经存在具有相同名称的数据库时,则删除已有的数据库,创建指定的数据库。
(15)STOPAT={date_time|@date_time_var}:指定只恢复数据库在指定的日期和时间之间的内容。该选项只与RESTORE LOG 一起使用。
(16)STOPATMARK='mark_name'[AFTER datetime]:表示恢复到指定的标记,包括包含该标记的事务。该选项只与RESTORE LOG一起使用。
(17)STOPBEFOREMARK='mark_name'[AFTER datetime]:表示恢复到指定的标记,但不包括包含该标记的事务。该选项只与RESTORE LOG一起使用。
举例:从一个已存在的备份媒体back1恢复整个数据库Sales.
RESTORE DATABASE Sales
FROM back1
举例:从磁盘上的备份文件D:\Sales_back.bak中恢复数据库Sales.
RESTORE DATABASE Sales FROM DISK='D:\Sales_back.bak'
举例:将一个数据库备份和一个事务日志进行数据库的恢复操作。
RESTORE DATABASE Sales
FROM back1 WITH NORECOVERY
RESTORE LOG Sales
FROM back1 WITH NORECOVERY
举例:恢复数据库Sales中指定数据文件Sales_data1.
RESTORE DATABASE Sales
FILE='Sales_data1'
FROM back4
WITH NORECOVERY