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é.
Réponses
Trop de publicités?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')
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.
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).
Utilisez l'option STATS: http://msdn.microsoft.com/en-us/library/ms186865.aspx