在MS SQLSERVER中一直存在这样的问题,SQLSERVER的状态“置疑”,原因如下几条:
1.错误的删除日志;
2.硬件(HD)损坏,造成日志和数据文件写入错误;
3.硬盘空间不够,比如日志文件过大;
解决方法:
最简单的方法是有数据库的全部备份,然后恢复即可。
步骤:
1. 删除原始的数据库:
USE MASTER
GO
DROP DATABASE DB_SUEPECT
2.建立同名的数据库:
使用master
开始
创建数据库DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
登录
( NAME = 'DBNAME_LOG ',
FILENAME = 'g:',
大小 = 5MB,
文件增长 = 5MB )
开始
3.数据库恢复:
RESTORE DATABASE DB_SUSPECT
FROM DBNAME_BACKUP.DAT
4.数据库缺陷检测:
DBCC CHECKDB('DB_SUSPECT')
5.重新启动MSSQLSERVER服务。
如果没有完整备份,那就要用一些特殊的方法:
1 .设置数据库为紧急模式
使用Master
GO
sp_configure '允许更新',1
重新配置并覆盖
继续
UPDATE sysdatabases SET status = 32768 where name = 'DB_SUSPECT'
继续
2.停掉SQL Server服务:
.Net STOP MSSQLSERVER
3.把数据库原始的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走:
4.启动SQL Server服务:
.Net START MSSQLSERVER
5.重新建立一个同名的数据库DB_SUSPECT;
USE master
GO
CREATE数据库 DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
登录
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
大小= 5MB,
文件增长= 5MB)
开始
p>
6.设置数据库以单用户的模式运行:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET SINGLE_USER
GO
7.停掉SQL服务:
.Net STOP MSSQLSERVER
8.把原来的数据文件重新覆盖回来:
9.启动SQL Server服务:
.Net START MSSQLSERVER
10.重新设置SQLSERVER的状态:
USE MASTER
GO
EXEC sp_resetstatus "DB_SUSPECT"
11.数据库缺陷检测:
DBCC CHECKDB('DB_SUSPECT')
12.恢复数据库为多用户模式:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET MULTI_USER
GO
13.恢复SQLSERVER原始的配置:
USE MATER
GO
UPDATE sysdatabases SET status = 4194320 where name = 'DB_SUSPECT'
GO
14.配置SQLSERVER不允许更新系统表:
USE MASTER
GO
sp_configure '允许更新', 0
重新配置覆盖
GO
15.重新启动MSSQLSERVER服务:
最好重新启动操作系统 p>
16.备份数据库:
可以通过SQLSERVER企业管理器或T-SQL。需要备份MASTER和DB_SUSPECT
补充一点,如果用DOMAIN\USER时,要注意对.MDF.LDF 的所在目录的权限。
灵验脚本
遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:
==================================================== ======
--在运行任何脚本之前,运行以下命令来设置
master数据库允许更新
USE master
执行
sp_configure '允许更新',1
执行
使用覆盖重新配置
执行
--运行以下脚本
UPDATE master..sysdatabases SET status = status ^ 256
WHERE name = 'Database_Name'
--运行以下脚本
exe
c SP_resetstatus Database_Name
--在此阶段停止并启动MSDTC
--创建过程后,立即禁用
对系统表的更新:
exec sp_configure '允许更新',0
继续
使用覆盖重新配置
继续