Olá pessoal,
Boa tarde!
Neste post vou demonstrar como podemos acessar o registro do Windows e obter informações úteis sobre a instância SQL Server.
Caso você queira saber como consultar qualquer chave de registro do Windows, bem como realizar alterações em chaves e valores, acesse o post SQL Server – Como ler, listar, criar, alterar e apagar chaves do Registro do Windows (Regedit) pelo CLR (C#)
Utilizando a DMV sys.dm_server_registry
Disponibilizada a partir do SQL Server 2008 R2, a DMV sys.dm_server_registry permite acessar facilmente as informações do registro referentes a instância SQL Server em que está sendo realizada a consulta.
A query é bem simples:
1 |
SELECT * FROM sys.dm_server_registry |
E o resultado da consulta será algo parecido com isso:
Agora vamos comparar com o próprio Registro do Windows (RegEdit):
Reparem que a DMV retorna várias chaves diferentes do registro do Windows e as agrupa em uma visão única, de modo que facilite a vida do DBA e não precise consultar várias chaves para obter a informação que precisa.
Se compararmos os registros que estão debaixo da chave “HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\Parameters”, veremos que são os mesmos valores.
Isso é bastante útil para se descobrir algumas informações da instância, como a porta utilizada, por exemplo (já comentei sobre isso no post Como identificar a porta utilizada pela instância do SQL Server)
Utilizando a extended procedure xp_instance_regread
Disponível a partir do SQL Server 2000, essa procedure extendida não possui muita documentação na Internet ou pela própria Microsoft (assim como a maioria das XP’s), mas é bem útil para recuperar e consultar informações da instância no Windows Registry, principalmente por estar disponível em todas as versões do SQL Server até o momento.
O seu uso é bem simples, e diferente da DMV, só retorna uma registro. Sendo assim, não é possível listar as chaves e valores de uma só vez, devem ser consultados manualmente. Por este motivo, a DMV e essa procedure possuem conceitos e finalidades diferentes.
Exemplo de utilização para retornar a versão da instância:
1 2 3 4 5 6 7 8 9 |
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 |
Obs: Vale lembrar que assim como as outras Extended Procedures, não é permitido uma variável de OUTPUT com mais de 4.000 caracteres como parâmetro para receber os dados retornados.
Caso seja informado um NVARCHAR(4001) ou NVARCHAR(MAX), por exemplo, a variável de OUTPUT gerará uma mensagem de erro ou ficará sem valor (NULL), no caso do NVARCHAR(MAX).
Utilizando a extended procedure xp_regread
Assim como a XP xp_instance_regread, essa procedure está disponível desde a versão 2000 do SQL Server até as versões atuais e permite consultar qualquer chave de registro do servidor onde a instância está instalada.
Quem acompanha o meu blog há algum tempo já deve conhecer a XP xp_regread através do post As procedures estendidas não documentadas do SQL Server. Se você ainda não acessou esse post, não perca tempo! Vale a pena.
A grande diferença entre essa XP e a xp_instance_regread, é que a xp_instance_regread “converte” o caminho informado, transformando “Microsoft\MSSQLServer” em “Microsoft\Microsoft SQL Server\<Sua instancia>\MSSQLServer”.
Ex: Se você informar “Software\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion\”, a SP irá converter para “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer” (no meu caso), que é o local de instalação padrão da instância que estou conectado.
Isso é especialmente importante quando o servidor possui mais de uma instância instalada. Com exatamente o mesmo código, você pode consultar as chaves da sua instância sem se preocupar em alterar a chave de registro do seu código para cada instância.
Exemplo de utilização da xp_regread:
1 2 3 4 5 6 7 8 9 |
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 vocês podem observar, utilizando essa SP precisamos informar o caminho completo da chave do registro. Porém, ela nos permite realizar consultas em qualquer chave do registro do Windows, como o exemplo abaixo:
É isso aí, galera!
Obrigado pela visita e até o próximo post!