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

目录
相关文章
|
17天前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
8天前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
10 3
|
7天前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
34 1
|
9天前
|
SQL 存储 监控
ADBPG&Greenplum成本优化问题之通过SQL查询找到数据库中所有的复制表如何解决
ADBPG&Greenplum成本优化问题之通过SQL查询找到数据库中所有的复制表如何解决
25 1
|
11天前
|
Linux 数据库 数据安全/隐私保护
|
13天前
|
SQL 关系型数据库 MySQL
SQL数据库和 SQLserver数据库
【8月更文挑战第19天】SQL数据库和 SQLserver数据库
26 2
|
13天前
|
SQL 存储 安全
SQL Server数据库创建
【8月更文挑战第19天】SQL Server数据库创建
23 1
|
9天前
|
SQL 数据库 Windows
【应用服务 App Service】当使用EntityFrameWorkCore访问Sql Server数据库时,在Azure App Service会出现Cannot create a DbSet for ** because this type is not included in the model for the context的错误
【应用服务 App Service】当使用EntityFrameWorkCore访问Sql Server数据库时,在Azure App Service会出现Cannot create a DbSet for ** because this type is not included in the model for the context的错误
|
10天前
|
SQL 安全 数据库
"数据库守卫战:揭秘SQL Server中角色与权限的神秘面纱,一键打造坚不可摧的安全堡垒!"
【8月更文挑战第21天】数据库安全性对企业至关重要。SQL Server提供强大机制保障数据安全,包括用户角色管理和权限授权。本文以杂文形式介绍如何创建服务器角色和数据库角色,并通过SQL语句进行权限分配。从创建角色到添加用户、授权和撤销权限,再到最佳实践,帮助读者掌握SQL Server中的角色和权限管理,确保数据安全与完整性。
21 0
|
10天前
|
SQL JSON 关系型数据库
"SQL老司机大揭秘:如何在数据库中玩转数组、映射与JSON,解锁数据处理的无限可能,一场数据与技术的激情碰撞!"
【8月更文挑战第21天】SQL作为数据库语言,其能力不断进化,尤其是在处理复杂数据类型如数组、映射及JSON方面。例如,PostgreSQL自8.2版起支持数组类型,并提供`unnest()`和`array_agg()`等函数用于数组的操作。对于映射类型,虽然SQL标准未直接支持,但通过JSON数据类型间接实现了键值对的存储与查询。如在PostgreSQL中创建含JSONB类型的表,并使用`->>`提取特定字段或`@>`进行复杂条件筛选。掌握这些技巧对于高效管理现代数据至关重要,并预示着SQL在未来数据处理领域将持续扮演核心角色。
21 0

热门文章

最新文章

下一篇
云函数