有一个SQL脚本,我可以用它来确定SQL Server备份或恢复过程的进度?

当我使用MS SQL Server Management Studio备份或恢复数据库时,可以看到进程已经进行了多久,因此我需要等待多久才能完成。 如果我通过脚本启动备份或恢复,是否有办法监视进度,或者我只是坐下来等待它完成(希望没有出错?)

编辑:我的需要是特别是能够监视备份或恢复进程完全独立于启动备份或恢复的会话。

是。 如果您已将sp_who2k5安装到主数据库中,则可以简单地运行:

sp_who2k5 1,1 

结果集将包括所有活动事务。 当前运行的备份将在requestCommand字段中包含string“BACKUP”。 正确命名的percentComplete字段将为您提供备份的进度。

注意:sp_who2k5应该是每个人工具箱的一部分,它不仅仅是这个。

我在这里发现这个示例脚本,似乎工作得很好:

 SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete) AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time], CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min], CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min], CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours], CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2, CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END) FROM sys.dm_exec_sql_text(sql_handle))) AS [SQL] FROM sys.dm_exec_requests r WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE') 

如果你知道sessionID那么你可以使用下面的代码:

 SELECT * FROM sys.dm_exec_requests WHERE session_id = 62 

或者如果你想缩小它:

 SELECT command, percent_complete, start_time FROM sys.dm_exec_requests WHERE session_id = 62 

如果它只是一个脚本,请在BACKUP命令中使用STATS。

内部代码有点复杂。 在ODBC中,例如,设置SQL_ATTR_ASYNC_ENABLE,然后查找SQL_STILL_EXECUTING返回码,并重复调用SQLExecDirect,直到获得SQL_SUCCESS(或eqiv)。

 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') 

使用STATS选项: http : //msdn.microsoft.com/en-us/library/ms186865.aspx

我认为通过以下查询来了解您的还原或备份进度的最佳方法是:

 USE[master] GO 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') GO 

上面的查询,自己识别会话,每次按SSMS上的F5或执行button时执行百分比进度!

查询是由写这篇文章的人执行的

这是一个简单的脚本,通常对我来说是这样的:

 SELECT command, percent_complete,total_elapsed_time, estimated_completion_time, start_time FROM sys.dm_exec_requests WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE') 

要监视备份或还原进度,与备份或还原启动的会话完全分开。 不需要第三方工具。 在Microsoft SQL Server 2012上testing

 SELECT percent_complete, * FROM sys.dm_exec_requests WHERE command In ( 'RESTORE DATABASE', 'BACKUP DATABASE' ) 

我正在使用sp_whoisactive,非常丰富的基本行业标准。 它也返回完成百分比。

只需在主数据库上运行bkp_status,您将获得备份状态