DBCC CHECKDB stored procedure - new version
I've updated my isp_DBCC_CHECKDB stored procedure as I was getting errors on a SQL Server 2005 server when one of the databases was the mirror in a database mirroring scenario or when one of the databases was in a loading state (NORECOVERY option of RESTORE command). This issue will actually appear on SQL Server 2000 as well; I just hadn't noticed it on 2000 yet.
----------------------------------------------------------------------------------------------------
-- OBJECT NAME : isp_DBCC_CHECKDB
--
-- AUTHOR : Tara Duggan
-- DATE : May 3, 2004
--
-- INPUTS : None
-- OUTPUTS : None
-- DEPENDENCIES : None
--
-- DESCRIPTION : This stored procedure runs DBCC CHECKDB for each of the databases.
--
-- EXAMPLES (optional) : EXEC isp_DBCC_CHECKDB
--
-- MODIFICATION HISTORY :
----------------------------------------------------------------------------------------------------
-- 02/07/2007 Tara Kizer
-- Added support for SQL Server 2005 (didn't want to use sysdatabases since it's only there for
-- backward compatibility.
--
-- Added the option to skip databases that are in a loading state, such as those with the NORECOVERY
-- option set or those that are the mirror in database mirroring.
----------------------------------------------------------------------------------------------------
ALTER PROC [dbo].[isp_DBCC_CHECKDB]
AS
SET NOCOUNT ON
DECLARE @dbid int, @DBName sysname, @SQL nvarchar(4000), @version char(1)
SELECT @dbid = 0, @version = CONVERT(char(1), SERVERPROPERTY('ProductVersion'))
IF @version = '8'
BEGIN
WHILE @dbid < (SELECT MAX(dbid) FROM master.dbo.sysdatabases WHERE dbid > @dbid AND status & 32 = 0)
BEGIN
SELECT TOP 1 @dbid = dbid, @DBName = name
FROM master.dbo.sysdatabases
WHERE dbid > @dbid AND status & 32 = 0
ORDER BY dbid
SET @SQL = 'DBCC CHECKDB([' + @DBName + '])'
EXEC sp_executesql @statement = @SQL
END
END
ELSE IF @version = '9'
BEGIN
WHILE @dbid < (SELECT MAX(database_id) FROM master.sys.databases WHERE database_id > @dbid AND state IN (0, 4))
BEGIN
SELECT TOP 1 @dbid = database_id, @DBName = name
FROM master.sys.databases
WHERE database_id > @dbid AND state IN (0, 4)
ORDER BY database_id
SET @SQL = 'DBCC CHECKDB([' + @DBName + '])'
EXEC sp_executesql @statement = @SQL
END
END