是否可以使用SQL脚本确定SQL Server备份或者还原过程的进度?

时间:2020-03-06 14:54:58  来源:igfitidea点击:

当我使用MS SQL Server Management Studio备份或者还原数据库时,可以直观地看到该过程进行了多长时间,因此还需要等待多长时间才能完成。如果我使用脚本启动备份或者还原,是否有办法监视进度,或者我只是坐下来等待它完成(希望没有任何问题?)

编辑:我特别需要能够独立于启动备份或者还原的会话来监视备份或者还原进度。

解决方案

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

我在这里发现此示例脚本似乎运行良好:

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

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

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

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

sp_who2k5 1,1

结果集将包含所有活动交易。当前运行的备份将在requestCommand字段中包含字符串" BACKUP"。适当命名的percentComplete字段将为我们提供备份进度。

注意:sp_who2k5应该成为每个人工具包的一部分,它所做的不仅仅限于此。