如何恢复和修复MS SQL数据库的MDF文件[2]

如何恢复和修复MS SQL数据库的MDF文件[2],第1张

怎么办呢别着急 下面我们举例说明恢复办法

A 我们使用默认方式建立一个供恢复使用的数据库(如test) 可以在SQL Server Enterprise Manager里面建立

B 停掉数据库服务器

C 将刚才生成的数据库的日志文件test_log ldf删除 用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data mdf

D 启动数据库服务器 此时会看到数据库test的状态为 置疑 这时候不能对此数据库进行任何 *** 作

E 设置数据库允许直接

*** 作系统表 此 *** 作可以在SQL Server Enterprise Manager里面选择数据库服务器 按右键 选择 属性 在 服务器设置 页面中将 允许对系统目录直接修改 一项选中 也可以使用如下语句来实现

以下是引用片段 use master go sp_configure  allow updates go reconfigure with override go

F 设置test为紧急修复模式

update sysdatabases set status= where dbid=DB_ID( test )

此时可以在SQL Server Enterprise Manager里面看到该数据库处于 只读\置疑\脱机\紧急模式 可以看到数据库里面的表 但是仅仅有系统表

G 下面执行真正的恢复 *** 作 重建数据库日志文件

dbcc rebuild_log( test C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log ldf )

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

服务器: 消息 级别 状态 行

未能排它地锁定数据库以执行该 *** 作

DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系

说明您的其他程序正在使用该数据库 如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表 那么退出SQL Server Enterprise Manager就可以了

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

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

DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系

此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为 只供DBO使用 此时可以访问数据库里面的用户表了

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

dbcc checkdb( test )

一般执行结果如下

CHECKDB 发现了 个分配错误和 个一致性错误(在数据库 test 中)

DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系

I 设置数据库为正常状态

sp_dboption test dbo use only false

如果没有出错 那么恭喜 现在就可以正常的使用恢复后的数据库啦

J 最后一步 我们要将步骤E中设置的 允许对系统目录直接修改 一项恢复 因为平时直接 *** 作系统表是一件比较危险的事情 当然 我们可以在SQL Server Enterprise Manager里面恢复 也可以使用如下语句完成

以下是引用片段 sp_configure  allow updates go reconfigure with override go

lishixinzhi/Article/program/SQL/201311/16354

第一步:在数据库“属性”选项下,选择“选项”,选择“限制访问”,值改为“SINGLE_USER”

第二步:执行SQL

DBCC CHECKDB (NC_Article, repair_allow_data_loss) with NO_INFOMSGS

第三步:执行SQL

DBCC CHECKDB

如果还有错误,继续执行第二步

第四步:在数据库“属性”选项下,选择“选项”,选择“限制访问”,值改为“MUTI_USER”

方法/步骤

修改数据库为紧急模式

ALTER DATABASE Test SET EMERGENCY

使数据库变为单用户模式

ALTER DATABASE Test SET SINGLE_USER

修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误,这个过程时间可能比较长。

DBCC CheckDB (Test , REPAIR_ALLOW_DATA_LOSS)

使数据库变回为多用户模式

ALTER DATABASE Test SET MULTI_USER

重新启动数据库服务

sql数据库926945(数据库成质疑状态解决方法)

第一种解决方法:

先删除报错数据库,再新建一同名数据库,然后暂停Service manager(及sql server 服务) ,删除库文件和日志文件再启动Service manager ,使用单数据文件恢复数据库命令恢复数据库。

例:打开sql server/tools/sql server query analyzer 执行下面 *** 作 EXEC sp_attach_single_file_db @dbname = 'pubs',

@physname = 'c:\mssql7\data\pubsmdf'

说明:‘pubs’为要恢复的数据库名称,‘c:\mssql7\data\pubsmdf’为要恢复的数据库的库文件的具体路径和文件名称。

再重新启动一下service manager ,看能否正常打开处理后的数据库;如果不可以再使用第二种方案。

第二种解决方法:打开sql server/tools/sql server query analyzer 执行下面 *** 作

USE MASTER

GO

sp_configure 'allow update',1

RECONFIGURE WITH OVERRIDE

GO

UPDATE sysdatabases

set status = 32768

WHERE name = 'db_pos363'

GO

sp_configure 'allow update',0

RECONFIGURE WITH OVERRIDE

GO

说明:'db_pos363'是要修复的数据库名称。

执行完毕再重启一下Service manager打开数据库看是否处于紧急状态!再从另一装有sql 2000的机器上连接报错的数据库,然后再在sql 2000的机器上新建一数据库,再使用sql 2000自带的数据库导入导出功能(在新建的数据库上单击右键/所有任务/数据导入、数据导出)从报错数据库导入数据到新建的数据库中!

在导入选项中注意以下几项:

1, 导入方式选择分‘从源数据库复制表和视图’以及‘从sql server数据库间复制对象和数据’。当选择从源数据库复制表和视图时一定要选择全部表!

2, 当选择‘从sql server数据库间复制对象和数据’时,在‘导入导出向导’对话框中去除‘使用默认选项’的选中标志;再在打开‘选项’对话框,去除以下三项的选中标志。A,复制数据用户和数据库角色;B,复制sql server 登陆;C,复制对象及权限。

3, 在使用‘从sql server数据库间复制对象和数据’时,有时会出现单张表导入失败,这时有时会在导入结束时提示那几张表导入失败有时不提示,如果提示,就再使用‘从源数据库复制表和视图’并选中导入失败的表重新导入一遍;如果不提示就只能在一张张表打开查看了,发现空表后再使用‘从源数据库复制表和视图’导入需要导入的表!

导入成功后再删除sql server 70机器上处于紧急状态的数据库,再新建一个同名数据库,建好后再使用sql 2000的数据库导出功能导出到此数据库中,在导出过程中同样要注意导入时的注意事项

-----------------------------------

以上方法摘自网络,如造成不可预知的后果,本人概不负责

--1、修改数据库为紧急模式ALTER DATABASE Stock SET EMERGENCY--2、使数据库变为单用户模式ALTER DATABASE Stock SET SINGLE_USER --3、修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。DBCC CheckDB (Stock, REPAIR_ALLOW_DATA_LOSS)--4、使数据库变回为多用户模式ALTER DATABASE Stock SET MULTI_USER1:重新建立一个,一样的数据库,路径名称,文件都一样哈;2:关掉SQLSERVER服务;3:把源文件COPY过来;4:开启SQLSERVER服务;5:执行上面的1到4步。OK

备份数据文件,然后按下面的步骤处理:

1新建一个同名的数据库(数据文件与原来的要一致)

2再停掉sql server(注意不要分离数据库)

3用原数据库的数据文件覆盖掉这个新建的数据库

4再重启sql server

5此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)

6完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用

数据库的脚本创建一个新的数据库,并将数据导进去就行了

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE

GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'

Go

sp_dboption '置疑的数据库名', 'single user', 'true'

Go

DBCC CHECKDB('置疑的数据库名')

Go

update sysdatabases set status =28 where name='置疑的数据库名'

Go

sp_configure 'allow updates', 0 reconfigure with override

Go

sp_dboption '置疑的数据库名', 'single user', 'false

假设数据库为TEST:

按以下步骤执行

A.设置数据库允许直接 *** 作系统表。此 *** 作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。

use master

go

sp_configure 'allow updates',1

go

reconfigure with override

go

B.设置test为紧急修复模式

update sysdatabases set status=-32768 where dbid=DB_ID('test')

此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表

C.下面执行真正的恢复 *** 作,重建数据库日志文件

dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logldf')

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

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

未能排它地锁定数据库以执行该 *** 作。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。

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

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

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

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

dbcc checkdb('test')

一般执行结果如下:

CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

E.设置数据库为正常状态

sp_dboption 'test','dbo use only','false'

如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。

F.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接 *** 作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成

sp_configure 'allow updates',0

go

reconfigure with override

go

上面的语句 *** 作步骤有点问题:

应该如下:

A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。

B.停掉数据库服务器。

C.将刚才生成的数据库的日志文件test_logldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_datamdf。

D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何 *** 作。

E.设置数据库允许直接 *** 作系统表。此 *** 作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。

use master

go

sp_configure 'allow updates',1

go

reconfigure with override

go

F.设置test为紧急修复模式

update sysdatabases set status=-32768 where dbid=DB_ID('test')

此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表

G.下面执行真正的恢复 *** 作,重建数据库日志文件

dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logldf')

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

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

未能排它地锁定数据库以执行该 *** 作。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。

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

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

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

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

dbcc checkdb('test')

一般执行结果如下:

CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

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

sp_dboption 'test','dbo use only','false'

如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。

J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接 *** 作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成

sp_configure 'allow updates',0

go

reconfigure with override

go

在附加数据库时,出现823错误时,可按以下方法 *** 作:

EXEC sp_configure 'allow updates ',1 RECONFIGURE WITH OVERRIDE / 打开修改系统表的开关 /

update sysdatabases set status = 32768 where name = '数据库名 '

DBCC REBUILD_LOG ( '数据库名 ', 'E: dzzdatabase dzz1204_LogLDF ' )

update sysdatabases set status = 0 where name = '数据库名 '

restore database 数据库名 WITH RECOVERY

EXEC sp_configure 'allow updates ',0 RECONFIGURE WITH OVERRIDE / 关闭打开修改系统表的开关 /

关于823错误的 SQL-SERVER 中的帮助:

================================

错误 823

严重级别 24

消息正文

在文件 ' '%4! ' ' 的偏移量 %3! 处的 %2! 过程中,检测到 I/O 错误 %1!。

解释

Microsoft SQL Server 在对某设备进行读或写请求时遇到 I/O 错误。该错误通常表明磁盘问题。但是,错误日志中在错误 823 之前记录的其它核心消息应指出涉及了哪个设备。

对策

检查该设备的可访问性和状态。

如果可能,执行硬件诊断并纠正问题。

从最新的数据库备份还原损坏的文件。从数据库备份中还原应始终是修复已损坏数据库的首选方法。

如果没有备份或者检测到的错误是孤立的,则 DBCC CHECKDB 的修复功能可能很有用。然而,比起从备份中还原损坏的文件,可能使用 DBCC CHECKDB 消耗的时间更多,且可能无法恢复全部数据。

注意 如果使用修复子句运行 DBCC CHECKDB 时,问题没有得到纠正,或者不知道该过程将如何影响数据,请与主要的支持提供者联系。

以上就是关于如何恢复和修复MS SQL数据库的MDF文件[2]全部的内容,包括:如何恢复和修复MS SQL数据库的MDF文件[2]、CHECKTABLE 发现了 0 个分配错误和 1 个一致性错误、SQL数据库2008数据库显示可疑,属性显示关闭如何修复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9468218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存