SQL Server 2000 SQL Server 2005 数据库 质疑

来源:互联网 发布:大型网络枪战游戏大全 编辑:程序博客网 时间:2024/05/18 02:23

问题描述

==========

SQL Server 2005用户数据库由于硬件故障处于“质疑”状态。

解决办法

==========

说明:采用以下数据库急救办法,修复的数据库中的数据在大多情况下都很有可能失败,即使修复成功,数据库中的数据也可能会有丢失,数据完整性会有一定程度的损坏,所以修复后的数据库中的数据不一定可用,请慎重考虑后再选择使用急救后的数据库,因为这些数据虽然已经恢复,但还是问题数据,很有可能会对今后的工作造成潜在的风险。我们建议数据库管理员要对数据库做定期的数据备份和数据库维护。

1.在SQL Server 2005或SQL Server 2008中急救“质疑”数据库的办法

--------------------------------------------------------------------
1)将“质疑”数据库附加至SQL Server中

注意:通常“质疑”数据库都无法成功添加到其他的数据库中,可以通过以下办法任意一个尝试附加:

方法a.将数据库文件.mdf和.ldf文件存放至默认的数据目录中:C:/Program files/Microsoft SQL Server/MSSQL.1/MSSQL/Data/

方法b.利用以下语句,只添加mdf文件

EXEC sp_attach_single_file_db @dbname = 'AdventureWorks',

    @physname = N'C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Data/AdventureWorks_Data.mdf';

方法c.创建同名数据库->停止SQL Server服务->替换同名数据库文件->启动SQL Server服务

2)将数据库设置为“单用户模式”

use master

go

alter database test set single_user

go

3)将数据库设置为“紧急模式”

alter database test set emergency

go

4)检查数据库

DBCC CHECKDB('test')

go

5)尝试使用通过重建索引对数据库做“无损”数据恢复

DBCC CHECKDB('test',REPAIR_REBUILD )

Go

6)如果步骤5失败,尝试对数据库做“有损”数据恢复,执行完毕后,注意SQL Server的输出结果,会提供数据库有哪些数据发生损失

DBCC CHECKDB('test',REPAIR_ALLOW_DATA_LOSS )

Go

参考链接:http://msdn.microsoft.com/zh-cn/library/ms176064(v=SQL.90).aspx

7)如果步骤6失败,尝试通过导出表来获取剩余数据,存储过程等等

use test

go

select * from sys.objects where type='U'

go

参考链接:http://msdn.microsoft.com/zh-cn/library/ms190324(v=SQL.90).aspx

8)当操作完毕后,将数据库设置为“多用户模式”

alter database test set multi_user

go

注意:无论使用什么办法成功地修复了数据库,我们都建议客户能够创建一个新的数据库,将旧的数据库的架构和数据导入新数据库后,废除旧的数据库,以免今后出现潜在的风险。

2.在SQL Server 2000中急救“质疑”数据库的办法

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

1)将“质疑”数据库附加至SQL Server中

注意:通常“质疑”数据库都无法成功添加到其他的数据库中,可以通过以下办法任意一个尝试附加:

方法a.利用以下语句,只添加mdf文件

EXEC sp_attach_single_file_db @dbname = 'AdventureWorks',

    @physname = N'C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Data/AdventureWorks_Data.mdf';

方法b.创建同名数据库->停止SQL Server服务->替换同名数据库文件->启动SQL Server服务

EXEC sp_attach_single_file_db @dbname = 'pubs',

   @physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf'

2)允许更新服务器配置

use master

go

Sp_configure 'allow updates', 1

Go

Reconfigure with override

Go

3)将数据库设置为“紧急”状态

select * from sysobjects

go

Update master..sysdatabases set status = 32768 where name =''

Go

Select * from sysdatabases

--Check that above UPDATE statement change the status to 32768

Go

执行以上语句后需要重新启动SQL Server服务才能生效。

参考链接:http://msdn.microsoft.com/zh-cn/library/aa260406(v=sql.80).aspx

4)重新创建数据库日志文件

dbcc rebuild_log('DB_name','LDF path and name')

--LDF name should be different with the previous name.

go

Update master..sysdatabases set status = 0 where name =''

go

sp_configure 'allow updates', 0

go

reconfigure with override

go

5)将数据库设置为“单用户模式”

select * from sysobjects

go

Update master..sysdatabases set status = 4096 where name =''

Go

Select * from sysdatabases

--Check that above UPDATE statement change the status to 4096

Go

执行以上语句后需要重新启动SQL Server服务才能生效。

6)检查数据库

DBCC CHECKDB('test')

go

7)尝试使用通过重建索引对数据库做“无损”数据恢复

DBCC CHECKDB('test',REPAIR_REBUILD )

Go

8)如果步骤7失败,尝试对数据库做“有损”数据恢复,执行完毕后,注意SQL Server的输出结果,会提供数据库有哪些数据发生损失

DBCC CHECKDB('test',REPAIR_ALLOW_DATA_LOSS )

Go

参考链接:http://msdn.microsoft.com/zh-cn/library/aa258278(v=sql.80).aspx

9)如果步骤8失败,尝试通过导出表来获取剩余数据,存储过程等等

select * from sysobjects

go

Update master..sysdatabases set status = 32768 where name =''

Go

Select * from sysdatabases

--Check that above UPDATE statement change the status to 32768

Go

重新启动SQL Server服务使以上数据库状态修改生效。

use test

go

select * from sysobjects where type='U'

go

参考链接:http://msdn.microsoft.com/zh-cn/library/aa260447(v=sql.80).aspx

8)当操作完毕后,将数据库设置为“正常状态”

select * from sysobjects

go

Update master..sysdatabases set status = 0 where name =''

Go

Select * from sysdatabases

--Check that above UPDATE statement change the status to 0

Go

重新启动SQL Server服务使以上数据库状态修改生效。

注意:无论使用什么办法成功地修复了数据库,我们都建议客户能够创建一个新的数据库,将旧的数据库的架构和数据导入新数据库后,废除旧的数据库,以免今后出现潜在的风险。

原创粉丝点击