Начиная с SQL Server 2005 для команд BACKUP, RESTORE и некоторых команд DBCC (например, DBCC CHECKDB) появилась возможность узнать процент выполнения запроса в процессе выполнения команды. При запуске команд BACKUP и RESTORE можно указать параметр STATS, но этим можно пользоваться только в интерактивном режиме. А у команд DBCC аналогичного параметра вообще нет. Но очень часто бывает полезным узнать процент выполнения данных команд и приблизительное время окончания. На помощь нам приходит системное представление sys.dm_exec_requests. Для примера я запущу резервное копирование, восстановление и проверку целостности на тестовом сервере (каждую из этих команд я запускаю в отдельном окне):
DBCC CHECKDB('TEST');
BACKUP DATABASE [TEST2] TO DISK = 'C:\TEMP\TEST2.bak';
RESTORE DATABASE [TEST3] FROM DISK = 'C:\TEMP\TEST3.bak';
И давайте следующим запросом посмотрим процесс выполнения этих команд:
SELECT
[command]
,[start_time]
,[percent_complete]
,[estimated_completion_time] / 60000. AS [estimated_completion_time_min]
FROM sys.dm_exec_requests
WHERE [command] = 'BACKUP DATABASE'
OR [command] = 'RESTORE DATABASE'
OR [command] LIKE '%DBCC%'
Результаты получаются примерно такие: