Conexão de diagnóstico para administradores de banco de dados

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

O SQL Server fornece uma conexão de diagnóstico especial para administradores quando as conexões padrão com o servidor não são possíveis. Essa conexão de diagnóstico permite que um administrador acesse o SQL Server para executar consultas de diagnóstico e resolver problemas mesmo quando o SQL Server não responde às solicitações de conexão padrão.

Esta conexão de administrador dedicada (DAC) oferece suporte à criptografia e outros recursos de segurança do SQL Server. O DAC só permite alterar o contexto de usuário para outro usuário admin.

SQL Server esforça-se o máximo para o êxito de uma conexão DAC, mas pode falhar em situações extremas.

Conectar-se ao DAC

Por padrão, a conexão só é permitida de um cliente executando no servidor. As conexões de rede apenas são permitidas se forem configuradas por meio do procedimento armazenado sp_configure com a opção remote admin connections.

Apenas membros da função sysadmin do SQL Server podem se conectar usando o DAC.

O DAC está disponível e tem suporte por meio do utilitário de prompt de comando sqlcmd que usa uma opção de administrador especial (-A). Para obter mais informações sobre como usar sqlcmd, confira Usar sqlcmd com variáveis de script. Você também pode se conectar inserindo o prefixo admin: no nome da instância no formato sqlcmd -S admin:<instance_name>. Além disso, você pode iniciar um DAC de um Editor de Consultas do SQL Server Management Studio conectando-se a admin:<instance_name>.

Para estabelecer um DAC por meio do SQL Server Management Studio:

  • Desfaça todas as conexões com a instância do SQL Server relacionada, incluindo o Pesquisador de Objetos e todas as janelas de consulta abertas.

  • No menu, selecione Arquivo> Novo> Consulta do Mecanismo de Banco de Dados

  • Na caixa de diálogo de conexão no campo Nome do Servidor, digite admin:<server_name> se estiver usando a instância padrão ou admin:<server_name>\<instance_name> se estiver usando uma instância nomeada.

Restrições

Como o DAC existe somente para diagnosticar problemas do servidor em circunstâncias raras, há algumas restrições na conexão:

  • Para garantir que existam recursos disponíveis para a conexão, apenas um DAC é permitido por instância do SQL Server. Se uma conexão DAC já estiver ativa, qualquer nova solicitação de conexão via DAC será negada com o erro 17810.

  • Para conservar recursos, o SQL Server Express não escuta a porta do DAC, a menos que tenha sido iniciado com um sinalizador de rastreamento 7806.

  • Inicialmente, o DAC tenta se conectar ao banco de dados padrão associado ao logon. Após uma conexão bem-sucedida, você poderá se conectar ao banco de dados master. Se o banco de dados padrão estiver offline ou não estiver disponível, a conexão retornará o erro 4060. Entretanto, ela terá sucesso se você substituir o banco de dados padrão para se conectar ao banco de dados master usando o seguinte comando:

    sqlcmd -A -d master
    

    Recomendamos que você se conecte ao banco de dados master com o DAC porque o master estará com certeza disponível se a instância do Mecanismo de Banco de Dados for iniciada.

  • SQL Server impede a execução de consultas paralelas ou comandos com o DAC. Por exemplo, erro 3637 será gerado se você executar uma das seguintes instruções com o DAC:

    • RESTORE...

    • BACKUP...

  • Apenas recursos limitados têm garantia de disponibilidade com o DAC. Não use o DAC para executar consultas com uso intensivo de recursos (por exemplo, uma junção complexa em uma tabela grande) ou consultas que possam ser bloqueadas. Isso ajuda a evitar que o DAC combine qualquer problema de servidor existente. Para evitar possíveis cenários de bloqueio, se você tiver que executar consultas que possam ser bloqueadas, execute-as nos níveis de isolamento baseados em instantâneos, se possível. Caso contrário, defina o nível de isolamento da transação como READ UNCOMMITTED e o valor LOCK_TIMEOUT como um valor curto, como 2000 milissegundos, ou ambos. Isso impedirá que a sessão DAC seja bloqueada. Porém, dependendo do estado do SQL Server , a sessão DAC pode ser travada imediatamente. Talvez você consiga encerrar a sessão do DAC usando CTRL-C, mas não há garantia disso. Nesse caso, sua única opção pode ser reiniciar o SQL Server.

  • Para garantir a conectividade e resolver problemas com o DAC, o SQL Server reserva recursos limitados para processar comandos executados no DAC. Esses recursos geralmente só são suficientes para diagnósticos simples e resolução de problemas de funções, como as listadas abaixo.

Embora seja teoricamente possível executar qualquer instrução Transact-SQL que não precise ser executada paralelamente no DAC, recomendamos que você restrinja o uso dos seguintes comandos de diagnóstico e solução de problemas:

  • Consulta de exibições de gerenciamento dinâmico para diagnósticos básicos como sys.dm_tran_locks para o status de bloqueio, sys.dm_os_memory_cache_counters para verificar a integridade dos caches, e sys.dm_exec_requests e sys.dm_exec_sessions para sessões e solicitações ativas. Evite exibições de gerenciamento dinâmico que usem muitos recursos (por exemplo, sys.dm_tran_version_store examina o repositório de versão completo e pode causar E/S extensiva) ou que usem junções complexas. Para obter informações sobre implicações de desempenho, consulte a documentação sobre exibições de gerenciamento dinâmicoespecíficas.

  • Consulta de exibições do catálogo.

  • Comandos DBCC básicos como DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS e DBCC SQLPERF. Evite comandos com uso intensivo de recursos, como DBCC CHECKDB, DBCC DBREINDEX ou DBCC SHRINKDATABASE.

  • Comando Transact-SQL KILL <spid>. Dependendo do estado do SQL Server, o comando KILL nem sempre pode ter êxito; assim, a única opção pode ser reiniciar o SQL Server. A seguir, algumas diretrizes gerais:

    • Verifique se o SPID foi interrompido consultando SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>. Se nenhuma linha for retornada, significa que a sessão foi interrompida.

    • Se a sessão ainda estiver ativa, verifique se há tarefas atribuídas para ela executando a consulta SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>. Se a tarefa estiver ativa, é provável que sua sessão esteja sendo interrompida no momento. Isso pode levar um tempo considerável e não funcionar.

    • Se não houver nenhuma tarefa no sys.dm_os_tasks associado a esta sessão, mas a sessão continuar em sys.dm_exec_sessions após a execução do comando KILL, isso significará que você não tem um trabalho disponível. Selecione uma das tarefas atualmente em execução (uma tarefa listada na exibição de sys.dm_os_tasks com sessions_id <> NULL) e interrompa a sessão associada a ela para liberar o trabalhador. Talvez não seja suficiente encerrar uma sessão: talvez você precise encerrar várias.

Porta do DAC

SQL Server verifica o DAC em uma porta TCP 1434, se estiver disponível, ou em uma porta TCP dinamicamente atribuída na inicialização do Mecanismo de Banco de Dados . O log de erros contém o número da porta que o DAC está escutando. Por padrão, a escuta do DAC aceita conexão apenas na porta local. Para obter um exemplo de código que ativa conexões de administração remota, veja Opção remote admin connections de configuração de servidor.

Depois que uma conexão de administração remota for configurada, o ouvinte do DAC será habilitado sem a reinicialização do SQL Server e um cliente poderá se conectar ao DAC remotamente. Você pode habilitar o ouvinte do DAC para aceitar conexões remotamente, mesmo que o SQL Server não responda durante a primeira conexão com o SQL Server usando o DAC localmente e executar o procedimento armazenado sp_configure para aceitar conexão de conexões remotas.

Em configurações de cluster, o DAC estará offline, por padrão. Os usuários podem executar a opção conexão de administração remota sp_configure para permitir que o ouvinte do DAC acesse uma conexão remota. Se o SQL Server não responder e o ouvinte do DAC não estiver habilitado, reinicie o SQL Server para se conectar ao DAC. Dessa forma, recomendamos que você habilite a opção de configuração conexões de administração remotas em sistemas clusterizados.

A porta DAC é atribuída dinamicamente pelo SQL Server durante a inicialização. Ao conectar-se à instância padrão, o DAC evita usar uma solicitação do Protocolo de Resolução (SSRP) do SQL Server ao serviço SQL Server Browser. Primeiro ele se conecta usando a porta TCP 1434. Se isso falhar, ele faz uma chamada ao SSRP para obter a porta. Se o SQL Server Browser não estiver escutando as solicitações do SSRP, a solicitação de conexão retornará um erro. Consulte o log de erros para localizar o número da porta que o DAC está escutando. Se o SQL Server for configurado para aceitar conexões de administração remotas, o DAC deverá ser iniciado com um número de porta explícito:

sqlcmd -S tcp:<server>,<port>

O log de erros do SQL Server lista o número da porta para o DAC, que, por padrão, é 1434. Se o SQL Server estiver configurado para aceitar apenas conexões DAC locais, conecte usando o adaptador de loopback com o seguinte comando:

sqlcmd -S 127.0.0.1,1434

Dica

Durante a conexão com o Banco de Dados SQL do Azure com o DAC, você também precisa especificar o nome do banco de dados na cadeia de conexão usando a opção -d.

Exemplo

Neste exemplo, um administrador observa que o servidor URAN123 não está respondendo e deseja diagnosticar o problema. Para isso, o usuário ativa o utilitário de prompt de comando sqlcmd e se conecta ao servidor URAN123 usando -A para indicar o DAC.

sqlcmd -S URAN123 -U sa -P <StrongPassword> -A

Agora o administrador pode executar consultas para diagnosticar o problema e possivelmente encerrar as sessões sem-resposta.

Um exemplo semelhante de conexão com o Banco de Dados SQL usaria o seguinte comando, incluindo o parâmetro -d para especificar o banco de dados:

sqlcmd -S serverName.database.windows.net,1434 -U sa -P <StrongPassword> -d AdventureWorks

Confira também