Connexion de diagnostic pour les administrateurs de base de donnéesDiagnostic Connection for Database Administrators

Cette rubrique s’applique à : OuiSQL Serveraucunbase de données SQL AzureaucunAzure SQL Data Warehouse aucun Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse SQL ServerSQL Server fournit aux administrateurs une connexion de diagnostic spéciale lorsque des connexions standard au serveur sont impossibles. SQL ServerSQL Server provides a special diagnostic connection for administrators when standard connections to the server are not possible. Cette connexion de diagnostic permet aux administrateurs d'accéder à SQL ServerSQL Server pour exécuter des requêtes de diagnostic et résoudre des problèmes, même lorsque SQL ServerSQL Server ne répond pas à des demandes de connexion standard.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.

Cette connexion administrateur dédiée (DAC) prend en charge le chiffrement et d'autres fonctions de sécurité de SQL ServerSQL Server.This dedicated administrator connection (DAC) supports encryption and other security features of SQL ServerSQL Server. Elle permet uniquement de changer de contexte utilisateur pour un autre administrateur.The DAC only allows changing the user context to another admin user.

SQL ServerSQL Server effectue chaque tentative pour établir la connexion DAC, mais cela peut échouer dans des situations extrêmes. makes every attempt to make DAC connect successfully, but under extreme situations it may not be successful.

S’applique à : SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 via SQL Server 2017SQL Server 2017), Base de données SQLSQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017), Base de données SQLSQL Database.

Connexion avec DACConnecting with DAC

Par défaut, la connexion est uniquement autorisée à partir d'un client s'exécutant sur le serveur.By default, the connection is only allowed from a client running on the server. Les connexions réseau sont autorisées uniquement si elles sont configurées en utilisant la procédure stockée sp_configure avec l’option remote admin connections.Network connections are not permitted unless they are configured by using the sp_configure stored procedure with the remote admin connections option.

Seuls les membres du rôle administrateur système SQL ServerSQL Server peuvent se connecter à l'aide de la connexion DAC.Only members of the SQL ServerSQL Server sysadmin role can connect using the DAC.

La connexion DAC est disponible et prise en charge par le biais de l’utilitaire d’invite de commandes sqlcmd , au moyen d’un commutateur d’administrateur spécial (-A).The DAC is available and supported through the sqlcmd command-prompt utility using a special administrator switch (-A). Pour plus d’informations sur l’utilisation de sqlcmd, consultez Utiliser sqlcmd avec des variables de script.For more information about using sqlcmd, see Use sqlcmd with Scripting Variables. Vous pouvez également vous connecter en ajoutant le préfixe admin: au nom de l’instance, selon le format sqlcmd -S admin:<nom_instance>. Vous pouvez également lancer une session DAC à partir d’un éditeur de requête SQL Server Management StudioSQL Server Management Studio via une connexion à admin:<nom_instance>.You can also connect prefixing admin: to the instance name in the format sqlcmd -S 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>.

RestrictionsRestrictions

Comme la connexion DAC n'est prévue que pour diagnostiquer des problèmes de serveur dans de rares circonstances, certaines restrictions sont imposées sur la connexion :Because the DAC exists solely for diagnosing server problems in rare circumstances, there are some restrictions on the connection:

  • Pour garantir que des ressources sont disponibles pour la connexion, une seule connexion DAC est autorisée par instance de SQL ServerSQL Server.To guarantee that there are resources available for the connection, only one DAC is allowed per instance of SQL ServerSQL Server. Si une connexion DAC est déjà active, toute nouvelle demande de connexion établie par son intermédiaire est refusée avec l'erreur 17810.If a DAC connection is already active, any new request to connect through the DAC is denied with error 17810.

  • Pour préserver les ressources, SQL Server ExpressSQL Server Express n'écoute pas le port DAC à moins qu'il soit démarré avec l'indicateur de trace 7806.To conserve resources, SQL Server ExpressSQL Server Express does not listen on the DAC port unless started with a trace flag 7806.

  • Au départ, la connexion DAC tente une connexion à la base de données par défaut associée à la connexion.The DAC initially attempts to connect to the default database associated with the login. Une fois la connexion établie, vous pouvez vous connecter à la base de données master.After it is successfully connected, you can connect to the master database. Si la base de données par défaut est hors connexion ou non disponible pour une raison quelconque, la connexion retourne l'erreur 4060.If the default database is offline or otherwise not available, the connection will return error 4060. Cependant, elle réussit si vous remplacez la base de données par défaut pour vous connecter à la base de données master au lieu d'utiliser la commande suivante :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

    Nous vous conseillons de vous connecter à la base de données master avec la connexion DAC, car la disponibilité de la base de données master est garantie en cas de démarrage de l’instance du Moteur de base de donnéesDatabase Engine .We recommend that you connect to the master database with the DAC because master is guaranteed to be available if the instance of the Moteur de base de donnéesDatabase Engine is started.

  • SQL ServerSQL Server interdit l'exécution de requêtes ou de commandes parallèles avec la connexion DAC. prohibits running parallel queries or commands with the DAC. Par exemple, l'erreur 3637 est générée si vous exécutez l'une des instructions ci-dessous avec la connexion DAC :For example, error 3637 is generated if you execute either of the following statements with the DAC:

    • RESTORERESTORE

    • BACKUPBACKUP

  • Seules des ressources limitées sont garanties disponibles avec la connexion DAC.Only limited resources are guaranteed to be available with the DAC. N'utilisez pas la connexion DAC pour exécuter des requêtes à utilisation intensive des ressources (par exemple,Do not use the DAC to run resource-intensive queries (for example. une jointure complexe sur une grande table) ou des requêtes pouvant créer des blocages.a complex join on large table) or queries that may block. Cela permet d'éviter que la connexion DAC n'amplifie d'éventuels problèmes de serveur existants.This helps prevent the DAC from compounding any existing server problems. Pour éviter les scénarios de blocages potentiels, si vous devez exécuter des requêtes pouvant créer un blocage, exécutez la requête sous des niveaux d'isolement basés si possible sur un instantané ; sinon, réglez le niveau d'isolement des transactions à READ UNCOMMITTED et attribuez à LOCK_TIMEOUT une valeur faible, par exemple 2 000 millisecondes, ou les deux.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. Vous éviterez ainsi le blocage de la session DAC.This will prevent the DAC session from getting blocked. Cependant, selon l'état de SQL ServerSQL Server , la session DAC pourrait se bloquer sur un verrou.However, depending on the state that the SQL ServerSQL Server is in, the DAC session might get blocked on a latch. La session DAC peut éventuellement être terminée avec Ctrl+C, mais ceci n’est pas garanti.You might be able to terminate the DAC session using CTRL-C but it is not guaranteed. Dans ce cas, la seule option consiste à redémarrer SQL ServerSQL Server.In that case, your only option may be to restart SQL ServerSQL Server.

  • Pour garantir la connectivité et le dépannage avec la connexion DAC, SQL ServerSQL Server réserve des ressources limitées pour traiter les commandes exécutées sur la connexion DAC.To guarantee connectivity and troubleshooting with the DAC, SQL ServerSQL Server reserves limited resources to process commands run on the DAC. Ces ressources ne permettent généralement que de simples fonctions de diagnostic et de dépannage, telles que celles répertoriées ci-dessous.These resources are typically only enough for simple diagnostic and troubleshooting functions, such as those listed below.

    Même si vous pouvez théoriquement exécuter toute instruction Transact-SQLTransact-SQL qui ne doit pas nécessairement être exécutée en parallèle sur la connexion DAC, nous vous recommandons instamment de n'utiliser que les commandes de diagnostic et de dépannage suivantes :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:

  • Interrogation de vues de gestion dynamique (DMV) pour des diagnostics de base, comme sys.dm_tran_locks pour l’état de verrouillage, sys.dm_os_memory_cache_counters pour vérifier l’état des caches, et sys.dm_exec_requests et sys.dm_exec_sessions pour les sessions et les demandes actives.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. Évitez les vues de gestion dynamiques qui consomment beaucoup de ressources (par exemple, sys.dm_tran_version_store analyse le magasin de versions complet et peut provoquer des E/S intensives) ou qui utilisent des jointures complexes.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. Pour plus d'informations sur les implications sur les performances, consultez la documentation relative à la vue de gestion dynamiquespécifique.For information about performance implications, see the documentation for the specific dynamic management view.

  • Interrogation d'affichages catalogue.Querying catalog views.

  • Les commandes DBCC de base, comme DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS et DBCC SQLPERF.Basic DBCC commands such as DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, and DBCC SQLPERF. Évitez d’exécuter des commandes consommant beaucoup de ressources, comme DBCC CHECKDB, DBCC DBREINDEX ou DBCC SHRINKDATABASE.Do not run resource-intensive commands such as DBCC CHECKDB, DBCC DBREINDEX, or DBCC SHRINKDATABASE.

  • Commande Transact-SQLTransact-SQL KILL<spid>. Transact-SQLTransact-SQL KILL<spid> command. Selon l'état de SQL ServerSQL Server, la commande KILL risque de ne pas toujours aboutir ; dans ce cas, la seule option consiste à redémarrer 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. Voici quelques directives générales :The following are some general guidelines:

    • Vérifiez que le SPID a été supprimé en interrogeant 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>. S'il ne retourne aucune ligne, la session a été supprimée.If it returns no rows, it means the session was killed.

    • Si la session est toujours active, vérifiez si des tâches sont affectées à cette session en exécutant la requête 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>. Si vous y voyez la tâche, votre session est très probablement en cours de fermeture.If you see the task there, most likely your session is currently being killed. Notez que cette opération peut prendre beaucoup de temps et risque même d'échouer.Note that this may take considerable amount of time and may not succeed at all.

    • En l'absence de tâches dans le sys.dm_os_tasks associé à cette session, mais si la session est maintenue dans sys.dm_exec_sessions après l'exécution de la commande KILL, vous ne disposez d'aucun thread de travail.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. Sélectionnez l'une des tâches en cours d'exécution (une tâche répertoriée dans la vue sys.dm_os_tasks avec un sessions_id <> NULL), puis supprimez la session qui lui est associée pour libérer le thread de travail.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. Notez que la suppression d'une session unique ne sera peut-être pas suffisante : vous devrez éventuellement en supprimer plusieurs.Note that it may not be enough to kill a single session: you may have to kill multiple ones.

Port DACDAC Port

SQL ServerSQL Server est à l'écoute de la connexion DAC sur le port TCP 1434 s'il est disponible ou un port TCP attribué dynamiquement lors du démarrage du Moteur de base de donnéesDatabase Engine . listens for the DAC on TCP port 1434 if available or a TCP port dynamically assigned upon Moteur de base de donnéesDatabase Engine startup. Le journal des erreurs contient le numéro de port sur lequel la connexion DAC écoute.The error log contains the port number the DAC is listening on. Par défaut, l'écouteur DAC n'accepte une connexion que sur le port local.By default the DAC listener accepts connection on only the local port. Pour voir un exemple de code qui active des connexions d’administration à distance, consultez remote admin connections (option de configuration de serveur).For a code sample that activates remote administration connections, see remote admin connections Server Configuration Option.

Une fois que la connexion d'administration distante est configurée, l'écouteur DAC est activé sans nécessiter un redémarrage de SQL ServerSQL Server ; un client peut maintenant se connecter à la DAC à distance.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. Vous pouvez permettre à l'écouteur DAC d'accepter des connexions à distance même si SQL ServerSQL Server ne répond pas en vous connectant d'abord à SQL ServerSQL Server en utilisant la DAC localement, et en exécutant ensuite la procédure stockée sp_configure pour accepter la connexion à partir de connexions distantes.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.

Sur les configurations cluster, la connexion DAC est désactivée par défaut.On cluster configurations, the DAC will be off by default. Les utilisateurs peuvent exécuter l'option remote admin connection de sp_configure pour permettre à l'écouteur DAC d'accéder à une connexion distante.Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. Si SQL ServerSQL Server ne répond pas et si l'écouteur DAC n'est pas activé, vous risquez de devoir redémarrer SQL ServerSQL Server pour établir une connexion avec la 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. Nous recommandons par conséquent d'activer l'option de configuration remote admin connections sur les systèmes en cluster.Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.

Le port DAC est affecté dynamiquement par SQL ServerSQL Server pendant le démarrage.The DAC port is assigned dynamically by SQL ServerSQL Server during startup. Lors d’une connexion à l’instance par défaut, la DAC évite d’utiliser une demande SSRP ( SQL ServerSQL Server Resolution Protocol) à SQL Server Browser Service lors de la connexion.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. Elle se connecte d'abord sur le port TCP 1434.It first connects over TCP port 1434. Si cette tentative échoue, elle effectue un appel SSRP pour obtenir le port.If that fails, it makes an SSRP call to get the port. Si SQL ServerSQL Server Browser n'écoute pas les demandes SSRP, la demande de connexion retourne une erreur.If SQL ServerSQL Server Browser is not listening for SSRP requests, the connection request returns an error. Reportez-vous au journal des erreurs pour trouver le numéro de port que la DAC écoute.Refer to the error log to find the port number DAC is listening on. Si SQL ServerSQL Server est configuré pour accepter les connexions d'administration distante, la DAC doit être initialisée avec un numéro de port explicite :If SQL ServerSQL Server is configured to accept remote administration connections, the DAC must be initiated with an explicit port number:

sqlcmd –S tcp:<serveur>,<port>sqlcmd –S tcp:<server>,<port>

Le journal des erreurs de SQL ServerSQL Server indique le numéro de port de la connexion DAC, qui est 1434 par défaut.The SQL ServerSQL Server error log lists the port number for the DAC, which is 1434 by default. Si SQL ServerSQL Server est configuré pour accepter uniquement des connexions DAC locales, connectez-vous au moyen de l'adaptateur de bouclage en utilisant la commande suivante :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

Conseil

Lors de la connexion à Azure SQL DatabaseAzure SQL Database via une connexion DAC, vous devez également spécifier le nom de la base de données dans la chaîne de connexion, à l’aide de l’option -d.When connecting to the Azure SQL DatabaseAzure SQL Database with the DAC, you must also specify the database name in the connection string by using the -d option.

ExempleExample

Dans cet exemple, un administrateur note que le serveur URAN123 ne répond pas et souhaite diagnostiquer le problème.In this example, an administrator notices that server URAN123 is not responding and wants to diagnose the problem. Pour ce faire, l'utilisateur active l'utilitaire de ligne de commande sqlcmd et se connecte au serveur URAN123 en utilisant -A pour indiquer la connexion 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

L'administrateur peut maintenant exécuter des requêtes pour diagnostiquer le problème et éventuellement terminer les sessions sans réponse.The administrator can now execute queries to diagnose the problem and possibly terminate the unresponsive sessions.

Un exemple similaire de connexion à Base de données SQLSQL Database repose sur l’utilisation de la commande suivante, qui inclut le paramètre -d pour spécifier la base de données :A similar example connecting to Base de données 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

Utiliser sqlcmd avec des variables de scriptUse sqlcmd with Scripting Variables
Utilitaire 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)
Options de configuration de serveur (SQL Server)Server Configuration Options (SQL Server)
Fonctions et vues de gestion dynamique relatives aux transactions (Transact-SQL)Transaction Related Dynamic Management Views and Functions (Transact-SQL)
Indicateurs de trace (Transact-SQL)Trace Flags (Transact-SQL)