讲解SQLServer数据库备份的多种方式
备份SQL Server数据库有两种方式,一种是使用BACKUP DATABASE备份数据库文件,另一种是直接复制数据库文件mdf和日志文件ldf。下面将主要讨论后者的备份和恢复。本文假设您能熟练使用SQL Server企业管理器(SQL Server企业管理器)和SQL Server qu wey Analyst(SQL Server查询分析器)
1、正常备份和SQL数据库恢复方法。
通常,要备份数据库,我们必须首先断开数据库与正在运行的数据服务器的连接,或者停止整个数据库服务器,然后复制文件。
卸除数据库的命令:Sp_detach_db数据库名称
连接数据库的命令:
Sp_attach_db或sp_attach_single_file_db
s _ attach _ db[@ dbname =]′dbname′,[@ filename 1 =]′filename _ n′[,...16]
sp _ attach _ single _ file _ db[@ dbname =]′dbname′,[@ phys name =]′physical _ name′
该方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件。重点是备份时mdf和ldf文件都要备份。mdf文件是数据库数据文件,ldf文件是数据库日志文件。
示例:
假设数据库是test,它的数据文件是test_data.mdf,它的日志文件是test_log.ldf我们来讨论一下如何备份和恢复数据库。
卸载数据库:sp_detach_db 'test '
连接到数据库:
sp_attach_db '测试',
' 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行
无法打开新数据库“测试”。创建将终止。
设备激活错误。物理文件名d:\test_log。“LDF”可能是错误的。
我该怎么办?别急,下面举个如何恢复的例子。
A.我们使用默认方法构建一个数据库(如test)进行恢复。您可以在SQL Server企业管理器中创建它。
B.停止数据库服务器。
C.删除刚刚生成的数据库的日志文件test_log.ldf,用要恢复的数据库mdf文件覆盖数据库数据文件test_data.mdf。
D.启动数据库服务器。此时,您将看到数据库测试的状态为“怀疑”。此时您无法对此数据库进行任何操作。
E.将数据库设置为允许直接操作系统表。对于此操作,您可以在SQL Server企业管理器中选择数据库服务器,右键单击并选择“属性”,然后在“服务器设置”页面中选择“允许直接修改系统目录”。也可以使用下面的语句来实现。
使用母版
去
sp_configure '允许更新',1
去
用覆盖重新配置
去
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企业管理器。
正确执行的提示应该类似于:(本文由phreak数据恢复中心的http://www.cellma.com.cn收集)
警告:数据库“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
去
用覆盖重新配置
去
位律师回复
0条评论