Verifica Restore em Tempo Real – SQL Server

Neste artigo irei mostrar uma query que mostra informações de um RESTORE em tempo real.

A query irá retornar os seguintes campos:

  • HostName: nome do servidor (hostname) na qual a sessão está sendo executada.
  • LoginName: nome do logon do SQL Server no qual a sessão está sendo executada.
  • SessionID: id da sessão a que esta solicitação está relacionada.
  • Percent: porcentagem de trabalho concluída até o momento.
  • MinutesRunning: tempo de execução em minutos.
  • StartTime: data/hora do inicio do RESTORE.
  • EstimatedCompletion: data/hora previsto para o fim do RESTORE.
  • DatabaseName: database no qual a solicitação está em execução.
  • ProgramName: nome do programa cliente (ou JOB) que iniciou o RESTORE.
  • Command: identifica qual tipo de comando está sendo realizado no momento.
  • Text: comando SQL utilizado no RESTORE.

Links úteis:
sys.dm_exec_requests
– sys.dm_exec_sessions
– sys.dm_exec_sql_text
dbo.sysjobs

* esta query é compatível com o SQL Server 2008 R2 ou versões superiores.

USE master
GO
SELECT
S.Host_Name AS [HostName]
,S.Login_Name AS [LoginName]
,R.Session_ID AS [SessionID]
,Cast(R.Percent_Complete AS decimal(10,3)) AS [Percent]
,IsNull(DateDiff(minute, S.Last_Request_Start_Time, GetDate()), 0) [MinutesRunning]
,Start_Time AS [StartTime]
,DateAdd(second, Estimated_Completion_Time / 1000, GetDate()) AS [EstimatedCompletion]
,DB_Name(R.Database_ID) AS [DatabaseName]
,(CASE
WHEN S.Program_Name Like 'SQLAgent - TSQL JobStep (Job %' THEN J.Name
ELSE S.Program_Name END) AS [ProgramName]
,R.Command
,B.Text
FROM
sys.dm_exec_requests R WITH (NOLOCK)
JOIN
sys.dm_exec_sessions S WITH (NOLOCK)
ON
R.Session_ID = S.Session_ID
OUTER APPLY
sys.dm_exec_sql_text(R.SQL_Handle) B
LEFT OUTER JOIN
msdb.dbo.sysjobs J WITH (NOLOCK)
ON
(SubString(Left(J.Job_ID, 8), 7, 2) +
SubString(Left(J.Job_ID, 8), 5, 2) +
SubString(Left(J.Job_ID, 8), 3, 2) +
SubString(Left(J.Job_ID, 8), 1, 2)) = SubString(S.Program_Name, 32, 8)
WHERE
R.Session_ID > 50
AND R.Session_ID <> @@SPID
AND S.[Host_Name] Is Not Null
AND R.Command = 'RESTORE DATABASE'
ORDER BY
S.[Host_Name], S.Login_Name

Resultado:

resultado_query

 

Anúncios

SQL Server – Backup Restore em disco remoto

Uma das maiores dificuldades que percebo em alguns fóruns relacionados a SQL Server é o Backup/Restore em disco remoto, bom, antes de tudo, é preciso dizer que até a versão disponível completa atual (SQL Server 2008), o mesmo não reconhece discos remotos sozinho!, e caso você já tenha tentado realizar alguma ação e se deparou com este erro, provavelmente você foi no meu computador e mapeou a pasta correto? Se sim, ERROU! Você mapeou o disco remoto para o SO e não para a instância SQL Server.

Para solucionar este problema, é preciso “enganar” o SQL Server com um simples comando DOS. O código abaixo realiza isso, lembrando que ao final do código , o parâmetro para o xp_cmdshell estará ativo, o que é um risco imenso a seu servidor, após utiliza-lo, lembre-se de desativa-lo.

GO
EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell',1
GO
RECONFIGURE
EXEC xp_cmdshell 'net use p: \\IpDoServidorRemoto\DiscoRemoto$ /user:DominioDeRede\UsuarioDeRede Senha'

By: Fabrizzio Caputo