2009-09-10 64 views
1

我目前正在尝试在SQL Server 2005上编写脚本来自动执行DBCC CHECKDB过程。基本上,我使用游标运行并在实例上的每个数据库上运行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

一个sufficiently high (20+) severity的错误 - 在我的经验,这些是最常见的损坏,如无效文本指针 - 将停止任何SQL工作目前正与极端偏见运行,忽略try/catch语句结构和杀死连接。我建议将此任务移出到外部进程,并为每个DBCC CHECKDB命令建立一个新连接,以便在出现严重错误时继续执行。

+0

+1这是最有可能的问题。严重的错误也会发送到错误日志和系统事件日志,因此很容易在那里检查它们。 – 2009-09-10 21:21:10

0

使用无证sp_MSforeachdb存储过程

exec sp_msforeachdb 'use ?; dbcc checkdb' 
+0

这就是我在开始时使用的。它有同样的问题 – 2009-09-10 21:28:47

+0

好吧,不知道这是否会像光标一样弹出来(即使在可能的情况下,它的封面!) – 2009-09-10 21:56:44

+0

是的,那正是我真正想到的! – 2009-09-11 15:16:46