-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLast Good CHECKDB.sql
More file actions
71 lines (58 loc) · 2.04 KB
/
Last Good CHECKDB.sql
File metadata and controls
71 lines (58 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
-- Create a temp table to hold results
IF OBJECT_ID('tempdb..#CheckDBResults') IS NOT NULL
DROP TABLE #CheckDBResults;
CREATE TABLE #CheckDBResults (
DatabaseName NVARCHAR(128),
LastGoodCheckDB DATETIME,
DaysSinceCheck INT,
Status NVARCHAR(50)
);
-- Cursor to loop through all online databases
DECLARE @dbname NVARCHAR(128);
DECLARE @sql NVARCHAR(500);
DECLARE db_cursor CURSOR FAST_FORWARD FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'
ORDER BY name;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @dbname;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Temp table for DBCC DBINFO output
IF OBJECT_ID('tempdb..#DBInfo') IS NOT NULL
DROP TABLE #DBInfo;
CREATE TABLE #DBInfo (
ParentObject VARCHAR(255),
Object VARCHAR(255),
Field VARCHAR(255),
Value VARCHAR(255)
);
SET @sql = 'DBCC DBINFO(' + QUOTENAME(@dbname) + ') WITH TABLERESULTS, NO_INFOMSGS;';
INSERT INTO #DBInfo (ParentObject, Object, Field, Value)
EXEC (@sql);
INSERT INTO #CheckDBResults (DatabaseName, LastGoodCheckDB, DaysSinceCheck, Status)
SELECT
@dbname,
CASE WHEN Value = '1900-01-01 00:00:00.000' THEN NULL ELSE CAST(Value AS DATETIME) END,
CASE WHEN Value = '1900-01-01 00:00:00.000' THEN NULL
ELSE DATEDIFF(DAY, CAST(Value AS DATETIME), GETDATE()) END,
CASE WHEN Value = '1900-01-01 00:00:00.000' THEN 'NEVER RUN'
WHEN DATEDIFF(DAY, CAST(Value AS DATETIME), GETDATE()) > 7 THEN 'WARNING: Overdue'
ELSE 'OK'
END
FROM #DBInfo
WHERE Field = 'dbi_dbccLastKnownGood';
FETCH NEXT FROM db_cursor INTO @dbname;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
-- Final output
SELECT
DatabaseName,
ISNULL(CONVERT(VARCHAR(20), LastGoodCheckDB, 120), 'NEVER') AS LastGoodCheckDB,
ISNULL(CAST(DaysSinceCheck AS VARCHAR(10)), 'N/A') AS DaysSinceCheckDB,
Status
FROM #CheckDBResults
ORDER BY DaysSinceCheck DESC, DatabaseName;
DROP TABLE #CheckDBResults;