数据库质疑及修复



数据库质疑一般原因:

1.错误的删除日志;
2.硬件(HD)损坏,造成日志和数据文件写错误;
3.硬盘的空间不够,比如日志文件过大;



解决办法一:

1. 删除原始的数据库:
USE MASTER
GO 
DROP DATABASE MyDB


2.建立同名的数据库:
USE master
GO
CREATE DATABASE MyDB
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 MyDB
FROM DBNAME_BACKUP.DAT


4.数据库完整性检测:
DBCC CHECKDB('MyDB')

5.重新启动MSSQLSERVER服务.

如果没有全备份,那就要用一些特殊的方法:

		1.设置数据库为紧急模式
		Use Master
		GO
		sp_configure 'allow updates', 1
		reconfigure with override
		GO
		UPDATE sysdatabases SET status = 32768 where name = 'MyDB'
		GO

		2.停掉SQL Server服务:.Net STOP MSSQLSERVER

		3.把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走:

		4.启动SQL Server服务:.Net START MSSQLSERVER

		5.重新建立一个同名的数据库MyDB;

		USE master
		GO
		CREATE DATABASE MyDB
		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 MyDB SET SINGLE_USER
GO

7.停掉SQL服务:.Net STOP MSSQLSERVER

8.把原来的数据文件再覆盖回来:


9.启动SQL Server服务:.Net START MSSQLSERVER

10.重新设置SQLSERVER的状态:
USE MASTER
GO
EXEC sp_resetstatus "MyDB"

11.数据库完整性检测:
DBCC CHECKDB('MyDB')

12.恢复数据库为多用户模式:
USE MASTER
GO
ALTER DATABASE MyDB SET MULTI_USER
GO

13.恢复SQLSERVER原始的配置:
USE MATER
GO
UPDATE sysdatabases SET status = 4194320 where name = 'MyDB'
GO

14.配置SQLSERVER不允许更新系统表:
USE MASTER
GO
sp_configure 'allow updates', 0
reconfigure with override
GO

15.重新启动MSSQLSERVER服务:
最好重新启动操作系统


16.备份数据库:

可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和MyDB
补充一点,如果用DOMAIN\USER时,要注意对.MDF.LDF的所在目录的权限.

数据库质疑删不掉也分离不了的解决办法:

--数据库质疑删不掉也分离不了的解决办法:
USE   MASTER 
GO 

SP_CONFIGURE   'ALLOW   UPDATES ',1   RECONFIGURE   WITH   OVERRIDE 
GO 

UPDATE   SYSDATABASES   SET   STATUS   =32768   WHERE   NAME= '置疑的数据库名 ' 
Go 

sp_dboption   '置疑的数据库名 ',   'single   user ',   'true ' 
Go 

DBCC   CHECKDB( '置疑的数据库名 ')   
Go 

update   sysdatabases   set   status   =28   where   name= '置疑的数据库名 ' 
Go 

sp_configure   'allow   updates ',   0   reconfigure   with   override 
Go   

sp_dboption   '置疑的数据库名 ',   'single   user ',   'false ' 
Go 


常用解决办法:

 USE [master]
    GO
    ALTER DATABASE DataBaseName SET EMERGENCY;
    GO
    ALTER DATABASE DataBaseName SET SINGLE_USER;
    GO
    DBCC CHECKDB (DataBaseName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
    GO
    ALTER DATABASE DataBaseName SET MULTI_USER;
    GO
    ALTER DATABASE DataBaseName SET ONLINE;
    GO





实例参考:http://www.cnblogs.com/lyhabc/archive/2013/09/12/3316655.html (断电引起的质疑)

实例参考:http://www.itpub.net/forum.php?mod=viewthread&tid=32011 (误删事物日志

实例参考:http://www.cnblogs.com/darkprince/archive/2011/05/12/2044282.html (数据导入时关机)

实例参考:http://bbs.51cto.com/thread-404086-1.html (备份时断电:未解决)



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值