Hola, chicos,
¡Buenas tardes!
En esta publicación demostraré cómo podemos acceder al registro de Windows y obtener información útil sobre la instancia de SQL Server.
Si quieres saber cómo consultar cualquier clave del registro de Windows, así como realizar cambios en claves y valores, accede al post SQL Server: cómo leer, enumerar, crear, cambiar y eliminar claves del Registro de Windows (Regedit) usando CLR (C#)
Usando el DMV sys.dm_server_registry
Disponible desde SQL Server 2008 R2 en adelante, sys.dm_server_registry DMV le permite acceder fácilmente a información de registro relacionada con la instancia de SQL Server en la que se realiza la consulta.
La consulta es muy sencilla:
SELECT * FROM sys.dm_server_registry
Y el resultado de la consulta será algo como esto:

Ahora comparemos con el propio Registro de Windows (RegEdit):

Tenga en cuenta que el DMV devuelve varias claves diferentes del registro de Windows y las agrupa en una sola vista, de modo que le facilita la vida al DBA y no necesita consultar varias claves para obtener la información que necesita.
Si comparamos los registros bajo la clave “HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\Parameters”, veremos que son los mismos valores.
Esto es muy útil para conocer algunos datos sobre la instancia, como el puerto utilizado, por ejemplo (ya lo comenté en el post Cómo identificar el puerto utilizado por la instancia de SQL Server)
Usando el procedimiento extendido xp_instance_regread
Disponible a partir de SQL Server 2000 en adelante, este procedimiento extendido no tiene mucha documentación en Internet ni en el propio Microsoft (como la mayoría de los XP), pero es muy útil para recuperar y consultar información de instancias en el Registro de Windows, principalmente porque está disponible en todas las versiones de SQL Server hasta la fecha.
Su uso es muy sencillo y a diferencia del DMV, solo devuelve un registro. Por lo tanto, no es posible listar las claves y valores a la vez, hay que consultarlos manualmente. Por esta razón, el DMV y este procedimiento tienen conceptos y propósitos diferentes.
Ejemplo de uso para devolver la versión de la instancia:
DECLARE @dir NVARCHAR(4000)
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion\',
N'CurrentVersion',
@dir OUTPUT
SELECT @dir
Nota: Vale recordar que, al igual que otros Procedimientos Extendidos, no se permite una variable OUTPUT con más de 4.000 caracteres como parámetro para recibir los datos devueltos.
Si se ingresa NVARCHAR(4001) o NVARCHAR(MAX), por ejemplo, la variable OUTPUT generará un mensaje de error o no tendrá ningún valor (NULL), en el caso de NVARCHAR(MAX).
Usando el procedimiento extendido xp_regread
Al igual que XP xp_instance_regread, este procedimiento está disponible desde la versión 2000 de SQL Server hasta las versiones actuales y permite consultar cualquier clave de registro del servidor donde está instalada la instancia.
Cualquiera que haya estado siguiendo mi blog por un tiempo ya sabrá sobre XP xp_regread a través de la publicación Procedimientos extendidos no documentados de SQL Server. Si aún no has accedido a este post, ¡no pierdas el tiempo! Vale la pena.
La gran diferencia entre XP y xp_instance_regread es que xp_instance_regread "convierte" la ruta ingresada, transformando "Microsoft\MSSQLServer" en "Microsoft\Microsoft SQL Server\
Ej: si ingresa “Software\Microsoft\Servidor MSSQL\MSSQLServer\CurrentVersion\”, SP se convertirá a “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer” (en mi caso), que es la ubicación de instalación predeterminada de la instancia a la que estoy conectado.
Esto es especialmente importante cuando el servidor tiene más de una instancia instalada. Con exactamente el mismo código, puede consultar las claves de su instancia sin preocuparse por cambiar la clave de registro de su código para cada instancia.
Ejemplo de uso de xp_regread:
DECLARE @dir NVARCHAR(4000)
EXEC master.dbo.xp_regread
N'HKEY_LOCAL_MACHINE',
N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\CurrentVersion',
N'CurrentVersion',
@dir OUTPUT
SELECT @dir
Como puede ver, al utilizar este SP debemos informar la ruta completa de la clave de registro. Sin embargo, nos permite realizar consultas sobre cualquier clave de registro de Windows, como el siguiente ejemplo:

¡Eso es todo, muchachos!
¡Gracias por visitarnos y nos vemos en el próximo post!
Comentários (0)
Carregando comentários…