2010-08-05 6 views
6

Quiero usar el script desde http://www.wisesoft.co.uk/articles/tsql_backup_restore_progress.aspx para obtener información progreso de un ejecución específica de SQL Server tarea de restauración. Para achive esto, he cambiado un poco:Problema al obtener el estado de avance de un SQL Server tarea de restauración

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

Desafortunadamente esto no funciona porque r.database_id no es nunca igual a db_id ('database'). ¿Cuál es la razón para eso? ¿Qué está mal con esta declaración SQL? Este script funciona bien para 'r.command = BACKUP DATABASE'.

¿Existen otras posibilidades basadas en T-SQL para obtener el estado de progreso de un trabajo específico de SQL-Server?

Respuesta

2

cuando ejecuta BACKUP la base de datos está en línea y el comando se ejecuta dentro de la base de datos. Pero cuando ejecuta RESTORE, la base de datos no puede estar en línea (la está restaurando activamente, por lo que no puede estar en línea), por lo tanto, el comando no se puede ejecutar en el contexto de dicha base de datos.

Así que en lugar de meter en el DB_ID de adivinar cuál es la suya solicitud, simplemente colarse el @@SPID antes de ejecutar el comando de restauración en el SqlConnection y luego mirar a la solicitud con que session_id: que va a ser su solicitud de restauración.

+0

¿El SPID es constante para todo el proceso RESTORE? ¿Puedo también usar el connectio_id? – Elmex

+0

@@ SPID es constante para una sesión. No puedes usar connection_id. Use session_id. –

Cuestiones relacionadas