我目前正在尝试在SQL Server2005上编写一个作业脚本,该作业将自动执行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发布于 2009-09-10 21:17:20
sufficiently high (20+) severity的错误--根据我的经验,这些通常是诸如无效文本指针之类的损坏--将以极端偏见停止当前正在运行的任何SQL作业,忽略try/catch构造并终止连接。我建议将此任务移到外部进程,并为每个DBCC CHECKDB命令建立新连接,以便它可以在遇到严重错误时继续执行。
发布于 2009-09-10 21:24:23
使用未记录的sp_MSforeachdb存储过程
exec sp_msforeachdb 'use ?; dbcc checkdb'https://stackoverflow.com/questions/1407758
复制相似问题