Recentemente em um treinamento sobre troubleshooting, falei sobre como acessar o servidor através do DAC – Dedicated Admin Connection. Para minha surpresa, a maioria não sabia o que era e os que já haviam habilitado não sabiam como funcionava.
O DAC foi introduzido no SQL Server 2005 e é nossa principal forma de acesso quando o SO ou mesmo o SQL Server estiverem “engargalados”.
De maneira bem simples, o DAC troca o contexto para conexão de administrador e aumenta a prioridade ao acesso dos recursos.
“Ah, mas eu não consigo acessar a console do meu servidor porque está tudo travado”.
Não tem problema é possível habilitar o acesso remoto.
Como Funciona?
O DAC trabalha com um scheduler reservado, ou seja, o SQL Server deixa sempre uma janela aberta caso algo aconteça. Este é o acesso privilegiado e reservado para manutenções.
Antes de seguir é importante deixar claro que prioridade só existe para um, para mais deixa de ser prioridade, logo este é um recurso que deve ser utilizado como privilégio e apenas para recuperar o sistema em caso de falha.
Como Usar?
Como citado anteriormente, o acesso de administrator já é habilitado por padrão para conexões locais. Para conexões remotas é necessário habilitar o parâmetro “Remote Admin Connections”.
O código para habilitar segue abaixo:
EXEC sp_configure 'remote admin connections', 1; GO RECONFIGURE GO
Para conectar como DAC
SQLCMD:
SSMS :
Basta colocar o Admin: na frente do usuário.
Considerações
1: Verifique o firewall. De nada adianta liberar o acesso dedicado de administrador, se não for possível passar pelo firewall;
2: Só pode haver uma conexão dedicada acessando;
3: Quando conectar pelo SSMS o Object Explorer não irá carregar;
4: A conexão que estiver utilizando o privilégio dedicado de administrador não pode ser dropado;
5: Para descobrir quem está utilizando esta sessão, costumo utilizar a query abaixo que é um join da sys.endepoints como a sys.dm_exec_connections.
select C.session_id, C.connect_time, C.last_read, C.last_write, C.client_net_address from sys.endpoints E inner join sys.dm_exec_connections C on e.endpoint_id = c.endpoint_id where e.is_admin_endpoint = 1
Concluindo, espero ter colaborado em momentos de troubleshooting, ou melhor, que este post seja lido antes de precisar para lembrar de habilitar o acesso.
Abraço, Rodrigo
PS. Em 31/5/2016 o colega Tiago Neves postou em seu blog um post com o mesmo conteúdo. Recomendo a leitura do post dele no link.
Republicou isso em Alex Souza.