web-dev-qa-db-ja.com

最後のDBCC checkdbが完了するまでにかかった時間を知る方法

ほとんどのサーバーでは、 dbcc checkdb を実行する予定です。

DBCC DBINFO() を使用して、最後の既知の適切なDBCC Checkdbを取得できます。

SQLサーバーログに残っているトラックを 読み取ることができます と、次のような画像が表示されます。

enter image description here

または、次のスクリプトを実行できます。

IF OBJECT_ID('TEMPDB..#MAINT') IS NOT NULL
   DROP TABLE #maint

CREATE TABLE #maint (Results varchar(255) NULL)
INSERT INTO #maint(Results) EXEC('master..xp_cmdshell ''sqlcmd -E -Q"dbcc checkdb([my_database])"''')

select * from #maint 

次のようなものを取得します: enter image description here

デフォルトのトレース も確認できます。

私は何をしたいですか?

前回dbcc checkdbを実行するのにかかった時間(== --- ==)を調べる方法

1

スケジュールされている場合は、SQLエージェントジョブの runtime duration から取得することがオプションです。

そして、あなたが Olaのソリューション (私がお勧めする)を使用している場合、彼のdbo.CommandLogテーブルには、DBCC作業を含む、それが実行するすべてのアクションのためのStartTimeおよびEndTime列があります。

4
LowlyDBA

正しく理解できれば

EXEC sp_readerrorlog 0, 1, 'dbcc'は、必要な生データを提供します。

それを和らげるためにあなたは次のようなものを使うことができます

DECLARE @tempLog as Table (logdate datetime, theSpid varchar(10), theText varchar(max))
INSERT INTO @tempLog  EXEC sp_readerrorlog 0, 1, 'dbcc'
SELECT 
SUBSTRING(thetext,CHARINDEX('(',theText) + 1,(CHARINDEX(')',theText)+LEN(')'))-CHARINDEX('(', theText) - 2) as theDatabase,
SUBSTRING(thetext,CHARINDEX('Elapsed Time:',theText),(CHARINDEX('seconds',theText)+LEN('seconds'))-CHARINDEX('Elapsed time: ', theText)) as DBBC_CheckDB_Time
FROM @tempLog 

それが役に立てば幸い

2
AdamRidgway