Backups/restores can take a lot of time, but when it’s running, you want so see the progress.
By executing the handy T-SQL code below, you can see the progress of the backups/restores on your system.
SELECT session_id as SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
select r.session_id, r.blocking_session_id, db_name(database_id) as [DatabaseName], r.command, [SQL_QUERY_TEXT] = Substring(Query.TEXT, (r.statement_start_offset / 2) + 1, ( ( CASE r.statement_end_offset WHEN - 1 THEN Datalength(Query.TEXT) ELSE r.statement_end_offset END - r.statement_start_offset ) / 2 ) + 1), [SP_Name] =Coalesce(Quotename(Db_name(Query.dbid)) + N'.' + Quotename(Object_schema_name(Query.objectid, Query.dbid)) + N'.' + Quotename(Object_name(Query.objectid, Query.dbid)), ''), r.percent_complete, start_time, CONVERT(VARCHAR(20), DATEADD(ms, [estimated_completion_time], GETDATE()), 20) AS [ETA_COMPLETION_TIME], CONVERT(NUMERIC(6, 2), r.[total_elapsed_time] / 1000.0 / 60.0) AS [Elapsed_MIN], CONVERT(NUMERIC(6, 2), r.[estimated_completion_time] / 1000.0 / 60.0) AS [Remaning_ETA_MIN], CONVERT(NUMERIC(6, 2), r.[estimated_completion_time] / 1000.0 / 60.0/ 60.0) AS [ETA_Hours], wait_type, wait_time/1000 as Wait_Time_Sec, wait_resource from sys.dm_exec_requests r cross apply sys.fn_get_sql(r.sql_handle) as Query where r.session_id>50 and command IN ('RESTORE DATABASE','BACKUP DATABASE', 'RESTORE LOG', 'BACKUP LOG')