98 votes

Existe-t-il un script SQL que je peux utiliser pour déterminer la progression d'un processus de sauvegarde ou de restauration SQL Server?

Quand je sauvegarde ou restaurer une base de données à l'aide de MS SQL Server Management Studio, je reçois une indication visuelle de la façon dont beaucoup de chemin a progressé, et donc combien de temps j'ai encore besoin d'attendre qu'elle se termine. Si j'ai le coup de la sauvegarde ou de restauration avec un script, est-il un moyen de suivre les progrès, ou dois-je simplement s'asseoir et attendre qu'elle se termine (en espérant que rien n'a mal tourné?)

Modifié: Mon besoin est spécifiquement pour être en mesure de surveiller la sauvegarde ou la restauration des progrès complètement séparée de la session où la sauvegarde ou de restauration a été lancé.

224voto

Veldmuis Points 1380

J'ai trouvé ce script d'exemple ici qui semble fonctionner assez bien:

 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)))
FROM sys.dm_exec_requests r WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')
 

17voto

Allen Points 41

Si vous connaissez le sessionID, vous pouvez utiliser les éléments suivants:

 SELECT * FROM sys.dm_exec_requests WHERE session_id = 62
 

Ou si vous voulez le réduire:

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

12voto

Portman Points 15878

Oui. Si vous avez installé sp_who2k5 dans votre base de données, vous pouvez simplement exécuter:

sp_who2k5 1,1

Le jeu de résultats contient toutes les transactions actives. Le cours d'exécution de sauvegarde(s) contient la chaîne "SAUVEGARDE" dans la requestCommand champ. Le bien nommé percentComplete champ vous donnera la progression de la sauvegarde.

Remarque: sp_who2k5 devrait être une partie de tout le monde de la boîte à outils, il fait beaucoup plus que juste cela.

4voto

David L Morris Points 917

Utilisez STATS dans la commande BACKUP s'il ne s'agit que d'un script.

Dans le code, c'est un peu plus compliqué. Dans ODBC, par exemple, vous définissez SQL_ATTR_ASYNC_ENABLE, recherchez le code retour SQL_STILL_EXECUTING et effectuez des appels répétés de SQLExecDirect jusqu'à l'obtention d'un SQL_SUCCESS (ou eqiv).

3voto

Pavel Chuchuva Points 12220

Utilisez l'option STATS: http://msdn.microsoft.com/en-us/library/ms186865.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X