sql数据库质疑是设置错误造成的,解决方法为:
1、通过DBCC CHECKCB('DBName') 来检测数据库异常的原因,如果可以检测到数据库的异常,其中红色部分即时数据目前存在的问题,我们也在检测结果最后看到数据的总体的错误情况的汇总。
2、如果数据库的整体结果没有问题,只是部分表的数据结构、索引、存储出现异常,可以通过DBCC CheckTable('DBName.dbo.tablename')来进行检测。
3、通过sql命令或者 *** 作,将数据库设置为“单用户”模式,然后打开查询分析器,准备进行修改。
4、打开查询分析器器,选择Master数据库,通过DBCC CheckDB('DBName',REPAIR_ALLOW_DATA_LOSS)命令,进行数据库的全面修复,该命令可能会导致数据库中的数据丢失,请注意。
5、处理之后,我们还需要将用户模式恢复为多用户模式,可以选择命令,可以是所使用使用数据库管理工具,进行多用户回复:命令: ALTER DATABASE DBName SET MULTI_USER。
6、重启数据库服务,查看数据库异常是否修复,在控制面板找到sql服务进行重启,如果为sql2000,点击屏幕有下家的数据库服务器工具,进行重新启动。
在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态"置疑",原因约有以下几条:1.错误的删除日志
2.硬件(HD)损坏,造成日志和数据文件写错误
3.硬盘的空间不够,比如日志文件过大
解决办法:
最简单的办法是有数据库的全备份,然后恢复即可.
步骤:
1. 删除原始的数据库:
USE MASTER
GO
DROP DATABASE DB_SUEPECT
2.建立同名的数据库:
USE master
GO
CREATE DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO
3.恢复数据库:
RESTORE DATABASE DB_SUSPECT
FROM DBNAME_BACKUP.DAT
4.数据库完整性检测:
DBCC CHECKDB('DB_SUSPECT')
5.重新启动MSSQLSERVER服务.
如果没有全备份,那就要用一些特殊的方法:
1.设置数据库为紧急模式
Use Master
GO
sp_configure 'allow updates', 1
reconfigure with override
GO
UPDATE sysdatabases SET status = 32768 where name = 'DB_SUSPECT'
GO
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 DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO
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 'allow updates', 0
reconfigure with override
GO
15.重新启动MSSQLSERVER服务:
最好重新启动 *** 作系统
16.备份数据库:
可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT
补充一点,如果用DOMAIN\USER时,要注意对.MDF.LDF的所在目录的权限.
灵验脚本
遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:
======================================================
--before running any script, run the following to set the
master database to allow updates
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--Run the following script
UPDATE master..sysdatabases SET status = status ^ 256
WHERE name = 'Database_Name'
--Run the following script
exec SP_resetstatus Database_Name
--stop and start the MSDTC at this stage
--After the procedure is created, immediately disable
updates to the system tables:
exec sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
原因:非正常程序中断或错误结束SQL服务,都会导致MSDB数据库被“置疑”。
Msdb 数据库供SQLServer 代理程序调度警报和作业以及记录 *** 作员时使用。比如,我们备份了一个数据库,会在表backupfile中插入一条记录,以记录相关的备份信息。
但因为Msdb数据库并未存储特别重要的信息,因此可以从别的机器拷贝一份相同的msdbdata.mdf和msdblog.ldf覆盖掉即可。
解决步骤
A服务器为被“置疑”的服务器;B服务器上装有和A服务器相同版本的数据库软件。版本是SQL SERVER 2000。
步骤1、停止B服务器上的SQL SERVER 服务,拷贝“msdbdata.mdf”和“msdblog.ldf”文件。
步骤2、停止A服务器上的SQL SERVER 服务,将从B服务器上拷贝“msdbdata.mdf”和“msdblog.ldf”文件覆盖掉A服务器上的这两个文件。
步骤3、重新启动A服务器上的SQL SERVER服务。
步骤4、如果MSDB数据库仍然是置疑状态,可以执行下面的SQL。
USE MASTERGO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='msdb'
Go
sp_dboption 'msdb', 'single user', 'true'
Go
DBCC CHECKDB('msdb')
Go
update sysdatabases set status =28 where name='msdb'
Go
sp_configure 'allow updates', 0 reconfigure with override
Go
sp_dboption 'msdb', 'single user', 'false'
Go
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)