Gibt es einen SQL-Skript, dass ich verwenden kann, um den Fortschritt einer SQL Server-Sicherung bestimmen oder Prozess wiederherstellen?

StackOverflow https://stackoverflow.com/questions/152447

  •  02-07-2019
  •  | 
  •  

Frage

Wenn ich Sicherung oder Wiederherstellung einer Datenbank mit MS SQL Server Management Studio, erhalte ich eine visuelle Anzeige, wie weit der Prozess fortgeschritten ist, und damit, wie viel mehr muss ich noch warten, bis es fertig zu stellen. Wenn ich die Sicherung oder Wiederherstellung mit einem Skript beginnen, ist es eine Möglichkeit, um den Fortschritt zu überwachen, oder setzen Sie sich mich einfach zurück und warten, bis es zu beenden (in der Hoffnung, dass nichts schief gegangen ist?)

Editiert:. Mein Bedürfnis ist speziell die Lage sein, um die Sicherung zu überwachen oder Fortschritt vollständig getrennt von der Sitzung gestellt werden, bei der Sicherung oder Wiederherstellung eingeleitet wurde

War es hilfreich?

Lösung

Ja. Wenn Sie installiert haben sp_who2k5 in Ihre Master-Datenbank, können Sie einfach ausführen:

sp_who2k5 1,1

Die resultset werden alle aktiven Transaktionen umfassen. Die derzeit laufende Backup (s) wird die Zeichenfolge "BACKUP" in dem requestCommand Feld enthält. Die passenden Namen percentComplete geben Sie den Fortschritt der Sicherung.

. Hinweis: sp_who2k5 ein Bestandteil eines jeden Toolkit sein sollte, tut es viel mehr als nur das

Andere Tipps

Ich fand dieses Beispielskript hier das scheint arbeitet ziemlich gut:

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

Wenn Sie die sessionID kennen, dann können Sie mit dem folgenden Befehl:

SELECT * FROM sys.dm_exec_requests WHERE session_id = 62

Oder wenn Sie es verengen:

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

Hier ist ein einfaches Skript, das im Allgemeinen den Trick für mich tut:

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

Verwenden STATS im Befehl BACKUP wenn es nur ein Skript.

Innerhalb Code ist es ein bisschen komplizierter. In ODBC zum Beispiel, setzen Sie SQL_ATTR_ASYNC_ENABLE und dann SQL_STILL_EXECUTING Return-Code suchen, und haben einige wiederholte Anrufe von SQLExecDirect, bis Sie eine SQL_SUCCESS (oder Äquiv) erhalten.

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

Script, um die Sicherung und Wiederherstellung Fortschritt in SQL Server zu überprüfen:

Oft passiert es, dass Ihr Backup (oder wiederherstellen) Aktivität von einem anderen Datenbank-Administrator gestartet wurde oder durch einen Job, und man kann nicht die GUI etwas anderes verwenden, um den Fortschritt des Backup überprüfen / Wiederherstellen.

Durch mehrere Befehle kombinieren, ich habe unten Skript generiert, die uns eine Zusammenfassung der aktuellen Backups geben kann und Wiederherstellungen, die auf dem Server geschieht.

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

Ich denke, der beste Weg, um herauszufinden, wie Sie Ihre wiederherstellen oder Backup-Fortschritt ist durch die folgende Abfrage:

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

Die Abfrage oben, identifizieren die Sitzung von selbst und führen Sie jedes Mal einen Prozentsatz Fortschritt Sie F5 drücken oder auf SSMS Execute-Button klicken!

Die Abfrage wurde von dem Mann durchgeführt, die diese post

Versuchen Sie, mit:

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

, um die Sicherung zu überwachen oder Fortschritt vollständig getrennt von der Sitzung gestellt werden, bei der Sicherung oder Wiederherstellung begonnen. Keine Tools von Drittanbietern erforderlich. Getestet auf Microsoft SQL Server 2012.

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

Ich bin mit sp_whoisactive, sehr informativ einen im Grunde Industriestandard. es gibt Prozent als gut abgeschlossen.

In STATS=10 oder STATS=1 in Sicherungsbefehl.

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.

SELECT session_id als SPID, Befehl, START_TIME PERCENT_COMPLETE,         dateadd (zweite, estimated_completion_time / 1000, getDate ()) als estimated_completion_time,         a.text AS Abfrage FROM sys.dm_exec_requests r CROSS sys.dm_exec_sql_text (r.sql_handle) a APPLY WO r.command in ( 'BACKUP DATABASE', 'BACKUP LOG', 'RESTORE DATABASE', 'RESTORE LOG')

einfach bkp_status auf Master laufen db Sie Backup-Status erhalten wird

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top