Descobrindo a quanto tempo a instância está UP
Olá pessoal,
No post de hoje vou compartilhar com vocês como descobrir o tempo que o serviço do SQL Server está em execução no seu servidor.
Para obter essa informação vamos utilizar a DMV dm_os_sys_info ela retorna informações sobre os recursos que a instância está consumindo, além da data que a instância foi iniciada, a DMV está disponível desde a versão SQL Server 2008, porém no SQL Server 2012 algumas colunas foram renomeadas. Para obter o tempo que a instância está online também podemos utilizar a data de criação do Temdb.
DECLARE @starttime DATETIME, @minutos INT, @dias INT, @horas INT; SELECT @starttime = sqlserver_start_time FROM sys.dm_os_sys_info; SET @minutos = DATEDIFF(mi, @starttime, GETDATE()); SET @dias = @minutos / 1440; SET @horas = ( @minutos / 60 ) - ( @dias * 24 ); SET @minutos = @minutos - ( ( @horas + ( @dias * 24 ) ) * 60 ); PRINT 'A instância "' + CONVERT(VARCHAR(20), SERVERPROPERTY('SERVERNAME')) + '" está online há ' + CAST(@dias AS VARCHAR(30)) + ' dias & ' + CAST(@horas AS VARCHAR(30)) + ' horas & ' + CAST(@minutos AS VARCHAR(30)) + ' minutos'; IF NOT EXISTS ( SELECT 1 FROM master.sys.sysprocesses WHERE program_name = N'SQLAgent - Generic Refresher' ) BEGIN PRINT 'O serviço do SQL Server está em execução, porém o SQL Server Agent está parada'; END; ELSE BEGIN PRINT 'O serviço do SQL Server e SQL Server Agent estão em execução'; END;
Script utilizando a data de criação do Tempdb.
DECLARE @dtcriacao DATETIME, @minutos INT, @dias INT, @horas INT, @hoje datetime; SET @hoje = GETDATE() SELECT @dtcriacao=crdate FROM sysdatabases WHERE NAME='tempdb' SET @minutos = DATEDIFF (mi,@dtcriacao,@hoje) SET @dias= @minutos/1440 SET @horas = (@minutos/60) - (@dias * 24) SET @minutos= @minutos - ( (@horas + (@dias*24)) * 60) PRINT 'A instância "' + CONVERT(VARCHAR(20), SERVERPROPERTY('SERVERNAME')) + '" está online há ' + CAST(@dias AS VARCHAR(30)) + ' dias & ' + CAST(@horas AS VARCHAR(30)) + ' horas & ' + CAST(@minutos AS VARCHAR(30)) + ' minutos'; IF NOT EXISTS ( SELECT 1 FROM master.sys.sysprocesses WHERE program_name = N'SQLAgent - Generic Refresher' ) BEGIN PRINT 'O serviço do SQL Server está em execução, porém o SQL Server Agent está parada'; END; ELSE BEGIN PRINT 'O serviço do SQL Server e SQL Server Agent estão em execução'; END;
A diferença de 1 (um) minuto entre a DMV dm_os_sys_info e a data de criação do arquivo do Tempdb, é por que a DMV utiliza o exato momento que a instância foi iniciada, o fluxo normal é a instância ser iniciada, carrega-se as configurações e depois cria o arquivo do Tempdb, por isso essa diferença, em alguns contratos de SLA com disponibilidade 99,999% utiliza-se o contador da DMV.
Bom por hoje é isso, até a próxima.
Abraços,
Tiago Neves