0

Inventario de tus instancias SQL Server

Continuamos con nuestras entradas de gran utilidad, y hoy hemos preparado una consulta en T-SQL que nos permitirá generar un inventario con información muy valiosa sobre nuestras instancias de SQL Server.

Es probable que en alguna ocasión te hayan pedido información como la versión, la edición, la CPU o la memoria RAM de tus servidores SQL Server. Con esta consulta en T-SQL, podrás obtener toda esta información y mucho más.

IF OBJECT_ID('tempdb..##dba_inventario', 'U') IS NOT NULL 
DROP TABLE ##dba_inventario; 

--Creacion de la tabla temporal
create table ##dba_inventario (fecha_arranque DATETIME,cuenta_servicioSQL NVARCHAR (50),cuenta_servicioSQLAgent NVARCHAR(50),EspacioGB DECIMAL (10,2),DireccionIP NVARCHAR(50),Puerto NVARCHAR (50))

--Defino variables
 declare @fecha_arranque datetime, @cuenta_servicioSQL NVARCHAR(50), @cuenta_servicioSQLAgent NVARCHAR(50),@EspacioGB DECIMAL (10,2), @DireccionIP NVARCHAR (50), @Puerto NVARCHAR (50)

--Añadimos valor a cada variable
  select @fecha_arranque = create_date FROM sys.databases where name='tempdb'
 select @cuenta_servicioSQL = service_account  from sys.dm_server_services where filename like '%sqlservr.exe%'
 select @cuenta_servicioSQLAgent = service_account  from sys.dm_server_services where filename like '%SQLAGENT.EXE%'
 select @EspacioGB = CONVERT(DECIMAL(10,2),(SUM(size * 8.00) / 1024.00 / 1024.00)) from sys.master_files
 select distinct @Puerto = local_tcp_port FROM sys.dm_exec_connections WHERE local_tcp_port IS NOT NULL
 select distinct @DireccionIP = local_net_address FROM sys.dm_exec_connections WHERE local_tcp_port IS NOT NULL 

--Insertamos valores a table temporal
 INSERT INTO ##dba_inventario VALUES (@fecha_arranque,@cuenta_servicioSQL,@cuenta_servicioSQLAgent,@EspacioGB,@DireccionIP,@Puerto)

--Unimos toda la información que consideramos importante para un inventario.
SELECT 
    SERVERPROPERTY('ServerName') AS [NombreDeInstancia],
	SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS [NombreServidor],
    CASE LEFT(CONVERT(VARCHAR, SERVERPROPERTY('ProductVersion')),4) 
      WHEN '11.0' THEN 'SQL Server 2012'
      WHEN '12.0' THEN 'SQL Server 2014'
	  WHEN '13.0' THEN 'SQL Server 2016'
	  WHEN '14.0' THEN 'SQL Server 2017'
	  WHEN '15.0' THEN 'SQL Server 2019'
	  WHEN '16.0' THEN 'SQL Server 2022'
      ELSE 'Version no identifiada'
    END AS [Version],
    SERVERPROPERTY ('Edition') AS [Edicion],
    SERVERPROPERTY('ProductLevel') AS [ServicePack],
    CASE SERVERPROPERTY('IsIntegratedSecurityOnly') 
      WHEN 0 THEN 'SQL Server and Windows Authentication mode'
      WHEN 1 THEN 'Windows Authentication mode'
    END AS [AutentificacionServidor],
    CASE SERVERPROPERTY('IsClustered') 
      WHEN 0 THEN 'False'
      WHEN 1 THEN 'True'
    END AS [EsCluster],
    
    SERVERPROPERTY('Collation') AS [CollationSQL],
    [cpu_count] AS [CPUs],
    [physical_memory_kb]/1024 AS [RAM(MB)],
  SUBSTRING(@@VERSION,CHARINDEX('Windows',@@VERSION,0),100) AS OSVersion,
  ##dba_inventario.*
  FROM  
    [sys].[dm_os_sys_info],##dba_inventario

Si examinas detalladamente el código, verás que hemos utilizado funciones del sistema de SQL Server como SERVERPROPERTY (también podríamos utilizar CONNECTIONPROPERTY). Os proporcionamos los enlaces a la documentación oficial de Microsoft para que podáis revisar todo lo que se puede obtener con estas funciones.

Además, hemos utilizado tablas del sistema como dm_os_sys_info , dm_server_services o dm_exec_connections para obtener información adicional que consideramos importante.

Recordad que, si necesitáis ampliar la consulta a varias instancias, podéis hacerlo utilizando el método que explicamos en esta entrada:

¿Con qué cuenta de servicio y en qué puerto escucha tu SQL SERVER?

Por favor, háznos saber tu opinión sobre esta consulta y si crees que debemos añadir algún valor adicional a nuestro inventario, coméntanoslo e intentaremos añadirlo lo antes posible.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *