27 de mai. de 2014

[SQL Server] - Determinando o tempo de recuperação (IN RECOVERY) de um database SQL Server

Ontem próximo do horário do almoço foi necessário reiniciar o servidor e por sorte uma transação bem custosa estava rodando e BANG! CRASH no database.

Bom, junto com isso, minha operação parou e todo mundo ficou doido e querendo uma previsão para solução do problema.

Eu não fazia idéia de como resolver, dei uma breve pesquisada e encontrei um script Transact-SQL que traz uma estimativa.




DECLARE @DBName VARCHAR(64) = 'databasename'

DECLARE @ErrorLog AS TABLE([LogDate] CHAR(24), [ProcessInfo] VARCHAR(64), [TEXT] VARCHAR(MAX))

INSERT INTO @ErrorLog
EXEC sys.xp_readerrorlog 0, 1, 'Recovery of database', @DBName

SELECT TOP 5
[LogDate]
,SUBSTRING([TEXT], CHARINDEX(') is ', [TEXT]) + 4,CHARINDEX(' complete (', [TEXT]) - CHARINDEX(') is ', [TEXT]) - 4) AS PercentComplete
,CAST(SUBSTRING([TEXT], CHARINDEX('approximately', [TEXT]) + 13,CHARINDEX(' seconds remain', [TEXT]) - CHARINDEX('approximately', [TEXT]) - 13) AS FLOAT)/60.0 AS MinutesRemaining
,CAST(SUBSTRING([TEXT], CHARINDEX('approximately', [TEXT]) + 13,CHARINDEX(' seconds remain', [TEXT]) - CHARINDEX('approximately', [TEXT]) - 13) AS FLOAT)/60.0/60.0 AS HoursRemaining
,[TEXT]

FROM @ErrorLog ORDER BY [LogDate] DESC
Fonte Timlaqua.com

0 comentários: