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

Aplica-se ao:simSQL Server (todas as versões com suporte) SimBanco de Dados SQL do Azure

SQL Server fornece uma conexão diagnóstica especial para administradores quando conexões padrão com o servidor não são possíveis. Esta conexão diagnóstica permite que um administrador acesse o SQL Server para executar consultas diagnósticas e resolver problemas mesmo quando o SQL Server não está respondendo à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.

Aplica-se a: SQL Server (SQL Server 2008 e posterior), Banco de Dados SQL.

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 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*>.

Observação

Para estabelecer um DAC de 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 do 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 na 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ê 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 esse mestre 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 intensivas de recursos (por exemplo, uma junção complexa em uma tabela grande) ou consultas que podem 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 CTRL-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 que usem muitos 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 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 uma conexão de administração remota for configurada, a escuta do DAC será habilitada sem a necessidade de reiniciar o SQL Server e um cliente poderá se conectar ao DAC remotamente. Você pode habilitar a escuta 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, em seguida, 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 do sp_configure para permitir que a escuta do DAC acesse uma conexão remota. Se o SQL Server não estiver respondendo e a escuta do DAC não estiver habilitada, 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 as solicitações de 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 deve especificar o nome do banco de dados na cadeia de conexão usando a opção -d.

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.

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 <xxx> -d AdventureWorks

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)