Existe um script SQL que eu possa usar para determinar o progresso de um backup do SQL Server ou processo de restauração?
-
02-07-2019 - |
Pergunta
Quando eu backup ou restaurar um banco de dados usando o MS SQL Server Management Studio, recebo uma indicação visual de quão longe o processo progrediu e, assim, quanto tempo eu ainda preciso esperar que ela termine. Se eu começar o backup ou restauração com um script, há uma maneira de monitorar o progresso, ou eu só sentar e esperar que ela termine (esperando que nada tem de errado for?)
Editado:. Minha necessidade é especificamente para ser capaz de monitorar o backup ou restaurar progresso completamente separado da sessão onde o backup ou restauração foi iniciada
Solução
Sim. Se você tiver instalado o sp_who2k5 em seu banco de dados mestre, você pode simplesmente executar:
sp_who2k5 1,1
O conjunto de resultados incluirá todas as transações ativas. O backup em execução no momento (s) irá conter a string "BACKUP" no campo requestCommand. O apropriadamente chamado percentComplete lhe dará o andamento do backup.
Nota: sp_who2k5 deve ser uma parte de todos toolkit, ele faz muito mais do que apenas isso
.Outras dicas
Eu encontrei este script de exemplo aqui que parece estar funcionando muito bem:
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')
Se você sabe o sessionID então você pode usar o seguinte:
SELECT * FROM sys.dm_exec_requests WHERE session_id = 62
Ou se você quer reduzi-lo:
SELECT command, percent_complete, start_time FROM sys.dm_exec_requests WHERE session_id = 62
Aqui está um script simples que geralmente faz o truque para mim:
SELECT command, percent_complete,total_elapsed_time, estimated_completion_time, start_time
FROM sys.dm_exec_requests
WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')
Use STATS no comando BACKUP se é apenas um script.
código dentro é um pouco mais complicado. Em ODBC por exemplo, você definir SQL_ATTR_ASYNC_ENABLE e depois olhar para o código SQL_STILL_EXECUTING retorno, e fazer algumas chamadas repetidas de SQLExecDirect até obter um SQL_SUCCESS (ou eqiv).
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 para verificar o backup e restauração progressos no SQL Server :
Muitas vezes acontece que o seu backup (ou restaurar) a atividade foi iniciada por outro administrador de base ou por um trabalho, e você não pode usar o GUI mais nada para verificar o andamento de que Backup / Restore.
Ao combinar vários comandos, eu geraram abaixo script que pode nos dar um resumo dos backups e restaurações atuais que estão acontecendo no servidor.
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')
Use STATS opção: http://msdn.microsoft.com/en -us / library / ms186865.aspx
Eu acho que a melhor maneira de descobrir como o seu restaurar ou progresso do backup é através da seguinte 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
A consulta acima, identificar a sessão por si só e realizar uma porcentagem progredir cada vez que você pressione F5 ou o botão Executar no SSMS!
A consulta foi realizada pelo cara que escrever este pós
Tente com:
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')
Para monitorar o backup ou restaurar progresso completamente separado da sessão em que foi iniciado o backup ou restauração. Não há ferramentas de terceiros necessários. Testado em Microsoft SQL Server 2012.
SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE command In ( 'RESTORE DATABASE', 'BACKUP DATABASE' )
Eu estou usando sp_whoisactive, muito informativo um padrão da indústria, basicamente. ele retorna por cento completo, bem.
Adicionar STATS=10
ou STATS=1
no comando backup.
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.
SELECIONAR session_id como SPID, comando, start_time, percent_complete, dateadd (segunda, estimated_completion_time / 1000, getdate ()) como estimated_completion_time, a.text AS consulta DE sys.dm_exec_requests r CRUZ APLICAR sys.dm_exec_sql_text (r.sql_handle) um ONDE r.command in ( 'BACKUP DATABASE', 'BACKUP LOG', 'Restore Database', 'Restaurar LOG')
simplesmente executar bkp_status no master db você terá status de backup