Skip to content

Dirceu Resende

DBA SQL Server e Analista de BI (PowerBI, SSAS, SSIS, SSRS)

  • Consultoria
    • Consultoria de BI
    • Consultoria de Power BI
    • Consultoria SQL Server
  • Arquivo
  • Séries
    • Certificação
    • Segurança e Auditoria
    • Performance Tuning
    • O que mudou no T-SQL ?
    • Proteção de Dados
  • Vagas de Emprego
  • Eventos Data Platform
  • Sobre
  • Contato

Other Languages

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 536 outros assinantes

Visualizações do Blog

1.645.428 views

Categorias

  • Apache / .htaccess (9)
  • Banco de Dados (307)
    • MySQL / MariaDB (4)
    • Oracle (8)
    • SQL Server (293)
      • Auditoria (15)
      • Azure (2)
      • CLR (53)
      • Desenvolvimento de Query (83)
      • DMVs e Views de Catálogo (31)
      • Erros (22)
      • Ferramentas (12)
      • Formatação e Validação de Dados (23)
      • Funcionalidades pouco conhecidas (19)
      • Hacks (17)
      • Integrações (30)
      • Manipulação de Arquivos (13)
      • Manutenção (80)
      • Monitoramento (35)
      • O que não fazer (7)
      • OLE Automation (19)
      • Performance Tuning (22)
      • Python (1)
      • Segurança (39)
      • SQL Server Agent (11)
  • Business Intelligence (BI) (31)
    • Analysis Services (SSAS) (7)
    • Microsoft (7)
    • Power BI (12)
    • Reporting Services (SSRS) (8)
  • Carreira e Cursos (13)
  • Carreira, Cursos e Certificações (28)
  • Celulares (1)
  • Eventos e Palestras (63)
  • Programação (57)
    • C# (CSharp) (30)
    • CSS (1)
    • ERP (1)
    • Javascript (1)
    • PHP (17)
    • Powershell / CMD (8)
    • SQLCLR (4)
  • Sem categoria (10)
  • SEO (4)
  • Virtualização (5)

Microsoft MVP Data Platform

Minhas Certificações

Treinamentos

Arquivo de Posts

Posts recentes

  • Descontos da “Black Friday” nos Treinamentos de SQL Server (Comprem meu curso kkkkk) 27 de novembro de 2020
  • SQL Server – As “novas” funções GREATEST e LEAST 27 de novembro de 2020
  • SQL Server – Como saber a data do último login de um usuário 9 de novembro de 2020
  • Azure na Prática Gratuito #07 – Administrando Banco de Dados no Azure 5 de novembro de 2020
  • Analysis Services – An error occurred while opening the model on the workspace database. Reason: An unexpected error occurred (file ‘tmcachemanager.cpp’, function ‘TMCacheManager::CreateEmptyCollectionsForAllParents’) 5 de novembro de 2020
  • 11 de janeiro de 2019
  • 0
  • Banco de Dados Desenvolvimento de Query DMVs e Views de Catálogo Manutenção SQL Server

SQL Server – Como identificar os parâmetros de inicialização da instância utilizando T-SQL

Visualizações: 434
Tempo de Leitura: 3 minutos

Fala pessoal!
Nesse post de hoje vou dar uma dica bem rápida, que é como identificar os parâmetros de inicialização da instância utilizando T-SQL, cenário bem útil quando você tem acesso à conecta na instância, mas não tem acesso ao sistema operacional do servidor.

Utilizando o SQL Server Configurando Manager

Para quem não sabe, o serviço do SQL Server possui alguns parâmetros de inicialização, que permitem alterar o comportamento do SQL Server. Alguns deles já são definidos por padrão, como o -d (caminho dos dados da master), -l (caminho do log da master) e -e (caminho padrão do errorlog).

Quando você tem acesso ao sistema operacional do servidor, você normalmente abre o SQL Server Configuration Manager, seleciona a instância que deseja visualizar os parâmetros e seleciona a opção “Propriedades” ao clicar com o botão direito do mouse, conforme a imagem abaixo:

Utilizando a sys.dm_server_registry do SQL Server 2008 R2 SP1

Mas e quando esse acesso não é possível? Nesse caso, uma alternativa bem prática é acessando o registro do Windows pelo SQL Server. O SQL Server armazena essas informações de inicialização na chave de registro “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.SQL2017\MSSQLServer\Parameters”, onde MSSQL14.SQL2017 = MSSQL., ou seja, esse valor vai variar conforme a sua instância e versão do SQL Server.

Para facilitar a recuperação dessas informações, podemos utilizar DMV dm_server_registry, disponível a partir do SQL Server 2008 R2 SP1, filtrando pela registry_key:

Transact-SQL
1
2
3
SELECT *
FROM sys.dm_server_registry
WHERE registry_key LIKE '%Parameters'

Resultado:

Utilizando XP de acesso ao registro xp_instance_regread

Entretanto, quem trabalha com vários clientes e várias versões do SQL Server, pode ter a vontade de padronizar um script único para as versões anteriores ao SQL Server 2008 R2 SP1, onde a DMV sys.dm_server_registry ainda não estava disponível.

Se você está nesse cenário ou mesmo o seu SQL Server é anterior ao 2008 R2 SP1, você pode utilizar as Extended Procedures (XP’s) de acesso ao registro (xp_instance_regread e xp_regread) para retornar o valor de um parâmetro individual ou criar um loop para fazer isso:

Transact-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DECLARE
    @Contador INT = 0,
    @Total INT = 10,
    @Chave VARCHAR(10)
 
DECLARE @SQLArgs TABLE
(
    [Value] VARCHAR(50),
    [Data] VARCHAR(500),
    ArgNum AS CONVERT(INTEGER, REPLACE([Value], 'SQLArg', ''))
)
 
 
WHILE(@Contador <= @Total)
BEGIN
 
    SET @Chave = 'SQLArg' + CAST(@Contador AS VARCHAR(2))
 
    INSERT INTO @SQLArgs
    EXEC sys.xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\MSSQLServer\Parameters', @Chave
        
    SET @Contador += 1
 
END
 
 
SELECT * FROM @SQLArgs

Resultado:

Utilizando XP de acesso ao registro xp_regread

Você também pode utilizar a xp_regread, mas você terá que informar o nome lógico da instância (no caso do exemplo, MSSQL10_50.SQL2008), enquanto a xp_instance_regread já retorna o nome lógico da instância em que a sua sessão está conectada:

Transact-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DECLARE
    @Contador INT = 0,
    @Total INT = 10,
    @Chave VARCHAR(10)
 
DECLARE @SQLArgs TABLE
(
    [Value] VARCHAR(50),
    [Data] VARCHAR(500),
    ArgNum AS CONVERT(INTEGER, REPLACE([Value], 'SQLArg', ''))
)
 
 
WHILE(@Contador <= @Total)
BEGIN
 
    SET @Chave = 'SQLArg' + CAST(@Contador AS VARCHAR(2))
 
    INSERT INTO @SQLArgs
    EXEC sys.xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.SQL2008\MSSQLServer\Parameters', @Chave
        
    SET @Contador += 1
 
END
 
SELECT * FROM @SQLArgs

Resultado:

Utilizando XP de acesso ao registro xp_instance_regenumvalues

Analisando o código das 2 soluções utilizando XP’s acima, podemos notar que elas tem um grande problema: Uso de WHILE sem um tamanho correto definido. Se tiver menos de 11 parâmetros, o WHILE estará executando mais vezes que o necessário. Se tiver mais, ele vai deixar de listar alguns parâmetros. Para resolver isso, podemos utilizar a Extended Procedure não documentada, xp_instance_regenumvalues, para nos ajudar nessa necessidade:

Transact-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
    @ChaveMestre VARCHAR(50) = 'HKEY_LOCAL_MACHINE',
    @Registro VARCHAR(100) = 'Software\Microsoft\MSSQLSERVER\MSSQLServer\Parameters'
 
DECLARE @SQLArgs TABLE
(
    [Value] VARCHAR(50),
    [Data] VARCHAR(500),
    ArgNum AS CONVERT(INTEGER, REPLACE([Value], 'SQLArg', ''))
)
 
INSERT INTO @SQLArgs
EXECUTE master.sys.xp_instance_regenumvalues @ChaveMestre, @Registro
 
SELECT * FROM @SQLArgs

Resultado:

Bom pessoal, espero que tenham gostado dessa dica. Para quem não conhecia a DMV sys.dm_server_registry ou essas Extended Procedures que demonstrei nesse artigo, agora você já conhece.
Um grande abraço e até o próximo post.

Tags: registrysqlsql servertsqlxp_instance_regenumvalues

You may also like...

  • SQL Server – Como calcular a distância entre dois locais utilizando latitude e longitude (sem API)

  • Como foi a Live do canal DevelopersBR – Segurança no SQL Server – Você está deixando a chave embaixo do tapete?

  • Como instalar e configurar o Microsoft SQL Server 2016 no Windows Server 2016

  • Next SQL Server – Como utilizar auditoria para mapear permissões necessárias reais em um usuário
  • Previous [Evento Presencial] – MVPConf LATAM 2019 – 12 e 13 de Abril (São Paulo)

Deixe uma resposta Cancelar resposta

Dirceu Resende © 2020. All Rights Reserved.