2009-09-10 65 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