Compartir a través de


Conexión de diagnóstico para administradores de bases de datos

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server proporciona una conexión de diagnóstico especial para los administradores cuando no son posibles las conexiones estándar con el servidor. La conexión de diagnóstico permite a un administrador acceder a SQL Server para ejecutar consultas de diagnóstico y solucionar problemas, incluso cuando SQL Server no responde a las solicitudes de conexión estándar.

Esta conexión de administrador dedicada (DAC) admite la característica de cifrado y otras características de seguridad de SQL Server. La DAC solo permite cambiar el contexto de usuario a otro usuario de administración.

SQL Server realiza todos los intentos de conexión DAC correctamente, pero en situaciones extremas podría no ser correcta.

Conexión con DAC

De forma predeterminada, solo se permite la conexión desde un cliente que se ejecute en el servidor. Las conexiones de red no se permiten a menos que se configuren mediante el procedimiento almacenado con la sp_configure opción de configuración del servidor conexiones de administración remota .

Solo los miembros del rol sysadmin de SQL Server pueden conectarse utilizando la DAC.

La DAC está disponible y permitida a través de la utilidad del símbolo del sistema sqlcmd con un modificador de administrador especial (-A). Para obtener más información sobre el uso sqlcmdde , vea sqlcmd: uso con variables de scripting. También se puede conectar agregando el prefijo admin: al nombre de la instancia en formato sqlcmd -S admin:<instance_name>. También puede iniciar una DAC desde un Editor de consultas de SQL Server Management Studio, conectándose a admin:<instance_name>.

Para establecer una DAC desde SQL Server Management Studio:

  • Desconecte todas las conexiones a la instancia de SQL Server relacionada, incluido el Explorador de objetos y todas las ventanas de consulta abiertas.

  • En el menú, seleccione Archivo > Nuevo > Consulta de motor de base de datos.

  • En el cuadro de diálogo de conexión, escriba admin:<server_name> en el campo Nombre del servidor si usa la instancia predeterminada o admin:<server_name>\<instance_name> si usa una instancia con nombre.

Puerto de la DAC

SQL Server escucha la DAC en el puerto TCP 1434 si está disponible o en un puerto asignado dinámicamente en el inicio de Motor de base de datos. El registro de errores contiene el número de puerto en el que escucha la DAC. De forma predeterminada, la escucha de la DAC solo acepta la conexión en el puerto local. Para ver un ejemplo de código que activa las conexiones de administración remota, consulte Configuración del servidor: conexiones de administrador remoto.

Una vez que se configure la conexión de administración remota, el cliente de escucha de la DAC se habilita sin necesidad de reiniciar SQL Server y ahora un cliente se puede conectar a la DAC de forma remota. Puede habilitar el cliente de escucha de la DAC para que acepte las conexiones de forma remota incluso si SQL Server no responde conectándose primero a SQL Server mediante la DAC de forma local y, después, ejecutando el procedimiento almacenado sp_configure para aceptar la conexión desde conexiones remotas.

En las configuraciones de clúster, la DAC estará desactivada de forma predeterminada. Los usuarios pueden ejecutar la opción remote admin connection de sp_configure para habilitar el cliente de escucha de la DAC a fin de acceder a una conexión remota. Si SQL Server no responde y el cliente de escucha de la DAC no está habilitado, es posible que tenga que reiniciar SQL Server para conectarse a la DAC. Por esta razón, es recomendable que habilite la opción de configuración remote admin connections en los sistemas en clúster.

Durante el inicio, SQL Server asigna dinámicamente el puerto de la DAC. Mientras se establece la conexión a la instancia predeterminada, la DAC evita el uso de una solicitud del protocolo de resolución de SQL Server (SSRP) al servicio SQL Server Browser. Primero se conecta a través del puerto TCP 1434. Si se produce un error, realiza una llamada SSRP para obtener el puerto. Si SQL Server Browser no escucha las solicitudes SSRP, la solicitud de conexión devolverá un error. Consulte el registro de errores para ver en qué número de puerto escucha la DAC. Si SQL Server está configurado para aceptar conexiones de administración remotas, la DAC debe iniciarse con un número de puerto explícito:

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

El registro de errores de SQL Server muestra el número de puerto de la DAC, que es 1434 de forma predeterminada. Si SQL Server está configurado para aceptar solo conexiones DAC locales, conéctese mediante el adaptador de bucles invertidos con el comando siguiente:

sqlcmd -S 127.0.0.1,1434

Limitaciones

Dado que la DAC existe únicamente para el diagnóstico de problemas de servidor en raras circunstancias, hay algunas restricciones en la conexión:

  • Para asegurarse de que haya recursos disponibles para la conexión, solo se permite una DAC por cada instancia de SQL Server. Si ya hay una conexión DAC activa, cualquier solicitud nueva de conexión a través de la DAC se denegará con el error 17810.

  • Para conservar los recursos, SQL Server Express no escucha en el puerto DAC a menos que se inicie con la marca de seguimiento 7806.

  • Inicialmente la DAC intenta conectarse a la base de datos predeterminada asociada al inicio de sesión. Una vez conectado correctamente, puede conectarse a la master base de datos. Si la base de datos predeterminada está sin conexión o no disponible por la razón que sea, la conexión devolverá el error 4060. Pero se realizará correctamente si invalida la base de datos predeterminada para conectarse en su lugar a la base de datos master con el comando siguiente:

    sqlcmd -A -d master
    

    Se recomienda conectarse a la base de datos master con la DAC porque la disponibilidad de master está garantizada si se ha iniciado la instancia de Motor de base de datos.

  • SQL Server prohíbe la ejecución de comandos o consultas paralelas con la DAC. Por ejemplo, se genera el error 3637 si se ejecuta una de las instrucciones siguientes con la DAC:

    • RESTORE...
    • BACKUP...
  • Con la DAC solo está garantizada la disponibilidad de recursos limitados. No use la DAC para ejecutar consultas o consultas con un uso intensivo de recursos que puedan bloquear otras consultas. Así se evita que la DAC agrave cualquier problema de servidor ya existente. Para evitar posibles escenarios de bloqueo, si tiene que ejecutar consultas que podrían bloquearse, ejecute la consulta en niveles de aislamiento basados en instantáneas si es posible; De lo contrario, establezca el nivel READ UNCOMMITTED de aislamiento de transacción en y establezca el LOCK_TIMEOUT valor en un valor corto, como 2000 milisegundos, o ambos. Esto evitará que la sesión de la DAC se bloquee. Sin embargo, dependiendo del estado en el que esté SQL Server , puede ser que la sesión de la DAC se bloquee en un bloqueo temporal. Es posible que pueda finalizar la sesión de la DAC mediante CTRL+C, pero esto no está garantizado. En ese caso, es posible que la única opción sea reiniciar SQL Server.

  • Para asegurarse de la conectividad y la solución de problemas con la DAC, SQL Server reserva recursos limitados para procesar los comandos ejecutados en la DAC. Estos recursos solo suelen ser suficientes para funciones sencillas de diagnóstico y solución de problemas, como las que se mencionan más adelante.

Aunque teóricamente es posible ejecutar cualquier instrucción Transact-SQL que no se tenga que ejecutar en paralelo en la DAC, se recomienda encarecidamente limitar el uso a los siguientes comandos de diagnóstico y solución de problemas:

  • Consultas en vistas de administración dinámica para diagnósticos básicos, como sys.dm_tran_locks para el estado de bloqueo, sys.dm_os_memory_cache_counters para comprobar el estado de las cachés, y sys.dm_exec_requests y sys.dm_exec_sessions para solicitudes y sesiones activas. Evite las vistas de administración dinámica que consumen muchos recursos (por ejemplo, sys.dm_tran_version_store examina el almacén de versiones completo y puede causar numerosas E/S) o que usan combinaciones complejas. Para obtener información acerca de las implicaciones para el rendimiento, vea la documentación específica para la vista de administración dinámica.

  • Consultas en vistas de catálogo.

  • Comandos DBCC básicos como DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS y DBCC SQLPERF. Evite comandos que consumen muchos recursos, como DBCC CHECKDB, DBCC DBREINDEX o DBCC SHRINKDATABASE.

  • Comando KILL <spid> de Transact-SQL. Según el estado de SQL Server, es posible que el KILL comando no se realice correctamente. La única opción podría ser reiniciar la instancia, en el caso de SQL Server o Instancia administrada de Azure SQL. Éstas son algunas directrices generales:

    • Para comprobar que se ha eliminado el SPID, consulte SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>;. Si no devuelve ninguna fila, significa que la sesión se ha eliminado.

    • Si la sesión todavía existe, compruebe si hay tareas asignadas a esta sesión ejecutando la consulta SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>;. Si ve la tarea, lo más probable es que se esté eliminando la sesión ahora. Esto puede tardar mucho tiempo y es posible que no se realice correctamente.

    • Si no hay ninguna tarea en la sys.dm_os_tasks asociada a esta sesión, pero la sesión permanece en sys.dm_exec_sessions después de ejecutar el KILL comando, significa que no tiene ningún trabajo disponible. Seleccione una de las tareas que se están ejecutando actualmente (una tarea que aparece en la sys.dm_os_tasks vista con un sessions_id <> NULL) y elimine la sesión asociada para liberar el trabajo. Es posible que no sea suficiente para matar una sola sesión: es posible que tenga que matar a varios.

Limitación en Azure SQL Database

Al conectarse a Azure SQL Database con la DAC, también debe especificar el nombre de la base de datos en la cadena de conexión por medio de la opción -d.

Limitación en Azure SQL Managed Instance

La DAC no funciona a través de un punto de conexión privado para Azure SQL Managed Instance. En las instancias administradas de SQL, la DAC escucha en el puerto 1434. Dado que los puntos de conexión privados a instancias administradas de SQL solo permiten conexiones en el puerto 1433, no se puede usar un punto de conexión privado para establecer una conexión DAC. Debe estar en la misma red virtual que la instancia administrada de SQL para conectarse con DAC.

Examples

En este ejemplo, un administrador observa que el servidor contoso-server no responde y quiere diagnosticar el problema. Para ello, el usuario activa la utilidad del símbolo del sistema sqlcmd y se conecta al servidor contoso-server mediante -A para indicar la DAC.

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

Ahora el administrador puede ejecutar consultas para diagnosticar el problema y posiblemente finalizar las sesiones que no responden.

Un ejemplo similar al que se conecta a SQL Database usaría el siguiente comando, incluido el -d parámetro para especificar la base de datos:

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