Conexão de diagnóstico para administradores de banco de dadosDiagnostic Connection for Database Administrators

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure SQL nãoAzure Synapse Analytics (SQL DW) nãoData Warehouse Paralelo APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

SQL ServerSQL Server fornece uma conexão diagnóstica especial para administradores quando conexões padrão com o servidor não são possíveis.provides a special diagnostic connection for administrators when standard connections to the server are not possible. Esta conexão diagnóstica permite que um administrador acesse o SQL ServerSQL Server para executar consultas diagnósticas e resolver problemas mesmo quando o SQL ServerSQL Server não está respondendo às solicitações de conexão padrão.This diagnostic connection allows an administrator to access SQL ServerSQL Server to execute diagnostic queries and troubleshoot problems even when SQL ServerSQL Server is not responding to standard connection requests.

Esta conexão de administrador dedicada (DAC) oferece suporte à criptografia e outros recursos de segurança do SQL ServerSQL Server.This dedicated administrator connection (DAC) supports encryption and other security features of SQL ServerSQL Server. O DAC só permite alterar o contexto de usuário para outro usuário admin.The DAC only allows changing the user context to another admin user.

SQL ServerSQL Server esforça-se o máximo para o êxito de uma conexão DAC, mas pode falhar em situações extremas.makes every attempt to make DAC connect successfully, but under extreme situations it may not be successful.

Aplica-se a: SQL ServerSQL Server (SQL Server 2008SQL Server 2008 e posterior), Banco de Dados SQLSQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 and later), Banco de Dados SQLSQL Database.

Conectando com DACConnecting with DAC

Por padrão, a conexão só é permitida de um cliente executando no servidor.By default, the connection is only allowed from a client running on the server. 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.Network connections are not permitted unless they are configured by using the sp_configure stored procedure with the remote admin connections option.

Apenas membros da função sysadmin do SQL ServerSQL Server podem se conectar usando o DAC.Only members of the SQL ServerSQL Server sysadmin role can connect using the 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).The DAC is available and supported through the sqlcmd command-prompt utility using a special administrator switch (-A). Para obter mais informações sobre como usar sqlcmd, veja Usar sqlcmd com variáveis de script.For more information about using sqlcmd, see Use sqlcmd with Scripting Variables. Você também pode se conectar inserindo o prefixo admin: ao nome da instância no formato sqlcmd -S admin:<instance_name> .You can also connect prefixing admin: to the instance name in the format sqlcmd -S admin:<instance_name>. Você também pode iniciar um DAC de um Editor de Consultas do SQL Server Management StudioSQL Server Management Studio conectando-se a admin:<instance_name> .You can also initiate a DAC from a SQL Server Management StudioSQL Server Management Studio Query Editor by connecting to admin:<instance_name>.

RestriçõesRestrictions

Como o DAC existe somente para diagnosticar problemas do servidor em circunstâncias raras, há algumas restrições na conexão:Because the DAC exists solely for diagnosing server problems in rare circumstances, there are some restrictions on the connection:

  • Para garantir que existam recursos disponíveis para a conexão, apenas um DAC é permitido por instância do SQL ServerSQL Server.To guarantee that there are resources available for the connection, only one DAC is allowed per instance of SQL ServerSQL Server. Se uma conexão DAC já estiver ativa, qualquer nova solicitação de conexão via DAC será negada com o erro 17810.If a DAC connection is already active, any new request to connect through the DAC is denied with error 17810.

  • Para conservar recursos, o SQL Server ExpressSQL Server Express não escuta na porta do DAC, a menos que tenha sido iniciado com um sinalizador de rastreamento 7806.To conserve resources, SQL Server ExpressSQL Server Express does not listen on the DAC port unless started with a trace flag 7806.

  • Inicialmente, o DAC tenta se conectar ao banco de dados padrão associado ao logon.The DAC initially attempts to connect to the default database associated with the login. Após uma conexão bem-sucedida, você pode se conectar ao banco de dados mestre.After it is successfully connected, you can connect to the master database. Se o banco de dados padrão estiver offline ou não estiver disponível, a conexão retornará o erro 4060.If the default database is offline or otherwise not available, the connection will return error 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:However, it will succeed if you override the default database to connect to the master database instead using the following command:

    sqlcmd -A -d mastersqlcmd -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 DadosDatabase Engine for iniciada.We recommend that you connect to the master database with the DAC because master is guaranteed to be available if the instance of the Mecanismo de Banco de DadosDatabase Engine is started.

  • SQL ServerSQL Server impede a execução de consultas paralelas ou comandos com o DAC.prohibits running parallel queries or commands with the DAC. Por exemplo, erro 3637 será gerado se você executar uma das seguintes instruções com o DAC:For example, error 3637 is generated if you execute either of the following statements with the DAC:

    • RESTORERESTORE

    • BACKUPBACKUP

  • Apenas recursos limitados têm garantia de disponibilidade com o DAC.Only limited resources are guaranteed to be available with the DAC. Não use o DAC para executar consultas com muitos recursos (por exemplo,Do not use the DAC to run resource-intensive queries (for example. uma junção complexa em tabela grande) ou consultas que podem ser bloqueadas.a complex join on large table) or queries that may block. Isso ajuda a evitar que o DAC combine qualquer problema de servidor existente.This helps prevent the DAC from compounding any existing server problems. 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.To avoid potential blocking scenarios, if you have to run queries that may block, run the query under snapshot-based isolation levels if possible; otherwise, set the transaction isolation level to READ UNCOMMITTED and set the LOCK_TIMEOUT value to a short value such as 2000 milliseconds, or both. Isso impedirá que a sessão DAC seja bloqueada.This will prevent the DAC session from getting blocked. Porém, dependendo do estado do SQL ServerSQL Server , a sessão DAC pode ser travada imediatamente.However, depending on the state that the SQL ServerSQL Server is in, the DAC session might get blocked on a latch. É possível que você consiga encerrar a sessão DAC usando CTRL-C, mas não é garantido.You might be able to terminate the DAC session using CTRL-C but it is not guaranteed. Nesse caso, sua única opção pode ser reiniciar o SQL ServerSQL Server.In that case, your only option may be to restart SQL ServerSQL Server.

  • Para garantir a conectividade e resolver problemas com o DAC, o SQL ServerSQL Server reserva recursos limitados para processar comandos executados no DAC.To guarantee connectivity and troubleshooting with the DAC, SQL ServerSQL Server reserves limited resources to process commands run on the DAC. Esses recursos geralmente só são suficientes para diagnósticos simples e resolução de problemas de funções, como as listadas abaixo.These resources are typically only enough for simple diagnostic and troubleshooting functions, such as those listed below.

Embora seja teoricamente possível executar qualquer instrução Transact-SQLTransact-SQL que não tenha que ser executada paralelamente no DAC, recomendamos que você restrinja o uso dos seguintes comandos de diagnóstico e resolução de problemas:Although you can theoretically run any Transact-SQLTransact-SQL statement that does not have to execute in parallel on the DAC, we strongly recommend that you restrict usage to the following diagnostic and troubleshooting commands:

  • 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.Querying dynamic management views for basic diagnostics such as sys.dm_tran_locks for the locking status, sys.dm_os_memory_cache_counters to check the health of caches, and sys.dm_exec_requests and sys.dm_exec_sessions for active sessions and requests. 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.Avoid dynamic management views that are resource intensive (for example, sys.dm_tran_version_store scans the full version store and can cause extensive I/O) or that use complex joins. Para obter informações sobre implicações de desempenho, consulte a documentação sobre exibições de gerenciamento dinâmicoespecíficas.For information about performance implications, see the documentation for the specific dynamic management view.

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

  • Comandos DBCC básicos como DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS e DBCC SQLPERF.Basic DBCC commands such as DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, and DBCC SQLPERF. Não execute comandos que usem muitos recursos, como DBCC CHECKDB, DBCC DBREINDEX ou DBCC SHRINKDATABASE.Do not run resource-intensive commands such as DBCC CHECKDB, DBCC DBREINDEX, or DBCC SHRINKDATABASE.

  • Transact-SQLTransact-SQL Comando KILL <spid> .KILL*<spid>* command. Dependendo do estado do SQL ServerSQL Server, o comando KILL nem sempre pode ter êxito; assim, a única opção pode ser reiniciar o SQL ServerSQL Server.Depending on the state of SQL ServerSQL Server, the KILL command might not always succeed; then the only option may be to restart SQL ServerSQL Server. A seguir, algumas diretrizes gerais:The following are some general guidelines:

    • Verifique se o SPID foi realmente interrompido consultando SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>.Verify that the SPID was actually killed by querying SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>. Se nenhuma linha for retornada, significa que a sessão foi interrompida.If it returns no rows, it means the session was killed.

    • 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>.If the session is still there, verify whether there are tasks assigned to this session by running the query 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.If you see the task there, most likely your session is currently being killed. Observe que isso pode levar um tempo considerável e não ter êxito nenhum.Note that this may take considerable amount of time and may not succeed at all.

    • 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.If there are no tasks in the sys.dm_os_tasks associated with this session, but the session remains in sys.dm_exec_sessions after executing the KILL command, it means that you do not have a worker available. 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.Select one of the currently running tasks (a task listed in the sys.dm_os_tasks view with a sessions_id <> NULL), and kill the session associated with it to free up the worker. Observe que talvez não seja suficiente interromper apenas uma sessão: talvez seja necessário interromper várias.Note that it may not be enough to kill a single session: you may have to kill multiple ones.

Porta DACDAC Port

SQL ServerSQL 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 DadosDatabase Engine .listens for the DAC on TCP port 1434 if available or a TCP port dynamically assigned upon Mecanismo de Banco de DadosDatabase Engine startup. O log de erros contém o número da porta que o DAC está escutando.The error log contains the port number the DAC is listening on. Por padrão, a escuta do DAC aceita conexão apenas na porta local.By default the DAC listener accepts connection on only the local port. 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.For a code sample that activates remote administration connections, see remote admin connections Server Configuration Option.

Depois que uma conexão de administração remota for configurada, a escuta do DAC será habilitada sem a necessidade de reiniciar o SQL ServerSQL Server e um cliente poderá se conectar ao DAC remotamente.After the remote administration connection is configured, the DAC listener is enabled without requiring a restart of SQL ServerSQL Server and a client can now connect to the DAC remotely. Você pode habilitar a escuta do DAC para aceitar conexões remotamente, mesmo que o SQL ServerSQL Server não responda durante a primeira conexão com o SQL ServerSQL Server usando o DAC localmente e, em seguida, executar o procedimento armazenado sp_configure para aceitar conexão de conexões remotas.You can enable the DAC listener to accept connections remotely even if SQL ServerSQL Server is unresponsive by first connecting to SQL ServerSQL Server using the DAC locally, and then executing the sp_configure stored procedure to accept connection from remote connections.

Em configurações de cluster, o DAC estará offline, por padrão.On cluster configurations, the DAC will be off by default. 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.Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. Se o SQL ServerSQL Server não estiver respondendo e a escuta do DAC não estiver habilitada, talvez seja necessário reiniciar o SQL ServerSQL Server para se conectar ao DAC.If SQL ServerSQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL ServerSQL Server to connect with the DAC. Dessa forma, recomendamos que você habilite a opção de configuração conexões de administração remotas em sistemas clusterizados.Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.

A porta DAC é atribuída dinamicamente pelo SQL ServerSQL Server durante a inicialização.The DAC port is assigned dynamically by SQL ServerSQL Server during startup. Ao conectar-se à instância padrão, o DAC evita usar uma solicitação do Protocolo de Resolução (SSRP) do SQL ServerSQL Server ao serviço SQL Server Browser.When connecting to the default instance, the DAC avoids using a SQL ServerSQL Server Resolution Protocol (SSRP) request to the SQL Server Browser Service when connecting. Primeiro ele se conecta usando a porta TCP 1434.It first connects over TCP port 1434. Se isso falhar, ele faz uma chamada ao SSRP para obter a porta.If that fails, it makes an SSRP call to get the port. Se o navegador do SQL ServerSQL Server não estiver escutando as solicitações de SSRP, a solicitação de conexão retornará um erro.If SQL ServerSQL Server Browser is not listening for SSRP requests, the connection request returns an error. Consulte o log de erros para localizar o número da porta que o DAC está escutando.Refer to the error log to find the port number DAC is listening on. Se o SQL ServerSQL Server for configurado para aceitar conexões de administração remotas, o DAC deverá ser iniciado com um número de porta explícito:If SQL ServerSQL Server is configured to accept remote administration connections, the DAC must be initiated with an explicit port number:

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

O log de erros do SQL ServerSQL Server lista o número da porta para o DAC, que, por padrão, é 1434.The SQL ServerSQL Server error log lists the port number for the DAC, which is 1434 by default. Se o SQL ServerSQL Server estiver configurado para aceitar apenas conexões DAC locais, conecte usando o adaptador de loopback com o seguinte comando:If SQL ServerSQL Server is configured to accept local DAC connections only, connect using the loopback adapter using the following command:

sqlcmd -S 127.0.0.1,1434sqlcmd -S 127.0.0.1,1434

Dica

Durante a conexão com o Banco de Dados SQL do AzureAzure SQL Database com o DAC, você também deve especificar o nome do banco de dados na cadeia de conexão usando a opção -d.When connecting to the Banco de Dados SQL do AzureAzure SQL Database with the DAC, you must also specify the database name in the connection string by using the -d option.

ExemploExample

Neste exemplo, um administrador nota que o servidor URAN123 não está respondendo e deseja diagnosticar o problema.In this example, an administrator notices that server URAN123 is not responding and wants to diagnose the problem. 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.To do this, the user activates the sqlcmd command prompt utility and connects to server URAN123 using -A to indicate the 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.The administrator can now execute queries to diagnose the problem and possibly terminate the unresponsive sessions.

Um exemplo semelhante de conexão com o Banco de Dados SQLSQL Database usaria o seguinte comando, incluindo o parâmetro -d para especificar o banco de dados:A similar example connecting to Banco de Dados SQLSQL Database would use the following command including the -d parameter to specify the database:

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

Usar sqlcmd com variáveis de scriptUse sqlcmd with Scripting Variables
Utilitário sqlcmdsqlcmd Utility
SELECT (Transact-SQL)SELECT (Transact-SQL)
sp_who (Transact-SQL)sp_who (Transact-SQL)
sp_lock (Transact-SQL)sp_lock (Transact-SQL)
KILL (Transact-SQL)KILL (Transact-SQL)
DBCC CHECKALLOC (Transact-SQL)DBCC CHECKALLOC (Transact-SQL)
DBCC CHECKDB (Transact-SQL)DBCC CHECKDB (Transact-SQL)
DBCC OPENTRAN (Transact-SQL)DBCC OPENTRAN (Transact-SQL)
DBCC INPUTBUFFER (Transact-SQL)DBCC INPUTBUFFER (Transact-SQL)
Opções de configuração do servidor (SQL Server)Server Configuration Options (SQL Server)
Funções e exibições de gerenciamento dinâmico relacionadas à transação (Transact-SQL)Transaction Related Dynamic Management Views and Functions (Transact-SQL)
Sinalizadores de rastreamento (Transact-SQL)Trace Flags (Transact-SQL)