Diagnoseverbindung für Datenbankadministratoren

SQL Server stellt eine spezielle Diagnoseverbindung für Administratoren bereit, wenn Standardverbindungen zum Server nicht möglich sind. Mit dieser Diagnoseverbindung kann ein Administrator auf SQL Server zugreifen, um Diagnoseabfragen auszuführen und Probleme zu behandeln, auch wenn SQL Server auf Anforderungen von Standardverbindungen nicht antwortet.

Diese dedizierte Administratorverbindung unterstützt die Verschlüsselung und andere Sicherheitsfunktionen von SQL Server. Die DAC lässt den Wechsel des Benutzerkontexts ausschließlich in den eines anderen Administrators zu.

SQL Server versucht alles, damit die DAC eine Verbindung erfolgreich herstellt, doch unter extremen Bedingungen kann möglicherweise keine Verbindung hergestellt werden.

Herstellen einer dedizierten Administratorverbindung

Standardmäßig ist die Verbindung nur von einem Client aus zulässig, der auf dem Server ausgeführt wird. Netzwerkverbindungen sind nur dann zulässig, wenn sie mithilfe der gespeicherten Prozedur sp_configure mit der Option remote admin connections konfiguriert wurden.

Nur Mitglieder der SQL Server sysadmin-Rolle können Verbindungen mithilfe der DAC herstellen.

Die DAC steht über das sqlcmd -Eingabeaufforderungs-Hilfsprogramm mit einem speziellen Administratorschalter (-A) zur Verfügung und wird von diesem unterstützt. Weitere Informationen zum Verwenden von sqlcmd finden Sie unter Verwenden von sqlcmd mit Skriptvariablen. Sie können auch eine Verbindung herstellen, indem Sie admin: dem Instanznamen voranstellen, und zwar im Format sqlcmd -Sadmin:<instance_name>. Sie können außerdem eine DAC aus einem SQL Server Management Studio-Abfrage-Editor initialisieren, indem Sie eine Verbindung mit admin:<instance_name> herstellen.

Einschränkungen

Da die DAC nur zum Diagnostizieren von Serverproblemen in seltenen Fällen gedacht ist, bestehen einige Einschränkungen für die Verbindung:

  • Um sicherzustellen, dass Ressourcen für die Verbindung verfügbar sind, ist nur eine DAC pro Instanz von SQL Server zulässig. Ist bereits eine dedizierte Administratorverbindung aktiv, wird jede weitere Anforderung einer Verbindung über DAC mit Fehler 17810 abgelehnt.

  • Zur Einsparung von Ressourcen lauscht SQL Server Express am DAC-Port nur dann, wenn beim Starten das Ablaufverfolgungsflag 7806 angegeben wird.

  • Die DAC versucht zunächst, eine Verbindung zu der Standarddatenbank herzustellen, die dem Anmeldenamen zugeordnet ist. Nach erfolgreichem Verbindungsaufbau können Sie eine Verbindung mit der master-Datenbank herstellen. Wenn die Standarddatenbank offline oder aus anderen Gründen nicht verfügbar ist, wird von der Verbindung der Fehler 4060 zurückgegeben. Die Verbindung kann jedoch hergestellt werden, wenn Sie die Standarddatenbank überschreiben und stattdessen mithilfe des folgenden Befehls eine Verbindung mit der master-Datenbank herstellen:

    sqlcmd –A –d master

    Es wird empfohlen, die DAC mit der master-Datenbank herzustellen, da die master-Datenbank sicher verfügbar ist, wenn die Instanz von Database Engine (Datenbankmodul) gestartet wird.

  • SQL Server verhindert die Ausführung paralleler Abfragen oder Befehle über die DAC. So wird beispielsweise Fehler 3637 generiert, wenn Sie eine der folgenden Anweisungen über die DAC ausführen:

    • RESTORE

    • BACKUP

  • Bei einer DAC ist nur die Verfügbarkeit beschränkter Ressourcen sichergestellt. Führen Sie über die DAC keine ressourcenintensiven Abfragen (z. B. eine komplexe Verknüpfung in einer großen Tabelle) oder Abfragen aus, die eine Blockierung verursachen können. Dies trägt dazu bei, zu verhindern, dass vorhandene Serverprobleme durch die DAC verstärkt werden. Zur Vermeidung möglicher Blockierungssituationen müssen Sie ggf. Abfragen, die eine Blockierung verursachen können, möglichst auf momentaufnahmebasierten Isolationsstufen ausführen. Ist dies nicht möglich, sollten Sie die Transaktionsisolationsstufe auf READ UNCOMMITTED festlegen und/oder den LOCK_TIMEOUT-Wert auf eine kurze Zeitspanne, beispielsweise 2000 Millisekunden, festlegen. Dies verhindert, dass die DAC-Sitzung blockiert wird. Abhängig vom Status von SQL Server kann die DAC-Sitzung jedoch durch ein Latch blockiert werden. Möglicherweise können Sie die DAC-Sitzung mit STRG-C beenden, dies ist jedoch nicht sichergestellt. In diesem Fall ist unter Umständen der Neustart von SQL Server unumgänglich.

  • Um die Konnektivität und die Problembehandlung mit der DAC sicherzustellen, reserviert SQL Server beschränkte Ressourcen für die Verarbeitung von Befehlen, die in der DAC ausgeführt werden. Diese Ressourcen sind in der Regel nur für einfache Diagnose- und Problembehandlungsfunktionen wie die unten aufgeführten ausreichend.

Obwohl Sie über die DAC theoretisch jede Transact-SQL-Anweisung ausführen können, die nicht parallel ausgeführt werden muss, wird dringend empfohlen, nur die folgenden Diagnose- und Problembehandlungsbefehle zu verwenden:

  • Beim Abfragen von dynamischen Verwaltungssichten für die grundlegende Diagnose, z. B. sys.dm_tran_locks für den Sperrstatus, sys.dm_os_memory_cache_counters zum Überprüfen des Zustands von Caches und sys.dm_exec_requests sowie sys.dm_exec_sessions für aktive Sitzungen und Anforderungen. Vermeiden Sie dynamische Verwaltungssichten, die ressourcenintensiv sind (beispielsweise durchsucht sys.dm_tran_version_store den vollständigen Versionsspeicher und kann umfangreiche E/A verursachen) oder komplexe Joins verwenden. Informationen zu den Auswirkungen auf die Leistung finden Sie in der Dokumentation der jeweiligen dynamischen Verwaltungssicht.

  • Abfragen von Katalogsichten.

  • Einfache DBCC-Befehle, wie z. B. DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, und DBCC SQLPERF. Führen Sie keine ressourcenintensiven Befehle wie DBCC CHECKDB, DBCC DBREINDEX oder DBCC SHRINKDATABASE aus.

  • Transact-SQL KILL <spid> -Befehl. Abhängig vom Status von SQL Server ist der KILL-Befehl nicht immer erfolgreich; dann ist ein Neustart von SQL Server unumgänglich. Es folgen einige allgemeine Richtlinien:

    • Überprüfen Sie mit der Abfrage SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>, ob SPID tatsächlich beendet wurde. Wenn keine Zeilen zurückgegeben werden, wurde die Sitzung beendet.

    • Ist die Sitzung noch vorhanden, sollten Sie überprüfen, ob der Sitzung Tasks zugewiesen sind. Führen Sie dazu die Abfrage SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid> aus. Wird der Task dort angezeigt, wird die Sitzung wahrscheinlich gerade beendet. Beachten Sie, dass die Abfrage möglicherweise erhebliche Zeit in Anspruch nimmt und unter Umständen nicht erfolgreich ist.

    • Enthält die dieser Sitzung zugeordnete sys.dm_os_tasks-Sicht keine Tasks, während die Sitzung nach der Ausführung des KILL-Befehls in sys.dm_exec_sessions verbleibt, bedeutet dies, dass kein Arbeitsthread verfügbar ist. Wählen Sie einen der aktuell ausgeführten Tasks aus (einen in der sys.dm_os_tasks-Sicht mit sessions_id <> NULL aufgeführten Task), und beenden Sie die diesem zugeordnete Sitzung, um den Arbeitsthread freizugeben. Beachten Sie, dass das Beenden einer einzelnen Sitzung möglicherweise nicht ausreicht. Unter Umständen müssen Sie mehrere Sitzungen beenden.

DAC-Port

SQL Server lauscht ggf. am TCP-Port 1434 oder einem TCP-Port, der beim Starten von Database Engine (Datenbankmodul) dynamisch zugewiesen wurde, bzgl. einer DAC. Das Fehlerprotokoll enthält die Nummer des Ports, der von der DAC überwacht wird. Standardmäßig nimmt die DAC-Überwachung nur am lokalen Port Verbindungen an. Ein Codebeispiel zum Aktivieren von Remoteverwaltungsverbindungen finden Sie unter Remoteadministratorverbindungen (Serverkonfigurationsoption).

Nachdem die Remoteverwaltungsverbindung konfiguriert wurde, wird die DAC-Überwachung aktiviert, ohne dass ein Neustart von SQL Server erforderlich ist. Jetzt kann ein Client remote eine DAC herstellen. Sie können die DAC-Überwachung für die Annahme von Remoteverbindungen auch dann aktivieren, wenn SQL Server nicht reagiert, indem Sie zunächst unter lokaler Verwendung der DAC eine Verbindung mit SQL Server herstellen und dann die gespeicherte Prozedur sp_configure ausführen, sodass Verbindungen über Remoteverbindungen angenommen werden.

In Clusterkonfigurationen ist die DAC standardmäßig deaktiviert. Benutzer können die remote admin connection-Option von sp_configure ausführen, um den Zugriff der DAC-Überwachung auf eine Remoteverbindung zu aktivieren. Wenn SQL Server nicht reagiert und die DAC-Überwachung nicht aktiviert ist, müssen Sie möglicherweise SQL Server neu starten, um eine Verbindung mit der DAC herzustellen. Deshalb wird empfohlen, die Konfigurationsoption remote admin connections in Clustersystemen zu aktivieren.

Der DAC-Port wird dynamisch von SQL Server beim Start zugewiesen. Beim Herstellen der Verbindung mit der Standardinstanz wird die Verwendung einer SSRP-Anforderung (SQL Server Resolution Protocol) an den SQL Server-Browser-Dienst von der DAC vermieden. Zunächst wird eine Verbindung über den TCP-Port 1434 hergestellt. Tritt dabei ein Fehler auf, wird ein SSRP-Aufruf ausgegeben, um den Port abzurufen. Falls der SQL Server-Browser SSRP-Anforderungen nicht überwacht, gibt die Verbindungsanforderung einen Fehler zurück. Suchen Sie im Fehlerprotokoll nach der Portnummer, die von der DAC überwacht wird. Wenn SQL Server für die Annahme von Remoteverwaltungsverbindungen konfiguriert ist, muss die DAC wie folgt mit einer expliziten Portnummer initiiert werden:

sqlcmd –Stcp:<server>,<port>

Im SQL Server-Fehlerprotokoll ist die Portnummer für die DAC aufgelistet, standardmäßig 1434. Ist SQL Server ausschließlich für die Annahme lokaler DAC konfiguriert, müssen Sie die Verbindung mithilfe des Loopbackadapters herstellen. Verwenden Sie dazu folgenden Befehl:

sqlcmd –S127.0.0.1,1434

Beispiel

In diesem Beispiel bemerkt ein Administrator, dass der Server URAN123 nicht reagiert, und möchte das Problem analysieren. Dazu aktiviert der Benutzer das Eingabeaufforderungs-Hilfsprogramm sqlcmd und stellt eine Verbindung mit dem Server URAN123 her. Dabei gibt er den Schalter -A an, um die DAC anzuzeigen.

sqlcmd -S URAN123 -U sa -P <xxx> –A

Jetzt kann der Administrator Abfragen für eine Problemdiagnose ausführen und möglicherweise die nicht reagierenden Sitzungen beenden.

Verwandte Inhalte

Verwenden von sqlcmd mit Skriptvariablen

sqlcmd (Hilfsprogramm)

SELECT (Transact-SQL)

sp_who (Transact-SQL)

sp_lock (Transact-SQL)

KILL (Transact-SQL)

DBCC CHECKALLOC (Transact-SQL)

DBCC CHECKDB (Transact-SQL)

DBCC OPENTRAN (Transact-SQL)

DBCC INPUTBUFFER (Transact-SQL)

Serverkonfigurationsoptionen

Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit Transaktionen (Transact-SQL)

Ablaufverfolgungsflags (Transact-SQL)