sql数据库质疑的原因及解决办法

sql数据库质疑的原因及解决办法,第1张

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 MASTER 

GO 

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


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存