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;

ServicoEmExecucao

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;

ServicoEmExecucao_Tempdb

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

Deixe uma resposta