获取SQL Server还原作业的进度状态时出现问题

Elm*_*mex 6 t-sql database sql-server sql-server-2008

我想用从脚本http://www.wisesoft.co.uk/articles/tsql_backup_restore_progress.aspx获取进度信息一的具体运行SQL-Server还原工作.要实现这一点,我已经改变了一点:

SELECT command,
            s.text,
            start_time,
            percent_complete, 
            CAST(((DATEDIFF(s,start_time,GetDate()))/3600) as varchar) + ' hour(s), '
                  + CAST((DATEDIFF(s,start_time,GetDate())%3600)/60 as varchar) + 'min, '
                  + CAST((DATEDIFF(s,start_time,GetDate())%60) as varchar) + ' sec' as running_time,
            CAST((estimated_completion_time/3600000) as varchar) + ' hour(s), '
                  + CAST((estimated_completion_time %3600000)/60000 as varchar) + 'min, '
                  + CAST((estimated_completion_time %60000)/1000 as varchar) + ' sec' as est_time_to_go,
            dateadd(second,estimated_completion_time/1000, getdate()) as est_completion_time 
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s
WHERE r.command = 'RESTORE DATABASE'  and r.database_id = db_id('database_name')
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,因为r.database_id永远不会等于db_id('database_name').这是什么原因?这个SQL语句有什么问题?此脚本适用于'r.command = BACKUP DATABASE'.

是否有其他基于T-SQL的可能性来获取特定SQL-Server作业的进度状态?

Rem*_*anu 2

当您运行 BACKUP 时,数据库处于联机状态并且命令在数据库内运行。但是,当您运行 RESTORE 时,数据库无法联机(您正在主动恢复它,因此它无法联机),因此该命令无法在所述数据库的上下文中执行。

因此,不要通过查看 DB_ID 来猜测哪个请求是您的,只需@@SPID在 SqlConnection 上执行 RESTORE 命令之前偷偷查看该请求session_id:这将是您的 RESTORE 请求。