17xie > SQL Server 2000系统管理与开发指南 > 第十三章 数据库恢复
背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-8579.html    注册17xie 一起来写书 实现您的出书梦想!

第十三章  数据库恢复

数据库恢复是数据库系统管理的另一项非常重要的工作,从某种意义上讲,数据库的恢复比数据库的备份更加重要和艰巨,因为数据库备份是在正常的状态下进行的,而数据库恢复原则上是在非正常的状态下进行的,比如硬件故障、软件瘫痪以及误操作等。

本章主要介绍以下内容:

n         使用RESTORE语句恢复数据库。

n         从不同的备份中恢复数据库。

n         恢复系统数据库。

13.1   

数据库恢复就是把数据库备份加载到系统中,在执行数据库恢复时,系统首先要进行一些安全性检查,比如检查数据库是否存在、数据库文件是否兼容等,以确保数据库安全和迅速地恢复。另外,不同的数据库备份类型,应该采取不同的恢复方法。

@        在恢复数据库、备份日志或文件的时候,应该考虑以下因素:

1)在进行数据库恢复之前,应该获取有关备份的信息。

2)在恢复最后一次备份的时候,应该使用RECOVERY选项。

3)如果要恢复附加备份,需要使用NORECOVERY选项。

在数据库故障之后,数据库管理员应该尽快建立一个事务日志备份,以便获取数据库故障之前的所有事务信息。管理员应该使用no-truncate开关,可以使用这个开关在数据库不可用的时候备份事务日志。

使用RESTORE语句进行恢复时,系统进行安全性检查。下面几种情况,系统不能恢复数据库:

n         服务器上的数据库文件集和备份集中的数据库文件集不一致。

n         如果在RESTORE语句中指定的数据库已经存在,并且该数据与在备份文件中记录的数据库不同。

n         不能提供用于恢复数据库的全部文件或者文件组。

上面已经提到,在数据库恢复的时候,如果不能提供恢复该数据库的文件或文件组,就不能进行数据库恢复。所以,在恢复数据库的时候,必须确保数据库备份是有效的。并且在备份文件中包括所有要恢复的内容。

可以使用以下两种方法查看数据库的备份信息:

n         使用SQL Server Enterprise Manager查看备份信息。

n         使用Transact-SQL语句查看备份信息。

 

常用的Transact-SQL语句有:RESTORE HEADERONLYRESTORE FILELISTONLYRESTORE BABELONLYRESTORE VERIFYONLY

使用RESTORE HEADERONLY语句可以获取指定文件或者备份集的标题信息。在执行RESTORE HEADERONLY时,可以返回如下信息:

1)备份文件和备份集名称和描述信息。

2)备份介质类型。

3)备份方法和类型。

4)备份的日期和时间。

5)备份尺寸大小和备份的序列号。

使用RESTORE FILELISTONLY语句可以获取在备份文件中的数据文件或事务日志文件的信息。在执行RESTORE FILELISTONLY时,可以返回如下信息:

1)数据库文件和事务日志文件的逻辑名称。

2)数据库文件和事务日志文件的物理名称。

3)文件类型。

4)文件组中包含的成员。

5)备份集的大小(MB)。

6)文件的最大容量(MB)。

使用RESTORE LABELONLY语句可以获取有关存储备份文件的备份介质的信息。使用RESTORE VERIFYONLY语句可以用来判断备份集的单个文件是否完整以及备份是否可读。

在执行数据库恢复之前,还需要注意以下几个方面:

1)在数据库恢复前,应该首先删除故障数据库,以便删除对故障硬件的任何引用。可以使用SQL Server Enterprise ManagerTransact-SQL语句删除相关数据库。

2)在数据库恢复前,必须限制用户对数据库的访问。数据库的恢复是静态的,应该使用SQL Server Enterprise Manager或者系统存储过程sp_bdotion设置数据库的dbo use only选项。

13.2  恢复数据库

可以使用以下两种方法恢复数据库:

n         使用SQL Server Manager

n         使用Transact-SQLRESTORE语句。

13.2.1  使用SQL Server Enterprise执行数据库恢复

使用SQL Server Enterprise Manager恢复数据库的步骤如下:

1)运行SQL Server Enterprise Manager

2)选择Tools菜单,单击Restore Database菜单项。弹出如图13-1所示的窗口。在该窗口中,有两个选项卡:GeneralOptions,默认选项卡是General选项卡。

13-1  Restore Database窗口

3)在General选项卡中,可以选择恢复的数据库和恢复类型。

4)选择Options选项卡,如图13-2所示。在该选项卡中,可以选择恢复时使用的选项和状态。

13-2  Options选项卡

13.2.2  使用RESTORE语句恢复数据库

RESTORE语句的语法形式如下:

RESTORE DATABASE{database_name|@database_name-var}

[FROM<backup_file>[n]

[WITH

[[]FILE=file_number]

[[]MOVElogical_file_nameTOoperating_system_file_name]

[[]REPLACE]

[[]{NORECOVERY|RECOVEY|STANDBY=undo_file_name}]]

其中,<backup_file>

{{backup_file_name|@backup_file_name_var}|

[DISK|TAPE|PIPE]={temp_backup_file|@temp_backup_file_var}}

下面介绍一下几个选项的含义:

1RECOVERY选项

使用RECOVERY选项可以在恢复最后一个事务日志或者完全数据库时保证数据库的一致状态。如果使用该选项,SQL Server系统取消事务日志中任何没有提交的事务并提交任何完成的事务。另外,在使用增量备份的时候,不能使用该选项。

2NORECOVERY选项

使用NORECOVERY选项可以恢复多个备份。SQL Server系统不仅取消事务日志中的任何没有提交的事务,也不提交完成的事务。

3FILE选项

使用FILE选项可以在备份文件中指定一个备份。

4MOVE TO选项

使用MOVE TO选项将文件恢复到另外一个位置。

5REPLACE选项

使用REPLACE选项可以用不同数据库备份中的数据替代已有数据库中的数据。

13.3.  从不同备份中恢复数据库

在恢复数据库的时候,首先要了解执行备份时使用的备份方法类型,也必须确认文件中包含了要恢复的数据库备份,确认备份有效并且包含备份集的全部文件。

13.3.1  从完全数据库备份中恢复

从完全数据库备份中恢复数据库的时候,SQL Server系统会重新创建数据库以及和数据库相关的文件。数据库重建的工作都是由系统自动完成的,不用用户创建数据库。一般情况下,以下数据库故障需要从完全数据库备份中恢复。

n         数据库磁盘文件损坏。

n         整个数据库被破坏性删除。

在执行完全数据库备份恢复时,应该指定REVOVERY选项,以保证数据库状态的一致性。

13.3.2  从增量备份中恢复

当从增量备份中恢复数据时,SQL Server系统只恢复最近一次数据库备份后数据库的变化部分。从增量备份中恢复数据库时,需要注意以下方面:

n         在从增量备份中恢复数据库之前,应该先从完全数据库备份中恢复数据库。

n         从增量备份中恢复数据库的语法形式和从完全数据库中恢复库的语法形式相同。所以,在RESTOREFROM子句中应指定含有增量备份的备份问题。

下面的例子从增量备份中恢复数据库。数据库备份文件nwinddbacdiff包含了一份增量备份文件。

USE master

RESTORE DATABASE northwind

FROM nwinddbacdiff

WITH NORECOVERY

13.3.3  恢复事务日志

使用SQL Server Enterprise ManagerTransact-SQL语句可以恢复事务日志。使用SQL ServerEnterprise Manager恢复事务日志的步骤如下:

1)运行SQL Server Enterprise Manager

2)选择相应的服务器,用鼠标右键单击pubs数据库,弹出一个快捷菜单,选择“所有任务”菜单项,展开其子菜单,如图13-3所示。

13-3  “所有任务”子菜单

3)单击Restore Database菜单命令,弹出如图13-4所示的对话框。在其中,选择From DeviceTransact Log单选按钮,以明确仅恢复事务日志。

4)单击“确定”按钮,恢复事务日志。

从事务日志中恢复数据的语法形式如下:

RESTORE LOG{database_name|@database_name_var}

[FROM<backup_file>[]]

[WITH

[[]NORECOVERYRECOVERYSTANDBY=undo_file_name}]

[[]ISTOPAT={data_time|@date_time_var}]]

13-4  设定仅恢复事物日志

下面是一个从事务日志备份中恢复数据的例子。在这个例子中,假设在一个备份文件上有一个完全数据库备份,两个事务日志备份在另外一个备份文件上。在这个例子中,第一步从完全数据库中恢复数据库,第二步恢复第一个事务日志的备份,第三步恢复第二个事务日志的备份,并且提交已经完成的事务,取消没有完成的事务。

USE master

RESTORE DATABASE northwind

FROM nwindbac

WITH NORECOVERY

GO

USE master

RESTORE LOG northwind

FROM nwindbaclog

WITH FILE=1

STATS

NORECOvERY

GO

USE master

RESTORE LOG northwind

FROM nwindbaclog

WIHT FILE=2

RECOVERY

13.3.4  恢复文件组和文件

如果某个非常关键的文件被破坏了,可以从文件备份或文件组备份中恢复数据库。从文件备份或文件组备份中恢复数据库的语法形式如下:

RESTORE DATABASE|database_name|@database_name_var|

<fille_or_filegroup>[m]

[FROM<backup_file>[n]]

其中,

<backup_file>

{FILE=logical_file_name|FILEGROUP=logical_filegroup_name}

下面是一个从文件或者文件组备份中恢复数据库的例子。在这个例子中,假设一个数据库存放在四个设备上:Nwind1Nwind2Nwind3Nwind4,数据库文件包含一个表及其索引,且该文件备份到Nwind2bac文件上。因为存放Nwbac文件的物理介质被破坏了,所以,在这个例子中,首先必须恢复N2bac文件,然后再恢复事务日志。

USE master

RESTORE DATABASE northwind

FILE=N2

FROM N2bac

GO

USE master

RESTORE LOG northwind

FROM nwindbaclog

WITH RECOVERY

13.4  恢复系统数据库

SQL Server 2000中,系统数据库主要包括mastermodelmsdb,主要用来存储系统信息。如果存储系统数据库的介质遭到破坏,就必须重建系统数据库。可以使用RESTORE语句或者SQL Server Enterprise Manager从系统数据库备份中恢复系统数据库,可以按照如下操作恢复系统数据库:

1)首先要重新建立数据库,可以使用Rebuild.exe命令行,重新创建系统数据库。

2)系统数据库创建之后,启动SQL Server服务。

3)启动SQL Server服务后,需要从系统数据备份中恢复数据库。一般情况下,先恢复master数据库,然后恢复msdb数据库,最后恢复model数据库。

13.5   

本章中,读者以学会下列内容:

n         数据库恢复就是把数据库备份加载到系统中,在执行数据恢复时,系统首先要进行一些安全性检查。

n         可以使用两种方法查看数据库的备份信息:使用SQL Server Enterprise Manager查看备份信息;使用Transact-SQL语句查看备份信息。

n         可以使用两种方法恢复数据库:使用SQL Server Manager;使用Transact-SQLRESTORE语句。

n         可以使用RESTORE语句或者SQL Server Enterprise Manager从系统数据库备份中恢复系统数据库。


字数:6641    最后更新:11个月以前 [12-01 13:31]徐振成 修改
本页编辑者:徐振成  
[前一页]:12.5小结本章介绍  [后一页]:第十四章 数据的导入…
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号