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

