sql2008数据库显示为紧急

sql2008数据库显示为紧急,第1张

1.

修改数据库为紧急模式 ALTER DATABASE jd13dafa SET EMERGENCY

2.

使数据库变为单用户模式 ALTER DATABASE jd13dafa SET SINGLE_USER

3.

修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。 DBCC CheckDB (jd13dafa , REPAIR_ALLOW_DATA_LOSS)

4.

使数据库变回为多用户模式 ALTER DATABASE jd13dafa SET MULTI_USER

您好,是这样的:

1.首先确认已经备份了.mdf和.ldf文件

2.

在SQL

Server中新建一个同名的数据库,然后停止SQL

Server服务。

3.

用原有的.mdf和.ldf文件覆盖新建数据库对应的.mdf和.ldf文件。

4.

重新启动SQL

Server服务,这是应该会看到这个数据库处于置疑(Suspect)状态。

5.

在SQL查询分析器中执行以下命令,以允许更新系统表:use

mastergosp_configure

"allow

updates",1reconfigurewithoverridego。

6.

将这个数据库置为紧急模式:update

sysdatabases

set

status

=

32768

where

name="db_name"go。

7.

使用DBCC

CHECKDB命令检查数据库中的错误:DBCC

CHECKDB("db_name")GO。

8.

如果DBCC

CHECKDB命令失败,请转至第10步,否则先将数据库置为单用户模式,再尝试对其进行修复:sp_dboption

"db_name","single

user","true"DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)GO

如果在执行DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令时提示说数据库未处于单用户模式状态的话,则重新启动SQLServer服务,然后继续尝试。

9.

如果DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令失败,请转至第10步,否则若成功修复了数据库中的错误:

重新执行DBCC

CHECKDB("db_name")命令,确认数据库中已没有错误存在。

清除数据库的置疑状态:sp_resetstatus

"db_name"

清除数据库的单用户模式状态:sp_dboption

"db_name","single

user","false"

重新启动SQL

Server服务,如果一切正常的话,则数据库已经成功恢复。

10.如果以上步骤都不能解决问题的话,请参考附件中的文档尝试通过重建事务日志来恢复数据库中的数据。如果您只有MDF文件,问题就更加复杂一些,我们需要直接重建事务日志了:

1.

在SQL

Server中新建一个同名的数据库,然后停止SQL

Server服务。

2.

用原有的ldf文件覆盖新建数据库对应的.mdf文件,将其日志文件(.ldf)删除。

3.

启动SQL

Server服务,并将数据库置为紧急模式(同上:

步骤5和步骤6)。

4.

停止并重新启动SQL

Server服务。

5.

执行以下命令重建数据库日志文件:(下面是个示例,您要用您实际的数据库名)

DBCC

REBUILD_LOG("cas_db",

"D:\cas_db\cas_db_Log.LDF")

6.

重新将该数据库置为单用户模式。

7.

再次尝试使用DBCC

CHECKTABLE或DBCC

CHECKDB命令检查并修复数据库中。

按照正常的数据库备份 *** 作备份一下数据库,然后按照后面的 *** 作只还原数据文件 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 ',1

go

reconfigure with override

go

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

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

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

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

dbcc rebuild_log( 'text ', 'D:\MSSQL7\Data\text_log.ldf ')

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

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

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

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

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

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

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

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

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

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

dbcc checkdb( 'text ')

一般执行结果如下:

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

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

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

sp_dboption 'text ', 'dbo use only ', 'false '

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

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

sp_configure 'allow updates ',0

go

reconfigure with override

go


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存