我目前正在尝试在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
答案 0 :(得分:2)
sufficiently high (20+) severity的错误 - 根据我的经验,这些通常是诸如无效文本指针之类的损坏 - 将停止当前以极端偏见运行的SQL作业,忽略try / catch构造并终止连接。我建议将此任务移至外部进程,为每个DBCC CHECKDB
命令添加新连接,以便它可以在高严重性错误面前继续。
答案 1 :(得分:0)
使用未记录的sp_MSforeachdb存储过程
exec sp_msforeachdb 'use ?; dbcc checkdb'