日期:2014-05-17  浏览次数:20452 次

怎么自动判数据库损坏【质疑,不能使用等】,并且把损坏的数据库备份,在通过以前备份的数据在还原
各位:
   我现在的问题是,怎么自动判断数据库损坏,最有效的方法,DBCC CheckDB花费的时间较长,有没有好的方法来判断数据库不能使用,质疑,等不能写数据的情况。
损坏,质疑

------解决方案--------------------
同问,我们现在都是被动的通过判断软件是否正常访问实现的,如果不能访问就做报警
------解决方案--------------------
一般情况下是用DBCC CHECKDB去看看有没有损坏的,不过时间相对较长,关注,有没有效率更高的办法
------解决方案--------------------
DBCC CheckDB是我目前见到的最合理,最准确的办法。
------解决方案--------------------
就算是第三方工具,估计也是调用这些,DBCC CHECKDB 有with physical_only选项,可以用,但是即使是徐海蔚的书,也没有其他方案
------解决方案--------------------
这个dbcc checkdb是好办法。

我觉得从方法来看,也就是dbcc checkdb,关键的问题是提高dbcc checkdb的速度,

你可以用下面的命令,来加快速度,不过副作用是会加表锁:

DBCC CHECKDB(你的数据库) with TABLOCK


------解决方案--------------------
引用:
我们用dbcc CHECKDB这个是被动的模式,有没有只要数据库一损坏,我们就能捕获到,在还原数据?什么方法来解决?

1)一般情况即使类似页面的损坏 你没有访问到这个页面也不会报错
2)可以将一些严重的错误 做成警报 发送邮件等通知作业员
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

还有没有其他的解决方案呢?在研究。


你写个定时任务呗,运行下面的代码,返回数据库的状态:


select name,
       state_desc   --状态,可能是online,offline,suspect等
from sys.databases



上面返回的 state_desc   --状态,可能是online,offline,suspect等
不是很懂,我也查看了MSDN,关于他的解释,但是我对一个数据库用DBCC CHECKDB 是错误,但是,这个数据库的 state_desc   --状态  一直都是online,为什么不是suspect?一直都搞不懂?麻烦可以说说DBCC CHECKDB 报错的数据库,他的状态怎么还是online?


你说的对,这个还真不确定。

比如有个,或者有一些数据页,也就是page损坏了,那么整个数据库还是online。
这个可以在如下的语句中查询到,里面是有问题的数据页:

select *
from msdb.dbo.suspect_pages


如果是数据库有重大的损坏,那么就会处于suspect状态,或者是其他的比如restoring状态,那么这个应该能查询到:

select name,
       state_desc   --状态,可能是online,offline,suspect等
from sys.databases


而如果某个文件有问题,你可以查询这个视图看看:

select DB_NAME(database_id) as database_name,
       name as file_logical_name,
       physical_name,
       state_desc
from sys.master_files

楼上说的很完整了,查数据库的状态,MSDB的suspect_pages,还有一个就是查询SQL Server Error Log 比如823,824类似的错误。
------解决方案--------------------
查看数据库状态.

 select databasepropertyex('[数据库名]','Status')