Partilhar via


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

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

O SQL Server fornece uma conexão de diagnóstico especial para administradores quando 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.

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

O SQL Server faz todas as tentativas para fazer com que o DAC se conecte com êxito, mas em situações extremas pode não ser bem-sucedido.

Conecte-se com o DAC

Por padrão, a conexão só é permitida a partir de um cliente em execução no servidor. As conexões de rede não são permitidas, a menos que sejam configuradas usando o sp_configure procedimento armazenado com a opção de configuração do servidor de conexões de administração remota .

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

O DAC está disponível e é suportado através do sqlcmd utilitário de prompt de comando usando uma opção de administrador especial (-A). Para obter mais informações sobre como usar sqlcmdo , consulte sqlcmd - Usar com variáveis de script. Você também pode conectar o prefixo admin: ao nome da instância no formato sqlcmd -S admin:<instance_name>. Você também pode iniciar um DAC a partir de um Editor de Consultas do SQL Server Management Studio conectando-se ao admin:<instance_name>.

Para estabelecer um DAC do SQL Server Management Studio:

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

  • No menu, selecione Arquivo > Nova > 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.

Porta DAC

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

Depois que a conexão de administração remota é configurada, o ouvinte de DAC é habilitado sem reiniciar o SQL Server e um cliente agora pode se conectar ao DAC remotamente. Você pode habilitar o ouvinte de 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 para aceitar conexão sp_configure de conexões remotas.

Nas configurações de cluster, o DAC estará desativado por padrão. Os usuários podem executar a opção de conexão de administrador remoto para permitir que o ouvinte de sp_configure DAC acesse uma conexão remota. Se o SQL Server não estiver respondendo e o ouvinte de DAC não estiver habilitado, talvez seja necessário reiniciar o SQL Server para se conectar ao DAC. Portanto, recomendamos que você habilite a opção de configuração de conexões de administração remota em sistemas clusterizados.

A porta de DAC é atribuída dinamicamente pelo SQL Server durante a inicialização. Ao se conectar à instância padrão, o DAC evita usar uma solicitação SSRP (SQL Server Resolution Protocol) para o Serviço de Navegador do SQL Server ao se conectar. Ele primeiro se conecta pela porta TCP 1434. Se isso falhar, ele faz uma chamada 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 em que o DAC está escutando. Se o SQL Server estiver configurado para aceitar conexões de administração remota, 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 é 1434 por padrão. Se o SQL Server estiver configurado para aceitar somente conexões de DAC locais, conecte-se usando o adaptador de loopback usando o seguinte comando:

sqlcmd -S 127.0.0.1,1434

Limitações

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

  • Para garantir que haja recursos disponíveis para a conexão, apenas um DAC é permitido por instância do SQL Server. Se uma conexão de DAC já estiver ativa, qualquer nova solicitação de conexão por meio do 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 o sinalizador de rastreamento 7806.

  • Inicialmente, o DAC tenta se conectar ao banco de dados padrão associado ao login. Depois que ele for conectado com êxito, você poderá se conectar ao master banco de dados. Se o banco de dados padrão estiver offline ou indisponível, a conexão retornará o erro 4060. No entanto, ele terá êxito se você substituir o banco de dados padrão para se conectar ao master banco de dados usando o seguinte comando:

    sqlcmd -A -d master
    

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

  • O SQL Server proíbe a execução de consultas ou comandos paralelos com o DAC. Por exemplo, o erro 3637 é gerado se você executar uma das seguintes instruções com o DAC:

    • RESTORE...
    • BACKUP...
  • Apenas é garantido que o CAD disponibilize recursos limitados. Não use o DAC para executar consultas que consomem muitos recursos ou que podem bloquear outras consultas. Isso ajuda a evitar que o DAC agrave quaisquer problemas de servidor existentes. Para evitar possíveis cenários de bloqueio, se você tiver que executar consultas que possam bloquear, execute a consulta em níveis de isolamento baseados em instantâneo, se possível; Caso contrário, defina o nível de isolamento da transação como READ UNCOMMITTED e defina o LOCK_TIMEOUT valor como um valor curto, como 2000 milissegundos, ou ambos. Isso impedirá que a sessão do DAC seja bloqueada. No entanto, dependendo do estado em que o SQL Server está, a sessão de DAC pode ficar bloqueada em uma trava. Talvez seja possível encerrar a sessão do DAC usando CTRL-C mas isso não é garantido. Nesse caso, sua única opção pode ser reiniciar o SQL Server.

  • Para garantir a conectividade e a solução de problemas com o DAC, o SQL Server reserva recursos limitados para processar comandos executados no DAC. Normalmente, esses recursos são suficientes apenas para funções simples de diagnóstico e solução de problemas, como as listadas abaixo.

Embora teoricamente você possa executar qualquer instrução Transact-SQL que não precise ser executada em paralelo no DAC, é altamente recomendável restringir o uso aos seguintes comandos de diagnóstico e solução de problemas:

  • Consultar exibições de gerenciamento dinâmico para diagnósticos básicos, como sys.dm_tran_locks o status de bloqueio, sys.dm_os_memory_cache_counters verificar a integridade de caches e sys.dm_exec_requests e sys.dm_exec_sessions sessões e solicitações ativas. Evite exibições de gerenciamento dinâmico que consomem muitos recursos (por exemplo, sys.dm_tran_version_store verifica o armazenamento de versão completa e pode causar E/S extensas) ou que usam junções complexas. Para obter informações sobre implicações de desempenho, consulte a documentação para a exibição de gerenciamento dinâmico específica.

  • Consultando exibições de catálogo.

  • Comandos DBCC básicos, como DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE,DBCC DROPCLEANBUFFERS eDBCC SQLPERF. Evite comandos que consomem muitos recursos, como DBCC CHECKDB, DBCC DBREINDEX ou DBCC SHRINKDATABASE.

  • KILL <spid>Transact-SQL comando. Dependendo do estado do SQL Server, o KILL comando pode não ter êxito. A única opção pode ser reiniciar a instância, no caso do SQL Server ou da Instância Gerenciada SQL do Azure. Seguem-se algumas orientações gerais:

    • Verifique se o SPID foi morto consultando SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>;. Se ele não retornar linhas, significa que a sessão foi morta.

    • Se a sessão ainda estiver lá, verifique se há tarefas atribuídas a esta sessão executando a consulta SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>;. Se você vir a tarefa lá, muito provavelmente sua sessão está sendo cancelada no momento. Isso pode levar uma quantidade considerável de tempo e pode não ter sucesso.

    • Se não houver tarefas associadas a sys.dm_os_tasks esta sessão, mas a sessão permanecer após sys.dm_exec_sessions a execução do KILL comando, isso significa que você não tem um trabalhador disponível. Selecione uma das tarefas atualmente em execução (uma tarefa listada sys.dm_os_tasks no modo de exibição com um sessions_id <> NULL) e mate a sessão associada a ela para liberar o trabalhador. Pode não ser suficiente para matar uma única sessão: você pode ter que matar várias.

Limitação no Banco de Dados SQL do Azure

Ao se conectar ao 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 -d opção.

Limitação na Instância Gerenciada SQL do Azure

O DAC não funciona em um ponto de extremidade privado para a Instância Gerenciada SQL do Azure. Em instâncias gerenciadas pelo SQL, o DAC escuta na porta 1434. Como os pontos de extremidade privados para instâncias gerenciadas pelo SQL só permitem conexões na porta 1433, não é possível usar um ponto de extremidade privado para estabelecer uma conexão de DAC. Você deve estar na mesma rede virtual que a instância gerenciada do SQL para se conectar ao DAC.

Examples

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

sqlcmd -S contoso-server -U sa -P <StrongPassword> -A

O administrador agora pode executar consultas para diagnosticar o problema e, possivelmente, encerrar as sessões que não respondem.

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

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