【发布时间】:2019-03-05 14:09:43
【问题描述】:
我有一些用于监控备份和恢复的代码,请给我一个“微软分钟”,了解它何时可能完成,运行了多长时间,以及其他一些信息。代码如下:
WITH CTE
AS (
SELECT @@SERVERNAME AS [ServerName]
,db_name(r.database_id) AS DatabaseName
,CONVERT(NUMERIC(6, 2), r.percent_complete) AS [PercentComplete]
,CONVERT(VARCHAR(20), DATEADD(ms, r.estimated_completion_time, GetDate()), 20) AS [ETACompletionTime]
,CONVERT(NUMERIC(10, 2), r.total_elapsed_time / 1000.0 / 60.0) AS [ElapsedMinutes]
,CONVERT(NUMERIC(10, 2), r.total_elapsed_time / 1000.0 / 60.0 / 60.0) AS [ElapsedHours]
,CONVERT(NUMERIC(10, 2), r.estimated_completion_time / 1000.0 / 60.0) AS [ETAMinutes]
,CONVERT(NUMERIC(10, 2), r.estimated_completion_time / 1000.0 / 60.0 / 60.0) AS [ETAHours]
,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) --sql_handle is a column from sys.dm_exec_requests
)) AS [TSQLCode]
FROM sys.dm_exec_requests r
WHERE command IN (
'RESTORE DATABASE'
,'BACKUP DATABASE'
)
)
SELECT [ServerName]
,SUBSTRING([TSQLCode], CHARINDEX('DATABASE [', [TSQLCode]) + 10, CHARINDEX(']', [TSQLCode], (CHARINDEX('DATABASE [', [TSQLCode]) + 10)) - (CHARINDEX('DATABASE [', [TSQLCode]) + 10)) AS [DatabaseName]
,[PercentComplete]
,[ETACompletionTime]
,[ElapsedMinutes]
,[ElapsedHours]
,[ETAMinutes]
,[ETAHours]
,Cast(CASE
WHEN charindex('Rest', [TSQLCode], 0) > 0
THEN 'Restoring'
ELSE 'Backup'
END AS VARCHAR(10)) AS BackupRestore
,[TSQLCode]
FROM CTE
这段代码大部分都可以工作...只要数据库用[databasename](方括号)封装。如果不是,您将收到以下错误。
对于我们必须恢复的所有数据库,以及我们拥有的许多正在执行恢复的作业,我不知道哪些作业有或没有方括号。而且我必须考虑到可能不使用方括号的人的临时备份\恢复作业。
所以我正在寻找一种无需解析即可获取正在备份或恢复的数据库的方法。
【问题讨论】:
标签: sql-server tsql database-backups database-restore