sqlserver 数据库修复-sqlserver修复
数据库恢复的情况分为两类。 今天重点讲解普通备份、sql数据库修复方法和仅mdf文件的恢复技术,以及两种情况下的sql数据库修复方法。 有兴趣的朋友可以学习一下。 (参考)
备份SQL Server数据库有两种方法,一种是使用BACKUP DATABASE备份数据库文件,另一种是直接拷贝数据库文件mdf和日志文件ldf。 下面将主要讨论后者的备份和恢复。 本文假定您熟练使用 SQLServerEnterpriseManager(SQLServer 企业管理器)和 SQLServerQuweyAnalyser(SQLServer 查询分析器)
一、普通备份和sql数据库修复方法
在正常情况下,如果我们要备份一个数据库,首先要断开数据库与正在运行的数据服务器的连接,或者停止整个数据库服务器,然后再复制文件。
删除数据库的命令:sp_detach_db 数据库名
连接数据库的命令:sp_attach_db 或 sp_attach_single_file_db
s_attach_db[@dbname=]'dbname',[@filename1=]'filename_n'[,...16]
sp_attach_single_file_db[@dbname=]'dbname',[@physname=]'physical_name'
使用该方法可以正确恢复SQLSever7.0和SQLServer2000的数据库文件。 重点是备份的时候mdf和ldf文件都要备份。 mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:
数据库修复包括: sql数据库修复 sql数据库恢复 sqlserver修复 文件修复 raid数据恢复 sql数据库修复raid磁盘阵列 sql恢复 sqlserver恢复 假设数据库为test,其数据文件为test_data.md,日志文件为test_log.ldf。 让我们讨论如何备份和恢复数据库。
分离数据库:sp_detach_db 'test'
连接数据库:sp_attach_db'test','C:ProgramFilesMicrosoftSQLServerMSSQLDatatest_data.mdf','
C:ProgramFilesMicrosoftSQLServerMSSQLDatatest_log.ldf'
sp_attach_single_file_db 'test', 'C:ProgramFilesMicrosoftSQLServerMSSQLDatatest_data.mdf'
2.独有的mdf文件恢复技术
由于种种原因,如果当时我们只备份mdf文件,恢复起来会很麻烦。
如果你的mdf文件是由当前数据库生成的,那么你很幸运,也许你可以使用sp_attach_db或sp_attach_single_file_db来恢复数据库,但是会出现类似于下面信息的设备激活错误。 物理文件名“C:ProgramFilesMicrosoftSQLServerMSSQLdatatest_Log.LDF”可能有误。
已创建名为“C:ProgramFilesMicrosoftSQLServerMSSQLDatatest_log.LDF”的新日志文件。
但是,如果您的数据库文件是从另一台计算机上复制过来的,很遗憾,上述方法可能行不通。
您可能会收到类似于以下内容的错误消息
服务器:消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库“测试”。 CREATEDATABASE将终止,电脑资料《两种情况下sql数据库的修复方法》()。
设备激活错误。 物理文件名“d:test_log.LDF”可能有误。
怎么做? 别着急,让我们用一个例子来说明恢复方法。
A. 我们使用默认的方式创建一个数据库(比如test)用于恢复。 它可以建立在SQLServerEnterpriseManager中。
B. 停止数据库服务器。
C、删除刚刚生成的数据库的日志文件test_log.ldfsqlserver 数据库修复,用要恢复的数据库mdf文件覆盖刚刚生成的数据库数据文件test_data.mdf。
D. 启动数据库服务器。 此时,你会看到数据库测试的状态是“可疑”。 此时无法对此数据库执行任何操作。
E. 设置数据库以允许直接操作系统表。 本次操作,在SQL Server企业管理器中选择数据库服务器,右击,选择“属性”,在“服务器设置”页面选择“允许直接修改系统目录”。
也可以使用下面的语句来实现。
使用大师
去
sp_configure 'allowupdates', 1
去
重新配置与覆盖
去
F. 将测试设置为紧急修复模式
updatesysdatabasessetstatus=-32768wheredbid=DB_ID('test')
此时在SQLServerEnterpriseManager中可以看到数据库处于“只读可疑离线应急模式”,可以看到数据库中的表,但是只有系统表
G. 下面进行真正的恢复操作,重建数据库日志文件 dbccrebuild_log('test','C:ProgramFilesMicrosoftSQLServerMSSQLDatatest_log.ldf')
执行过程中,如果遇到如下提示信息:
服务器:消息 5030,级别 16,状态 1,第 1 行
无法独占锁定数据库以执行操作。
DBCC 执行完成。 如果 DBCC 输出错误消息sqlserver 数据库修复,请联系您的系统管理员。
这意味着你的其他程序正在使用这个数据库。 如果在步骤 F 中刚刚使用 SQLServerEnterpriseManager 打开了测试库的系统表,那么您可以直接退出 SQLServerEnterpriseManager。
正确执行完成的提示应类似于:
警告:数据库“测试”的日志已重建。 事务一致性已经丢失。 应运行 DBCC CHECKDB 以验证物理一致性。 数据库选项将不得不重新设置,可能需要删除多余的日志文件。数据恢复sql数据库修复密码恢复sql数据库恢复硬盘异响修复文件恢复sqlserver修复文件修复raid数据恢复sql数据库修复raid磁盘阵列sql恢复sqlserver recovery 硬盘数据恢复 硬盘坏道修复 硬盘数据修复 数据修复
DBCC 执行完成。 如果 DBCC 输出错误消息,请联系您的系统管理员。
这时候在SQLServerEnterpriseManager中打开,就会看到数据库的状态是“for DBO use only”。 现在您可以访问数据库中的用户表。
H.验证数据库一致性(可省略)
dbcccheckdb('测试')
大致执行结果如下:
CHECKDB 发现 0 个分配错误和 0 个一致性错误(在数据库“测试”中)。
DBCC 执行完成。 如果 DBCC 输出错误消息,请联系您的系统管理员。
一、设置数据库为正常状态
sp_dboption 'test', 'dbouseonly', 'false'
如果没有报错,恭喜你,你现在可以正常使用恢复后的数据库了。
J、最后一步,我们需要恢复步骤E中设置的“允许直接修改系统目录”项。因为通常直接操作系统表是比较危险的事情。当然我们可以在SQLServerEnterpriseManager中恢复,或者使用以下语句完成
sp_configure '允许更新',0
去
重新配置与覆盖
去