Partilhar via


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

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 solucionar problemas, mesmo quando o SQL Server não está respondendo a 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.

Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de Dados SQL V12.

Conectando com 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 com o procedimento armazenado sp_configure com a opção de conexões admin remotas.

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

O DAC está disponível e tem suporte através 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, veja Usar sqlcmd com variáveis de script. Você também pode conectar o prefixo admin:ao nome da instância no formato sqlcmd -Sadmin:<instance_name.> Você também pode iniciar um DAC de um Editor de Consultas do SQL Server Management Studio conectando-se ao admin:<instance_name.>

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 na porta do DAC, a menos que seja 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ê pode se conectar ao banco de dados mestre. 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á êxito se você substituir o banco de dados padrão para se conectar ao banco de dados mestre em vez de usar o seguinte comando:

    sqlcmd -A -d master

    Recomendamos que você se conecte ao banco de dados mestre com o DAC porque o mestre tem a garantia de estar 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. É possível que você consiga encerrar a sessão DAC usando CNTRL-C, mas não é garantido. 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 tenha que 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. Não execute comandos intensivos de recurso, 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 realmente 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. Observe que isso pode levar um tempo considerável e não ter êxito nenhum.

    • 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, significa que você não tem um trabalhador 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. Observe que talvez não seja suficiente interromper apenas uma sessão: talvez seja necessário interromper várias.

Porta 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 a conexão de administração remota é configurada, o ouvinte do DAC é habilitado sem exigir uma reinicialização do SQL Server e um cliente agora pode se conectar ao DAC remotamente. Você pode habilitar o ouvinte do DAC para aceitar conexões remotamente, mesmo que o SQL Server não esteja respondendo, conectando-se primeiro ao SQL Server usando o DAC localmente e, em seguida, executando o procedimento armazenado sp_configure para aceitar a 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 do sp_configure para permitir que a escuta do DAC acesse uma conexão remota. Se o SQL Server não estiver respondendo e o ouvinte do DAC não estiver habilitado, talvez seja necessário reiniciar 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 Navegador do SQL Server não estiver escutando solicitações 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-Stcp: <servidor>,< porta>

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-S127.0.0.1,1434

Exemplo

Neste exemplo, um administrador nota 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 <xxx> -A

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

Usar sqlcmd com variáveis de script

Utilitário sqlcmd

SELECT (Transact-SQL)

sp_who (Transact-SQL)

sp_lock (Transact-SQL)

KILL (Transact-SQL)

DBCC CHECKALLOC (Transact-SQL)

DBCC CHECKDB (Transact-SQL)

DBCC OPENTRAN (Transact-SQL)

DBCC INPUTBUFFER (Transact-SQL)

Opções de configuração do servidor (SQL Server)

Funções e exibições de gerenciamento dinâmico relacionadas à transação (Transact-SQL)

Sinalizadores de rastreamento (Transact-SQL)