SQLServer的文件恢复技术

SQLServer的文件恢复技术,第1张

SQLServer的文件恢复技术,第2张

SQL Server的备份方式有两种,一种是使用BACKUP DATABASE备份数据库文件,另一种是直接复制数据库文件mdf和日志文件ldf。本文将主要介绍后者的备份和恢复。(本文假设您目前熟练使用服务器企业管理器和SQL Server查询分析器)

1.常规备份和恢复方法

通常,要备份数据库,我们必须首先断开数据库与正在运行的数据服务器的连接,或者停止整个数据库服务器,然后复制文件。

卸载数据库的命令:

Sp_detach_db数据库名称


连接到数据库的命令:

Sp_attach_db或Sp _ attach _ single _ file _ DBS _ attach _ db[@ dbname =]' dbname ',[@ filename 1 =]' filename _ n' [,...16]sp _ attach _ single _ file _ db[@ dbname =]'。


该方法可以正确还原SQL Sever 7.0和SQL Server 2000的数据库文件。重点是备份时mdf和ldf文件都要备份。mdf文件是数据库数据文件,ldf文件是数据库日志文件。

示例:

假设数据库是test,它的数据文件是test_data.mdf,它的日志文件是test_log.ldf我们来讨论一下如何备份和恢复数据库。

卸载数据库:

sp_detach_db 'test'


连接到数据库:

sp_attach_db 'test ',' C:\ Program Files \ Microsoft SQL Server \ MSSQL \ Data \ Test _ Data . mdf ',' C:\ Program Files \ Microsoft SQL Server \ MSSQL \ Data \ Test _ log . ldf ' sp _ attach _ single _ file _ db ' Test ',' C:\ Program Files \ Microsoft SQL Server \ MSSQL \ Data \ Test _ Data . MDF '
2、仅MDF文件恢复技术

由于种种原因,如果当时只备份了mdf文件,恢复起来会很麻烦。

如果您的mdf文件是由当前数据库生成的,那就很幸运了。也许您可以使用sp_attach_db或sp_attach_single_file_db来恢复数据库,但会出现如下消息:

设备激活错误。文件名“c:\ program files \ Microsoft SQL server \ MSSQL \ data \ test _ log . ldf”可能不正确。

已创建名为“c:\ program files \ Microsoft SQL server \ MSSQL \ data \ test _ log . ldf”的新日志文件。

但是,如果您的数据库文件是从其他计算机上复制的,那么很遗憾,也许上述方法不起作用。您可能会收到类似以下内容的错误消息:

服务器:消息1813,第16级,状态2,第1行

无法打开新数据库“test”。创建将终止。

设备激活错误。物理文件名d:\test_log。“LDF”可能是错误的。

我该怎么办?下面举一个恢复方法的例子。

a、我们使用默认的方法建立一个数据库(如test)进行恢复。您可以在SQL Server企业管理器中创建它。
b .停止数据库服务器。
C .删除刚刚生成的数据库的日志文件test_log.ldf,用要恢复的数据库mdf文件覆盖数据库数据文件test_data.mdf。
D .启动数据库服务器。此时,您将看到数据库测试的状态为“怀疑”。此时您无法对此数据库进行任何操作。
E .设置数据库以允许直接操作系统表。对于此操作,您可以在SQL Server企业管理器中选择数据库服务器,右键单击并选择“属性”,然后在“服务器设置”页面中选择“允许直接修改系统目录”。也可以使用下面的语句来实现。

使用master go sp_configure '允许更新',1 go使用override go重新配置


F,将测试设置为紧急修复模式

更新sysdatabases set status=-32768,其中dbid=DB_ID('test')


此时,您可以看到数据库在SQL Server企业管理器中处于“只读\怀疑\脱机\紧急模式”。您可以看到数据库中的表,但只有系统表。

g、执行下面的真正恢复操作,并重建数据库日志文件。

dbcc rebuild_log('test ',' C:\ Program Files \ Microsoft SQL Server \ MSSQL \ Data \ test _ log . ldf ')


在执行过程中,如果您遇到以下提示信息:

服务器:消息5030,第16级,状态1,第1行

无法以独占方式锁定数据库来执行此操作。

DBCC的死刑执行完毕。如果DBCC输出错误消息,请联系您的系统管理员。

说明您的其他程序正在使用该数据库。如果您刚刚在步骤F中使用SQL Server企业管理器打开了测试库的系统表,您可以直接退出SQL Server企业管理器。

正确执行完成的提示应该类似于:

警告:数据库“test”的日志已重建。事务一致性已经丢失。运行DBCC CHECKDB以验证物理一致性。必须重置数据库选项,并且可能需要删除冗余的日志文件。

DBCC的死刑执行完毕。如果DBCC输出错误消息,请联系您的系统管理员。

此时,当您在SQL Server企业管理器中打开它时,您将看到该数据库的状态为“仅限DBO”。此时,您可以访问数据库中的用户表。

H.验证数据库一致性(可以省略)

dbcc checkdb('test')


一般执行结果如下:

CHECKDB在数据库“test”中发现0个分配错误和0个一致性错误。

DBCC的死刑执行完毕。如果DBCC输出错误消息,请联系您的系统管理员。

I .将数据库设置为正常状态。

sp_dboption 'test ','仅使用dbo ',' false'


如果没有错误,您现在可以正常使用还原的数据库了。

J.最后,我们将恢复步骤e中设置的“允许直接修改系统目录”这一项,因为平时直接操作系统表是很危险的。当然,我们可以在SQL Server企业管理器中恢复它,也可以使用下面的语句。

sp_configure '允许更新',0 go使用override go重新配置


位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer的文件恢复技术

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情