当我使用MS SQL Server Management Studio备份或恢复数据库时,我可以看到进程进展的程度,以及我还需要等待多长时间才能完成。如果我用脚本启动备份或恢复,有没有办法监控进度,或者我只是坐下来等待它完成(希望没有出错?)

已编辑:我的需求是专门能够完全独立于启动备份或恢复的会话监控备份或恢复进度。

有帮助吗?

解决方案

是。如果你已经安装 sp_who2k5 进入master数据库,你可以简单地运行:

sp_who2k5 1,1

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

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

其他提示

我发现这个示例脚本似乎是 here 工作得很好:

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

这是一个简单的脚本,通常可以解决这个问题:

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

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

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

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

用于检查SQL Server中备份和还原进度的脚本

很多时候,您的备份(或恢复)活动已由另一个数据库管理员或作业启动,您无法使用其他任何内容来检查备份/还原的进度。

通过组合多个命令,我生成了以下脚本,该脚本可以为我们提供服务器上正在进行的当前备份和恢复的摘要。

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

我认为通过以下查询了解恢复或备份进度的最佳方法是:

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或执行按钮时,自行识别会话并执行百分比进度!

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

尝试:

SELECT * FROM sys.dm_exec_requests where command like '%BACKUP%'

SELECT command, percent_complete, start_time FROM sys.dm_exec_requests where command like '%BACKUP%'

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上测试。

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

我使用sp_whoisactive,非常有用,基本上是行业标准。它也会返回完成百分比。

在备份命令中添加 STATS = 10 STATS = 1

BACKUP DATABASE [xxxxxx] TO  DISK = N'E:\\Bachup_DB.bak' WITH NOFORMAT, NOINIT,  
NAME = N'xxxx-Complète Base de données Sauvegarde', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
GO.

将session_id选为SPID,command,start_time,percent_complete,         dateadd(第二个,estimated_completion_time / 1000,getdate())为estimated_completion_time,         a.text AS Query FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle)a 在哪里r.command('BACKUP DATABASE','BACKUP LOG','RESTORE DATABASE','RESTORE LOG')

只需在master db上运行bkp_status即可获得备份状态

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top