IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Apprendre à utiliser la Connexion Administrateur Dédiée DAC sous SQL Server,
Un tutoriel de Hmira

Le , par hmira

0PARTAGES

I - Préambule

Dans les situations critiques, extrêmes, lorsque, pour diverses raisons, par exemple un manque total de ressources disponibles, les connexions standards au Serveur deviennent impossibles, le DAC (Dedicated Administrator Connection) ou en français, plus clair, Connexion Administrateur Dédiée, prend toute son importance et devient un élément vital pour l’administrateur de bases de données.

Malheureusement, il n’est pas rare, que certains administrateurs, négligent l’importance du DAC, voire ignorent complètement son existence et ses fonctionnalités !

Dans les circonstances critiques, le DAC devient parfois la seule connexion permettant aux administrateurs de bases de données d'accéder à SQL Server pour exécuter des requêtes de diagnostic ainsi que d’autres requêtes de dépannage, comme mettre fin à une connexion gênante, bloquante. Dans ces circonstances critiques, le but ultime est de résoudre les problèmes et de débloquer la situation le plus rapidement possible.

Un autre point aussi important et crucial concernant le DAC, est d’autoriser les connexions à distance à utiliser la connexion administrateur dédiée (DAC). En effet, par défaut, cette connexion (DAC) n'est disponible qu'à partir d'un client sur le serveur lui-même (IP : 127.0.0.1), et comme dans les situations critiques, il y a de fortes chances qu’un accès TSE au Serveur devienne lui aussi impossible ! Il est primordial d’être prévoyant et d’anticiper les problèmes, et ce, en autorisant, bien avant, lorsque tout fonctionne normalement, les connexions à distance d’utiliser le DAC. Parce qu’en cas de problème grave, lorsque la situation devient critique, il y a de fortes chances, que vous ne puissiez plus le faire, vous seriez peut-être même dans l’impossibilité d’accéder au serveur ! C’est donc pour apporter une solution à ces situations critiques particulières que le DAC existe.

II - Autoriser les connexions à distance à utiliser la connexion administrateur dédiée (DAC)


Pour activer le DAC pour les connexions à distance, il suffit d’exécuter le bloc de code T-SQL ci-dessous :

Code SQL : Sélectionner tout
1
2
3
4
EXEC sp_configure 'remote admin connections', 1; 
GO 
RECONFIGURE 
GO

Remarque
- Une fois que vous aurez exécuté la commande ci-dessus, je vous suggère de consulter le journal des erreurs de SQL Server, vous verrez des messages d’informations comme ceux indiqués dans l’exemple ci-dessous :



- Vous remarquerez que SQL Server, pour la connexion administrateur dédié (DAC), écoute désormais sur un nouveau port dédié, dans notre exemple il s’agit du port n° 61148. Ce numéro de port est attribué dynamiquement par SQL Server. À ce stade, l'écouteur DAC est donc activé, et ce, sans nécessiter un redémarrage de SQL Server.

- La connaissance de ce n° de port d’écoute des connexions DAC à distance, dans notre exemple n° 61148, n’est pas indispensable pour établir une connexion DAC. Nous verrons plus loin comment établir une connexion DAC sans préciser le numéro de port.

III - Comment utiliser la connexion administrateur dédiée (DAC)

Vous pouvez utiliser le DAC soit depuis SSMS, soit depuis l’outil en ligne de commande sqlcmd
Notez que, quel que soit le moyen que vous utiliseriez pour la connexion DAC, une et une seule connexion DAC est autorisée par instance. Donc une connexion DAC doit d’abord être terminée (disconnect) pour permettre à une autre connexion d’utiliser le DAC.

III-1 Utiliser le DAC depuis SSMS

Comme cela a été rappelé ci-dessus, une et une seule connexion peut utiliser le DAC. Évitez donc d’utiliser une connexion DAC pour l’explorateur d’objets sous SSMS. Sinon, vous ne pourrez plus ouvrir une nouvelle connexion DAC pour diagnostiquer et corriger les problèmes !

Sous SSMS procédez comme suit :

- sélectionnez le menu :
Fichier > Nouveau > Requête de moteur de base de données ;
- dans la boite de dialogue connexion, préfixez juste le nom du Serveur par : ADMIN: (le mot ADMIN suivi du signe ':' ). Les autres informations de connexion restent inchangées.

Exemple :
Nom du Serveur : ADMIN:SRV005\SQL2012
Authentification : Authentification SQL Server
Connexion : FriedrichNietzsche
Mot de passe : *******



Remarque : en cas d’erreur, effectuez les vérifications décrites dans le paragraphe, plus loin dans cet article,
« IV - Vérifier les autres prérequis pour le DAC »

III-2 Utiliser le DAC en ligne de commande depuis sqlcmd

Vous pouvez aussi établir une connexion DAC en utilisant l’outil sqlcmd en ligne de commande. Il suffit pour cela de spécifier le drapeau -A

Exemple :

>sqlcmd -SSRV005\SQL2012 –E –A



Vous pouvez par exemple mettre fin à une session que vous auriez identifiée comme « gênante ».

> kill 54 ;
> Go

Ci-dessous un exemple complet d’utilisation :

Code SQLCMD : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
c:\Windows\system32>sqlcmd -S SSRV005\SQL2012 -E -A 
1> SELECT CASE 
2>      WHEN exs.session_id= @@SPID THEN 'C''est moi-même ! ' 
3>      ELSE '' 
4>     END + coalesce(exs.login_name,'Je ne sais qui ?') as ConnexionDAC 
5> , exs.session_id 
6> , exs.login_time 
7> , exs.status 
8> , exs.original_login_name 
9> from sys.endpoints as edp with (nolock) 
10> join sys.dm_exec_sessions exs with (nolock) 
11> on edp.endpoint_id = exs.endpoint_id 
12> where edp.name='Dedicated Admin Connection'; 
13> go 
ConnexionDAC 
                                 session_id log 
in_time       status             original_login_name 
 
 
-------------------------------------------------------------------------------- 
----------------------------------------------------------------- ---------- --- 
-------------------- ------------------------------ ---------------------------- 
-------------------------------------------------------------------------------- 
-------------------- 
C'est moi-même ! FriedrichNietzsche 
                                     51 201 
6-07-20 10:08:31.003 running            FriedrichNietzsche 
 
 
 
(1 lignes affectées) 
1> kill 54; 
2> go 
1> exit 
c:\Windows\system32>

Remarque : en cas d’erreur, effectuez les vérifications décrites dans le paragraphe, plus loin dans cet article,
« IV - Vérifier les autres prérequis pour le DAC »

IV - Vérifier les autres prérequis pour le DAC

Parmi les prérequis pour le bon fonctionnement des connexions DAC, je cite au moins quatre points importants :

1 - la connexion utilisée pour le DAC doit être membre du rôle fixe du Serveur sysadmin ;

2 - le service SQL Server Browser doit être démarré. Assurez-vous donc que le service SQL Server Browser, celui du Serveur, est en cours d’exécution, et le cas échant, s’il est arrêté, lancez-le.

Si le Service SQL Server Browser est arrêté, toute tentative de connexion administrateur dédié (DAC) est vouée à l’échec, et générera une erreur tel qu’indiqué dans la copie-écran ci-dessous :



3 - vérifiez qu’il n’y a pas une autre connexion DAC en cours. En effet, comme mentionné ci-dessus, pour une instance donnée, une et une seule connexion DAC peut être établie. Si une connexion DAC est déjà établie par quelqu’un d’autre, toute tentative d’une deuxième connexion DAC est vouée à l’échec. Vous obtiendrez un message d’erreur, pas très explicite ! Comme le montre la copie-écran ci-dessous :



Pour connaitre quelle connexion utilise actuellement le DAC, vous pouvez vous servir de la requête SQL ci-dessous. Elle permet d’afficher le numéro de session (Session_id) utilisant le DAC. Si aucune session n’utilise le DAC la requête ne retourne aucune ligne.

Code SQL : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
SELECT CASE  
     WHEN exs.session_id= @@SPID THEN 'C''est moi-même ! ' 
     ELSE ''  
	  END + coalesce(exs.login_name,'Je ne sais qui ?') as ConnexionDAC 
, exs.session_id 
, exs.login_time 
, exs.status 
, exs.original_login_name  
from sys.endpoints as edp with (nolock)  
join sys.dm_exec_sessions exs with (nolock)  
on edp.endpoint_id = exs.endpoint_id 
where edp.name='Dedicated Admin Connection'

4 - il n'y a que peu de restrictions sur les instructions SQL qui peuvent être exécutées au travers une connexion DAC. Par exemple, vous ne pourrez pas exécuter des requêtes parallélisées ou certaines commandes, comme BACKUP ou RESTORE en utilisant le DAC. N’oubliez pas qu’il est par ailleurs fortement recommandé, sous une connexion DAC, de ne pas exécuter des requêtes gourmandes en ressources qui pourraient aggraver le problème qui vous a amené à utiliser le DAC. La connexion DAC doit être réservée principalement pour le dépannage et le diagnostic.

Remarque

- Notez enfin que la mise en œuvre des connexions DAC ne nécessite aucun redémarrage de l‘instance SQL Server.

- La connexion DAC n’est toutefois pas garantie à 100 % pour être toujours utilisable, mais comme le DAC utilise de la mémoire qui lui est proprement réservée, et est doté d’un planificateur (scheduler) privé et implémenté comme un nœud séparé, etc. votre connexion DAC a de très grandes chances d’aboutir alors même que les connexions standard, classiques, deviennent impossibles.

A+

Hamid MIRA

Une erreur dans cette actualité ? Signalez-nous-la !