Paulo Phagula
Musings and Scribbles on Software Development
Musings and Scribbles on Software Development
Então, hoje, depois de conseguir corromper uma base de dados tive de usar um bando de truques para conseguir restaurar a base de dados. Um dos passos envolve usar o comando DBCC CHECK
que leva muito tempo. Após uns 30 minutos estava em pânico e impaciente porque o processo demorava e não tinha ideia de quanto o processo já havia corrido. Como todo bom Googler fui googlar, e eis que achei a solução: Dynamic Management Views (DMVs).
Então, hoje, depois de conseguir corromper uma base de dados tive de usar um bando de truques para conseguir restaurar a base de dados. Um dos passos envolve usar o comando DBCC CHECK
que leva muito tempo. Após uns 30 minutos estava em pânico e impaciente porque o processo demorava e não tinha ideia de quanto o processo já havia corrido. Como todo bom Googler fui googlar, e eis que achei a solução: Dynamic Management Views (DMVs).
As DMVs (e algumas funções) retornam dados sobre o estado do server, que podemos usar para monitorar a ‘saúde’ de um server. A DMV em destaque é sys.dm_exec_requests
, que permite ver quais os processos ou pedidos em execução. A DMV retorna os dados para várias base de dados, mas podemos sempre filtrar usando a clausula WHERE
como abaixo:
SELECT session_id ,
request_id ,
percent_complete ,
estimated_completion_time ,
DATEADD(ms, estimated_completion_time, GETDATE()) AS TempoEstimado,
start_time,
status,
command,
*
FROM sys.dm_exec_requests
WHERE database_id = 23
No caso do DBCC CHECK
ele internamente subdivide-se em 3 outros processos, cada um com seu progresso respectivamente:
DBCC CHECKALLOC
DBCC CHECKTABLE
DBCC CHECKATALOG
Para ver o progresso destes processos também, podemos fazer o JOIN
com a DMV sys.dm_os_tasks
que lista todas as tarefas do OS com base no ID da sessão.
SELECT *
FROM sys.dm_exec_requests r
JOIN sys.dm_os_tasks t on r.session_id = t.session_id
WHERE r.session_id = 69
Please, use syntax highlighting in your comments, to make them more readable.