una seguridad script restaurar restauracion respaldo procedimiento para hacer datos copia como bak archivo almacenado sql-server backup restore

restaurar - ¿Existe un script SQL que pueda usar para determinar el progreso de un proceso de copia de seguridad o restauración de SQL Server?



script para hacer backup sql server (11)

Use STATS en el comando BACKUP si solo es un script.

El código interno es un poco más complicado. En ODBC, por ejemplo, establece SQL_ATTR_ASYNC_ENABLE y luego busca SQL_STILL_EXECUTING código de retorno, y realiza algunas llamadas repetidas de SQLExecDirect hasta que obtenga un SQL_SUCCESS (o eqiv).

Cuando hago una copia de seguridad o restauro una base de datos usando MS SQL Server Management Studio, obtengo una indicación visual de cuánto ha progresado el proceso y, por lo tanto, cuánto tiempo más necesito esperar a que termine. Si comienzo la copia de seguridad o la restauración con un guión, ¿hay alguna manera de controlar el progreso, o simplemente me siento y espero que termine (esperando que nada haya salido mal)?

Editado: Mi necesidad es específicamente poder monitorear la copia de seguridad o restaurar el progreso completamente separado de la sesión donde se inició la copia de seguridad o restauración.



Sí. Si ha instalado sp_who2k5 en su base de datos maestra, simplemente puede ejecutar:

sp_who2k5 1,1

El conjunto de resultados incluirá todas las transacciones activas. Las copias de seguridad que se ejecutan actualmente contendrán la cadena "BACKUP" en el campo requestCommand . El campo acertadamente llamado percentComplete le dará el progreso de la copia de seguridad.

Nota: sp_who2k5 debe ser parte de la caja de herramientas de todos, hace mucho más que solo esto.


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


Aquí hay un script simple que generalmente me funciona:

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


Para supervisar la copia de seguridad o restaurar el progreso completamente separado de la sesión donde se inició la copia de seguridad o restauración. No se requieren herramientas de terceros. Probado en Microsoft SQL Server 2012.

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


Creo que la mejor forma de averiguar cómo está el progreso de restauración o copia de seguridad es mediante la siguiente consulta:

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

La consulta anterior, identifica la sesión por sí mismo y realiza un progreso porcentual cada vez que presionas F5 o el botón Ejecutar en SSMS.

La consulta fue realizada por el tipo que escribe esta publicación


Estoy usando sp_whoisactive, muy informativo básicamente un estándar de la industria. devuelve el porcentaje completado también.


simplemente ejecute bkp_status en master db obtendrá el estado de la copia de seguridad


Encontré este script de ejemplo aquí que parece funcionar bastante 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))) AS [SQL] FROM sys.dm_exec_requests r WHERE command IN (''RESTORE DATABASE'',''BACKUP DATABASE'')


Si conoce el ID de sesión, puede usar lo siguiente:

SELECT * FROM sys.dm_exec_requests WHERE session_id = 62

O si quieres restringirlo:

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