ich das Drehbuch von http://www.wisesoft.co.uk/articles/tsql_backup_restore_progress.aspx verwenden möge Fortschrittsinformationen einen spezifische laufenden SQL-Server erhalten Wiederherstellungsauftrag. Um achive dies, ich habe es ein wenig geändert:Problem des Fortschritt Status eines SQL-Server wiederherstellen Job zu bekommen
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')
Leider funktioniert das nicht, weil r.database_id nie gleich ist DB_ID (‚database_name‘). Was ist der Grund dafür? Was ist falsch an dieser SQL-Anweisung? Dieses Skript funktioniert einwandfrei für 'r.command = BACKUP DATABASE'.
Gibt es andere T-SQL-basierte Möglichkeiten, den Fortschrittsstatus eines bestimmten SQL-Server-Jobs abzurufen?
Ist die SPID für den gesamten RESTORE-Prozess konstant? Kann ich die connectio_id auch benutzen? – Elmex
@@ SPID ist für eine Sitzung konstant. Sie können die Verbindungs-ID nicht verwenden. Verwenden Sie Sitzungs-ID. –