For nogle uger siden blev jeg kaldt ud til en kunde som havde mistankte om at der var korruption i deres database, databasestørrelsen var på den fornuftige side af de 2 TB. De havde for nogle dage siden kørt DBCC CHECKDB på den pågældende database fra en applikation der havde indbygget check af databasen. Men som den database nørd jeg nu engang er ville jeg gerne køre den direkte udenom deres applikation og fik derfor kunden med på at sætte den igang.
Jeg fik kommandoen startet, det er der ikke de store ben i, men så kom det ganske fornuftige spørgsmål: hvornår er den færdig?
Der er jo ikke nogen progressoutput eller lignende bygget ind i CHECKDB kommandoen, så det var lidt svært at svare på – eller var det? Jeg skrev for nogen tid siden om at man kan se hvor langt ens backup/restore er kommet vha sys.dm_exec_requests, og vupti, minsandten om ikke det også kunne lade sig føre med CHECKDB. Scriptet er det næsten det samme som i min tidligere post, men her er det i den tilrettede version:
SELECT
COMMAND,
S.TEXT,
START_TIME,
PERCENT_COMPLETE,
CAST(((DATEDIFF(S,START_TIME,GETDATE()))/3600) AS VARCHAR) + ' HOUR(S), ' + CAST((DATEDIFF(S,START_TIME,GETDATE())%3600)/60 AS VARCHAR) + 'MIN, ' + CAST((DATEDIFF(S,START_TIME,GETDATE())%60) AS VARCHAR) + ' SEC' AS RUNNING_TIME,
CAST((ESTIMATED_COMPLETION_TIME/3600000) AS VARCHAR) + ' HOUR(S), ' + CAST((ESTIMATED_COMPLETION_TIME %3600000)/60000 AS VARCHAR) + 'MIN, ' + CAST((ESTIMATED_COMPLETION_TIME %60000)/1000 AS VARCHAR) + ' SEC' AS EST_TIME_TO_GO,
DATEADD(SECOND,ESTIMATED_COMPLETION_TIME/1000, GETDATE()) AS EST_COMPLETION_TIME
FROM SYS.DM_EXEC_REQUESTS R
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(R.SQL_HANDLE) S
WHERE R.COMMAND LIKE ('DBCC%')

Heldigvis var der ikke corruption i den database som jeg kørte dette på, men jeg kunne fortælle kunden hvornår jeg kom på besøg igen og checkede resultatet af kørslen.