数据库的复苏

数据库恢复是和数据库备份相对应的操作,它是将数据库备份重新加载到系统中的过程。数据库恢复可以创建备份完成时数据库中存在的相关文件,但是备份以后的所有数据库修改都将丢失。

–完整还原

   SQL
Server进行数据库恢复时,系统将自动进行安全性检查,以防止误操作而使用了不完整的信息或其他的数据备份覆盖现有的数据库。当出现以下几种情况时,系统将不能恢复数据库。

RESTORE DATABASE demoData
   FROM DISK=N'D:BackupdemoData.bak';  

  (1)还原操作中的数据库名称与备份集中记录的数据库名称不匹配。

RESTORE DATABASE { database_name | @database_name_var }
[ FROM <backup_device> [ ,…n ] ]
[ WITH
{
[       RECOVERY
–指定还原操作将所有未提交的事务回滚,并使数据库可用;如果后续需要从差异备份和事务日志备份继续还原操作,那么必须使用
NORECOVERY选项;RECOVERY 选项用于还原操作的最后一个Restore命令中。

  (2)需要通过还原操作自动创建一个或多个文件,但已有同名的文件存在。

        | NORECOVERY
–指定还原操作不回滚未提交的事务,后续需要从差异备份或事务日志备份继续还原操作,在还原过程的最后一个Restore命令之前,使用NoRecovery选项。

 
(3)还原操作中命名的数据库已在服务器上,但是与数据库备份中包含的数据库不是同一个数据库,例如数据库名称虽相同,但是数据库的创建方式不同。

        | STANDBY =   
{standby_file_name | @standby_file_name_var }
–RECOVERY(默认值)表示在当前备份完成前滚后,应执行回滚
]
| , <general_WITH_options> [ ,…n ]
| , <replication_WITH_option>
| , <change_data_capture_WITH_option>
| , <FILESTREAM_WITH_option>
| , <service_broker_WITH options>
| , <point_in_time_WITH_options—RESTORE_DATABASE>
} [ ,…n ]
]
[;]

   如果重新创建一个数据库,可以禁止这些安全检查。

–恢复数据库的一部分(部分还原)
RESTORE DATABASE { database_name | @database_name_var }
<files_or_filegroups> [ ,…n ]
[ FROM <backup_device> [ ,…n ] ]
WITH
PARTIAL, NORECOVERY
[ , <general_WITH_options> [ ,…n ]
| , <point_in_time_WITH_options—RESTORE_DATABASE>
] [ ,…n ]
[;]

一。数据库恢复模型

–将特定文件或文件组还原到数据库(文件还原) 
RESTORE DATABASE { database_name | @database_name_var }
<file_or_filegroup> [ ,…n ]
[ FROM <backup_device> [ ,…n ] ]
WITH
{
[ RECOVERY | NORECOVERY ]
[ , <general_WITH_options> [ ,…n ] ]
} [ ,…n ]
[;]

根据保存数据的需要和对存储介质使用的考虑,SQL
Server提供了3种数据库恢复模型:简单恢复、完全恢复、大容量日志记录恢复。

–将特定页面还原到数据库(页面还原) 
RESTORE DATABASE { database_name | @database_name_var }
PAGE = ‘file:page [ ,…n ]’
[ , <file_or_filegroups> ] [ ,…n ]
[ FROM <backup_device> [ ,…n ] ]
WITH
NORECOVERY
[ , <general_WITH_options> [ ,…n ] ]
[;]

1.简单恢复模型

–将事务日志还原到数据库(事务日志还原)
RESTORE LOG { database_name | @database_name_var }
[ <file_or_filegroup_or_pages> [ ,…n ] ]
[ FROM <backup_device> [ ,…n ] ]
[ WITH
{
[ RECOVERY | NORECOVERY | STANDBY =
{standby_file_name | @standby_file_name_var }
]
| , <general_WITH_options> [ ,…n ]
| , <replication_WITH_option>
| , <point_in_time_WITH_options—RESTORE_LOG>
} [ ,…n ]
]
[;]

 
简单恢复模型可以将数据库恢复到上次备份处,但是无法将数据库还原到故障点或待定的即时点。它常用于恢复最新的完整数据库备份、差异备份。

–将数据库还原到数据库快照捕获的时间点
RESTORE DATABASE { database_name | @database_name_var }
FROM DATABASE_SNAPSHOT = database_snapshot_name

 简单恢复模型的有点是允许高性能大容量复制操作,以及可以回收日志空间。但是必须重组最新的数据库或者差异备份后的更改。

 

2.完全恢复模型

 

 
完全恢复模型使用数据库备份和事务日志备份提供将数据库恢复到故障点或特定即时点的能力。为保证这种恢复程度,包括大容量操作(如SELECT
INTO、CREATE INDEX和大容量装载数据)在内的所有操作都将完整地记入日志。

<backup_device>::= –备份设备定义
{
{ logical_backup_device_name |
@logical_backup_device_name_var }
| { DISK | TAPE | URL } = { ‘physical_backup_device_name’ |  
@physical_backup_device_name_var }
}

完全恢复模型的优点是可以恢复到任意即时点,这样数据文件的丢失和损坏不会导致工作损失,但是如果事务日志损坏,则必须重新做最新的日志备份后进行修改。

<files_or_filegroups>::= –文件或文件组定义
{
FILE = { logical_file_name_in_backup |
@logical_file_name_in_backup_var }
| FILEGROUP = { logical_filegroup_name |
@logical_filegroup_name_var }
| READ_WRITE_FILEGROUPS  
–通过指定READ_WRITE_FILEGROUPS 创建的备份称为“部分备份”。在简单恢复模式下,只允许对只读文件组执行文件组备份。还原的数据备份类型:数据库备份、部分备份或文件备份。对于数据库备份或部分备份,日志备份序列必须从数据库备份或部分备份的结尾处开始延续。对于一组文件备份,日志备份序列必须从整组文件备份的开头开始延续。

3.大容量日志记录恢复模型

 }

 
大容量日志记录恢复模型为某些大规模或大容量复制操作提供最佳性能和最少日志使用空间。在这种模型中,大容量复制操作的数据丢失程度要比完全恢复模型严重,因为在这种模型下,只记录操作的最小日志,无法逐个控制这些操作。它只允许数据库恢复到事务日志备份的结尾处,不支持即时点恢复。

<general_WITH_options> [ ,…n ]::= –普通WITH选项定义
–还原操作选项 
MOVE ‘logical_file_name_in_backup’ TO
‘operating_system_file_name’
[ ,…n ]
| REPLACE –在SQL
Server实例中,如果要还原的数据和现存的数据库同名,那么,指定Replace选项,SQL
Server将会把已存在的同名数据库删除。如果没有指定Replace选项,SQL
Server会做安全检查,不会将现存的同名数据库删除
| RESTART
–在数据库还原操作中断(interrupt)时,重启还原操作,从中断处重新开始还原操作
| RESTRICTED_USER | CREDENTIAL
–对新还原的数据库,限制(restrict)用户访问,只允许角色 db_owner, dbcreator
或 sysadmin 的成员的访问

 
大容量日志记录恢复模型的优点是可以节省日志空间,但是如果日志损坏或者日志备份后发生了大容量操作,则必须重做自上次备份后所做的更改。

–备份设置选项 
| FILE = { backup_set_file_number | @backup_set_file_number }
| PASSWORD = { password | @password_variable }

 不同的hi付模型针对不同的性能、磁盘和磁带空间以及保护数据丢失的需要。恢复模型决定总体备份策略,包括可以使用的备份类型,即选择一种恢复模型,可以确定如何备份数据以及能承受何种程度的数据丢失,由此确定了数据的恢复过程。

–媒体设置选项 
| MEDIANAME = { media_name | @media_name_variable }
| MEDIAPASSWORD = { mediapassword | @mediapassword_variable }
| BLOCKSIZE = { blocksize | @blocksize_variable }

二。查看备份信息

–数据事务选项 
| BUFFERCOUNT = { buffercount | @buffercount_variable }
| MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

由于恢复数据库与备份数据库之间往往存在较长的时间差,难以记住备份设备和备份文件及其所备份的数据库,需要对这些信息进行查看。

–错误检测选项 
| { CHECKSUM | NO_CHECKSUM }  –检测校验和
| { STOP_ON_ERROR | CONTINUE_AFTER_ERROR }

 
需要查看的信息通常包括:备份集内的数据和日志文件、备份首部信息、介质首部信息。可以使用SQL
Server管理平台和Transact-SQL语句查看这些信息。

–检测选项 
| STATS [ = percentage ]

 1.使用SQL Server管理平台查看备份信息

–磁带选项 
| { REWIND | NOREWIND }
| { UNLOAD | NOUNLOAD }

  使用SQL Server查看所有备份介质属性的操作步骤如下:

<replication_WITH_option>::=
| KEEP_REPLICATION

  (1) 打开SQL
Server管理平台,在对象资源管理器中,展开结点”服务器树“→”服务器对象“→”备份设备“,右击某个具体备份设备名称,在弹出的快捷菜单上选择”属性“命令,打开”备份设备“属性窗口。

<change_data_capture_WITH_option>::=
| KEEP_CDC

(2)在”备份设备“属性窗口选择”媒体内容“选择卡,打开的窗口,在列表框中列出所选备份媒体的有关信息。

<FILESTREAM_WITH_option>::=
| FILESTREAM ( DIRECTORY_NAME = directory_name )

2.使用Transact-SQL语句查看备份信息

<service_broker_WITH_options>::=
| ENABLE_BROKER
| ERROR_BROKER_CONVERSATIONS
| NEW_BROKER

 RESTORE HEADERONLY语句的格式为:

<point_in_time_WITH_options—RESTORE_DATABASE>::=
| {
STOPAT = { ‘datetime’| @datetime_var }
| STOPATMARK = ‘lsn:lsn_number’
[ AFTER ‘datetime’]
| STOPBEFOREMARK = ‘lsn:lsn_number’
[ AFTER ‘datetime’]
}

RESTORE HEADERONLY

<point_in_time_WITH_options—RESTORE_LOG>::=
| {
STOPAT = { ‘datetime’| @datetime_var }
| STOPATMARK = { ‘mark_name’ | ‘lsn:lsn_number’ }
[ AFTER ‘datetime’]
| STOPBEFOREMARK = { ‘mark_name’ | ‘lsn:lsn_number’ }
[ AFTER ‘datetime’]
}

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语句可以恢复整个数据库备份、数据文件及文件组备份、事务日志备份。

发表评论

电子邮件地址不会被公开。 必填项已用*标注