自动化DBCC CHECKDB

时间:2009-09-10 21:11:48

标签: sql-server database

我目前正在尝试在SQL Server 2005上编写一个自动执行DBCC CHECKDB进程的作业。基本上,我使用游标运行并在实例上的每个数据库上运行DBCC CHECKDB。有时它可以工作,遍历每个数据库并在我为此目的设计的表中记录错误,有时它只运行一些数据库并停止。有谁知道发生了什么事?我已经包含了我用于游标的代码。

DECLARE @DbName varchar(100)

DECLARE
  GetDbName CURSOR
    LOCAL
    FORWARD_ONLY
    OPTIMISTIC
      FOR
         SELECT
           name
         FROM
           sys.databases
         ORDER BY
           name 

  OPEN GetDbName
  FETCH NEXT FROM GetDbName
  INTO @DbName
    WHILE (@@fetch_status = 0)
      BEGIN

        print @DbName

        INSERT INTO
          TempLog
        EXEC('DBCC CHECKDB ('+ @DbName +') WITH NO_INFOMSGS, TABLERESULTS')

        FETCH NEXT FROM GetDbName
        INTO @DbName

      END
CLOSE GetDbName
DEALLOCATE GetDbName

2 个答案:

答案 0 :(得分:2)

sufficiently high (20+) severity的错误 - 根据我的经验,这些通常是诸如无效文本指针之类的损坏 - 将停止当前以极端偏见运行的SQL作业,忽略try / catch构造并终止连接。我建议将此任务移至外部进程,为每个DBCC CHECKDB命令添加新连接,以便它可以在高严重性错误面前继续。

答案 1 :(得分:0)

使用未记录的sp_MSforeachdb存储过程

exec sp_msforeachdb 'use ?; dbcc checkdb'