Diagnoseverbindung für Datenbankadministratoren
Gilt für: SQL Server Azure SQL-Datenbank
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 (Dedicated Administrator Connection, dedizierte Administratorverbindung) erfolgreich eine Verbindung herstellt, doch unter extremen Bedingungen ist dies eventuell nicht möglich.
Nehmen Sie Kontakt mit der DAC auf.
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 -Rolle sysadmin können dedizierte Administratorverbindungen (DAC) herstellen.
Die DAC steht über das sqlcmd
-Eingabeaufforderungs-Hilfsprogramm mit einem speziellen Administratorschalter (-A
) zur Verfügung und wird von diesem Hilfsprogramm unterstützt. Weitere Informationen zum Verwenden von sqlcmd
finden Sie unter Verwenden von „sqlcmd“ mit Skriptvariablen. Sie können die Verbindung auch herstellen, indem Sie admin:
dem Instanznamen im folgenden Format voranstellen: sqlcmd -S admin:<instance_name>
. Alternativ können Sie auch eine DAC in einem SQL Server Management Studio-Abfrage-Editor initiieren, indem Sie eine Verbindung mit admin:<instance_name>
herstellen.
Gehen Sie wie folgt vor, um eine DAC über SQL Server Management Studio erstellen:
Trennen Sie alle Verbindungen mit der zugehörigen SQL Server Instanz, einschließlich des Objekt-Explorers und aller offenen Abfragefenster.
Klicken Sie im Menü auf Datei> Neu>Datenbank-Engine-Abfrage.
Geben Sie im Dialogfeld „Verbindung“ in das Feld „Servername“
admin:<server_name>
ein, wenn Sie die Standardinstanz verwenden, oderadmin:<server_name>\<instance_name>
, wenn Sie eine benannte Instanz verwenden.
Beschrä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 Serverzulä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 dermaster
-Datenbank herstellen:sqlcmd -A -d master
Es wird empfohlen, mit der DAC eine Verbindung zu der
master
-Datenbank herzustellen, damaster
sicher verfügbar ist, wenn die Instanz der Datenbank-Engine 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. ein komplexer Join für eine große 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 Serverunumgä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:
Abfragen von dynamischen Verwaltungssichten für grundlegende Diagnosen, wie z.B. sys.dm_tran_locks für den Sperrstatus, sys.dm_os_memory_cache_counters für die Zustandsüberprüfung der Caches sowie sys.dm_exec_requests und 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 gesamten Versionsspeicher und kann umfangreiche E/A-Vorgänge verursachen) oder komplexe Joins verwenden. Informationen zu den Auswirkungen auf die Leistung finden Sie in der Dokumentation der jeweiligen dynamischen Verwaltungssicht.
Abfragen von Katalogsichten.
Grundlegende DBCC-Befehle wie 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 Serverist der KILL-Befehl nicht immer erfolgreich; dann ist ein Neustart von SQL Serverunumgänglich. Es folgen einige allgemeine Richtlinien:Überprüfen Sie mit der Abfrage
SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>
, ob SPID 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. Diese Abfrage nimmt möglicherweise erhebliche Zeit in Anspruch und ist unter Umständen nicht erfolgreich.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 Task in der sys.dm_os_tasks-Sicht mit
sessions_id <> NULL
), und beenden Sie die diesem zugeordnete Sitzung, um den Arbeitsthread freizugeben. Das Beenden einer einzelnen Sitzung reicht möglicherweise nicht aus. Unter Umständen müssen Sie mehrere Sitzungen beenden.
DAC-Port
SQL Server lauscht am TCP-Port 1434 (sofern verfügbar) oder einem TCP-Port, der beim Starten von Datenbank-Engine dynamisch zugewiesen wurde, auf eine DAC. Das Fehlerprotokoll enthält die Nummer des Ports, an dem der DAC lauscht. 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 es erforderlich ist, SQL Server zu starten. 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
verwenden, 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 vermeidet die DAC die Verwendung einer SSRP-Anforderung ( SQL Server Resolution Protocol) an den SQL Server-Browser-Dienst. 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 -S tcp:<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 -S 127.0.0.1,1434
Tipp
Beim Herstellen einer Verbindung mit Azure SQL-Datenbank über die DAC müssen Sie auch den Datenbanknamen in der Verbindungszeichenfolge angeben, indem Sie die Option -d
verwenden.
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 <StrongPassword> -A
Jetzt kann der Administrator Abfragen für eine Problemdiagnose ausführen und möglicherweise die nicht reagierenden Sitzungen beenden.
In einem ähnlichen Beispiel zum Herstellen einer Verbindung mit SQL-Datenbank wird der folgende Befehl einschließlich dem Parameter „-d“ zur Angabe der Datenbank verwendet:
sqlcmd -S serverName.database.windows.net,1434 -U sa -P <StrongPassword> -d AdventureWorks
Weitere Informationen
- 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 (SQL Server)
- Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit Transaktionen (Transact-SQL)
- Ablaufverfolgungsflags (Transact-SQL)