tsql, чтобы знать, когда dbcc checkdb был запущен в базе данных в последний раз - PullRequest
4 голосов
/ 14 мая 2010

Используя Tsql, как я могу узнать, когда DBCC checkdb последний раз запускался на SQL-сервере (2000, 2005 или 2008)?

Привет

Ответы [ 7 ]

7 голосов
/ 14 мая 2010

на 2005 и выше вы можете запустить

DBCC DBINFO ('YourDatabaseName') WITH TABLERESULTS

ищите dbi_dbccLastKnownGood

3 голосов
/ 22 апреля 2015

Попробуйте проверить все базы данных на SQL 2005 и далее

SET NOCOUNT ON;
DBCC TRACEON (3604);

CREATE TABLE #temp (
        Id INT IDENTITY(1,1), 
        ParentObject VARCHAR(255),
        [Object] VARCHAR(255),
        Field VARCHAR(255),
        [Value] VARCHAR(255)
)

CREATE TABLE #Results (
        DBName VARCHAR(255),
        LastGoodDBCC VARCHAR(255)
)

DECLARE @Name VARCHAR(255);

DECLARE looping_cursor CURSOR
FOR

SELECT name
FROM master.dbo.sysdatabases
WHERE CONVERT(varchar(500),databasepropertyex(name, 'Status'),0) = 'ONLINE'

OPEN looping_cursor
FETCH NEXT FROM looping_cursor INTO @Name
WHILE @@FETCH_STATUS = 0
    BEGIN

        INSERT INTO #temp
        EXECUTE('DBCC PAGE (['+@Name+'], 1, 9, 3)WITH TABLERESULTS');

        INSERT INTO #Results
        SELECT @Name,MAX(VALUE) FROM #temp
        WHERE Field = 'dbi_dbccLastKnownGood';

    FETCH NEXT FROM looping_cursor INTO @Name
    END
CLOSE looping_cursor;
DEALLOCATE looping_cursor;

SELECT DBName
    ,ISNULL(LastGoodDBCC,'1900-01-01 00:00:00.000') AS 'LastGoodDBCC'
FROM #Results

DROP TABLE #temp
DROP TABLE #Results
2 голосов
/ 14 мая 2010

С http://www.sqlskills.com/BLOGS/PAUL/post/CHECKDB-From-Every-Angle-When-did-DBCC-CHECKDB-last-run-successfully.aspx:

DBCC TRACEON (3604); 
GO

-- page 9 is the boot page
DBCC PAGE (dbname, 1, 9, 3);
GO

Вам нужно искать dbi_dbccLastKnownХорошее поле. Это было последний раз, когда DBCC CHECKDB работал без нахождения каких-либо повреждений.

1 голос
/ 01 мая 2018

Начиная с SQL Server 2016 SP2 вы можете использовать:

SELECT  DATABASEPROPERTYEX(DB_NAME(), 'LastGoodCheckDbTime')

DATABASEPROPERTYEX

LastGoodCheckDbTime

Дата и время последнего успешного выполнения DBCC CHECKDB для указанной базы данных.

NULL = Неверный ввод Базовый тип данных: datetime

0 голосов
/ 01 июля 2019

Если используется сценарий обслуживания Олы Хелленгрен, информация сохраняется в таблице журнала команд. Вот как это сделать, если DBCC успешно запущен на прошлой неделе

Использовать мастер Go

выберите * из CommandLog где CommandType = 'DBCC_CHECKDB' и (CONVERT (datetime, StartTime, 102)> = GETDATE () - 7) ЗАКАЗАТЬ ПО StartTime, EndTime

0 голосов
/ 17 октября 2018

На всякий случай, если кому-то понадобится запустить его на любом блоке 2005+, как для каждой БД за один раз:

IF OBJECT_ID('tempdb..#DBCC_Out', 'U') IS NOT NULL DROP TABLE #DBCC_Out;
IF OBJECT_ID('tempdb..#Out', 'U') IS NOT NULL DROP TABLE #Out;

CREATE TABLE #DBCC_Out (ParentObject varchar(255), [Object] varchar(255), [Field] varchar(255), [Value] varchar(255))
CREATE TABLE #Out ([DB_Name] varchar(255), [Last_DBCCCheckDB] datetime)

EXECUTE sp_MSforeachdb 
'
 INSERT INTO #DBCC_Out EXECUTE (''DBCC DBINFO ( ''''?'''' ) WITH TABLERESULTS'')
 INSERT INTO #Out ([DB_Name], [Last_DBCCCheckDB])
 (SELECT ''?'', [Value] FROM #DBCC_Out WHERE [Field] = ''dbi_dbccLastKnownGood'');
 TRUNCATE TABLE #DBCC_Out;
'
 DROP TABLE #DBCC_Out;
 SELECT * FROM #Out;
0 голосов
/ 12 октября 2016

Приведенный выше запрос дает неверные результаты, поскольку таблица #temp не усекается внутри курсора

SET NOCOUNT ON;
DBCC TRACEON (3604);

CREATE TABLE #temp (
        Id INT IDENTITY(1,1), 
        ParentObject VARCHAR(255),
        [Object] VARCHAR(255),
        Field VARCHAR(255),
        [Value] VARCHAR(255)
)

CREATE TABLE #Results (
        DBName VARCHAR(255),
        LastGoodDBCC VARCHAR(255)
)

DECLARE @Name VARCHAR(255);

DECLARE looping_cursor CURSOR
FOR

SELECT name
FROM master.dbo.sysdatabases
WHERE CONVERT(varchar(500),databasepropertyex(name, 'Status'),0) = 'ONLINE'

OPEN looping_cursor
FETCH NEXT FROM looping_cursor INTO @Name
WHILE @@FETCH_STATUS = 0
    BEGIN

        INSERT INTO #temp
        EXECUTE('DBCC PAGE (['+@Name+'], 1, 9, 3)WITH TABLERESULTS');

        INSERT INTO #Results
        SELECT @Name,MAX(VALUE) FROM #temp
        WHERE Field = 'dbi_dbccLastKnownGood';

        truncate table #temp

    FETCH NEXT FROM looping_cursor INTO @Name
    END
CLOSE looping_cursor;
DEALLOCATE looping_cursor;

SELECT DBName
    ,ISNULL(LastGoodDBCC,'1900-01-01 00:00:00.000') AS 'LastGoodDBCC'
FROM #Results
...