当前位置: 主页 > 数据库

sqlserver 数据库修复-sqlserver修复

发布时间:2023-02-09 16:15   浏览次数:次   作者:佚名

数据库恢复的情况分为两类。 今天重点讲解普通备份、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。 让我们讨论如何备份和恢复数据库。

sqlserver 数据库修复_csv数据导入sqlserver_sqlserver修复

分离数据库: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”的新日志文件。

但是,如果您的数据库文件是从另一台计算机上复制过来的,很遗憾,上述方法可能行不通。

您可能会收到类似于以下内容的错误消息

sqlserver修复_csv数据导入sqlserver_sqlserver 数据库修复

服务器:消息 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企业管理器中选择数据库服务器,右击,选择“属性”,在“服务器设置”页面选择“允许直接修改系统目录”。

也可以使用下面的语句来实现。

sqlserver 数据库修复_sqlserver修复_csv数据导入sqlserver

使用大师

sp_configure 'allowupdates', 1

重新配置与覆盖

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

updatesysdatabasessetstatus=-32768wheredbid=DB_ID('test')

此时在SQLServerEnterpriseManager中可以看到数据库处于“只读可疑离线应急模式”,可以看到数据库中的表,但是只有系统表

G. 下面进行真正的恢复操作,重建数据库日志文件 dbccrebuild_log('test','C:ProgramFilesMicrosoftSQLServerMSSQLDatatest_log.ldf')

csv数据导入sqlserver_sqlserver修复_sqlserver 数据库修复

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

服务器:消息 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.验证数据库一致性(可省略)

sqlserver 数据库修复_csv数据导入sqlserver_sqlserver修复

dbcccheckdb('测试')

大致执行结果如下:

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

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

一、设置数据库为正常状态

sp_dboption 'test', 'dbouseonly', 'false'

如果没有报错,恭喜你,你现在可以正常使用恢复后的数据库了。

J、最后一步,我们需要恢复步骤E中设置的“允许直接修改系统目录”项。因为通常直接操作系统表是比较危险的事情。当然我们可以在SQLServerEnterpriseManager中恢复,或者使用以下语句完成

sp_configure '允许更新',0

重新配置与覆盖