MS SQL巡检系列——检查数据库上一次DBCC CHECKDB的时间

简介: 原文:MS SQL巡检系列——检查数据库上一次DBCC CHECKDB的时间DBCC CHECKDB检查指定数据库中的所有对象的逻辑和物理完整性,具体请参考MSDN文档。我们必须定期对数据库做完整性检查(DBCC CHECKDB),以便能及时发现一些数据库损坏(Corruption)的情况。
原文: MS SQL巡检系列——检查数据库上一次DBCC CHECKDB的时间

DBCC CHECKDB检查指定数据库中的所有对象的逻辑和物理完整性,具体请参考MSDN文档。我们必须定期对数据库做完整性检查(DBCC CHECKDB),以便能及时发现一些数据库损坏(Corruption)的情况。如果你的数据库长时间没有做DBCC CHECKDB,这样是做是不合理,并且很危险的。那么我们怎么检查数据库上一次做DBCC CHECKDB的时间呢? 可以通过DBCC DBINFO来获取上一次做DBCC CHECKDB时间,DBCC DBINFO (db_name) 显示数据库的结构信息 ,它是一个未公开的命令,官方没有相关文档。适用于SQL SERVER 2005以及以上版本。

DBCC DBINFO ('YourSQLDba') WITH TABLERESULTS ;

DBCC DBINFO () WITH TABLERESULTS ;

 

如下所示,你找到Field值为dbi_dbccLastKnownGood的记录,表示这个数据库在2016-05-13 01:30:11.560做了DBCC CHECKDB,如果没有做过DBCC CHECKDB命令,VALUE值为1900-01-01 00:00:00.000

下面是巡检检查DBCC CHECKDB情况的脚本(只是巡检脚本的一部分)。此处定义的是至少一周必须做一次DBCC CHECKDB,否则提示那些数据库必须做完整性检查(DBCC CHECKDB)。具体情况,可以根据自身实际情况酌情处理。

CREATE TABLE #Db
  (
    DbName sysname
  )
  CREATE TABLE #Database
  (
    DbName sysname
  );
 
  INSERT INTO #Db
  SELECT name FROM sys.databases WHERE state_desc='ONLINE' AND database_id !=2;
 
  INSERT INTO #Database
  SELECT name FROM sys.databases WHERE state_desc='ONLINE' AND database_id !=2;
 
CREATE TABLE #DBCC_CHECKDB
(
    [DbName]        sysname  NULL   ,
    [ParentObject]  VARCHAR(120),
    [Object]        VARCHAR(120),
    [Field]         VARCHAR(60) ,
    [Value]         VARCHAR(120)
)
 
DECLARE @DbName   NVARCHAR(512);
DECLARE @SqlText  NVARCHAR(1024);
 
SET @DbName ='';
WHILE(1=1)
 
BEGIN
 SELECT TOP 1 
      @DbName = DbName
    FROM #Db
    WHERE DbName > @DbName -- next Dbname greater than @dbname
    ORDER BY DbName -- dbName order 
 
  -- exit loop if no more name greater than the last one used
    If @@rowcount = 0 Break 
 
    PRINT @DbName;
SET @SqlText='DBCC DBINFO (''' + LTRIM(RTRIM(@DbName)) + ''') WITH TABLERESULTS ' 
INSERT INTO #DBCC_CHECKDB([ParentObject],[Object],[Field], [Value])
EXEC(@SqlText);
 
UPDATE #DBCC_CHECKDB SET DbName = @DbName WHERE DbName IS NULL;
 
 Delete Db
  From #Db Db WHERE DbName=@DbName;
 
END
 
--SELECT * FROM #DBCC_CHECKDB WHERE Field='dbi_dbccLastKnownGood';
 
 
SELECT  db.DbName ,
        dc.ParentObject ,
        dc.Object,
        dc.Field ,
        dc.Value ,
        CASE WHEN DATEDIFF(DAY, CAST(dc.Value AS DATE), GETDATE()) > 7
             THEN 'You need do a dbcc checkdb now'
             ELSE 'dbcc checkdb is done during the past seven day'
        END AS CheckStatus
FROM    #Database db
        INNER JOIN #DBCC_CHECKDB dc ON db.DbName = dc.DbName
WHERE   Field = 'dbi_dbccLastKnownGood';
 
DROP TABLE #Db;
DROP TABLE #Database;
DROP TABLE #DBCC_CHECKDB;

测试效果如下截图所示,定期对服务器做巡检,就能对所有服务器的情况有所了解,当然如果服务器很多的情况下,一台一台去检查也非常麻烦,我们通过MyDBA系统将数据从其它服务器采集过来,然后在报表里面展示,非常的节省时间。

image

目录
相关文章
|
7天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
48 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
16天前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
32 11
|
11天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
26 2
|
23天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
47 0
|
26天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
50 0
|
26天前
|
SQL 数据处理 数据库
|
26天前
|
SQL 存储 调度
|
26天前
|
SQL 安全 数据库
|
26天前
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
55 0
|
26天前
|
SQL 存储 监控