Freigeben über


Diagnoseverbindung für Datenbankadministratoren

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-Instanz

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, die DAC-Verbindung erfolgreich herzustellen, aber in extremen Situationen ist die Verbindung möglicherweise nicht erfolgreich.

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 nicht zulässig, es sei denn, sie werden mithilfe der sp_configure gespeicherten Prozedur mit der Serverkonfigurationsoption für Remoteadministratorverbindungen konfiguriert.

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 zur Verwendung sqlcmdfinden Sie unter sqlcmd – Verwendung 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, oder admin:<server_name>\<instance_name>, wenn Sie eine benannte Instanz verwenden.

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, das Remoteverwaltungsverbindungen aktiviert, finden Sie unter Serverkonfiguration: Remoteadministratorverbindungen.

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

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 Serverzulässig. Ist bereits eine dedizierte Administratorverbindung aktiv, wird jede weitere Anforderung einer Verbindung über DAC mit Fehler 17810 abgelehnt.

  • Um Ressourcen zu sparen, lauscht SQL Server Express nicht auf den DAC-Port. Dies geschieht nur, wenn er mit dem Trace-Flag 7806 gestartet wird.

  • Die DAC versucht zunächst, eine Verbindung zu der Standarddatenbank herzustellen, die dem Anmeldenamen zugeordnet ist. Nachdem die Verbindung erfolgreich hergestellt wurde, 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, mit der DAC eine Verbindung zu der master-Datenbank herzustellen, da master 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. Verwenden Sie den DAC nicht, um ressourcenintensive Abfragen oder Abfragen auszuführen, die andere Abfragen blockieren können. Dies trägt dazu bei, zu verhindern, dass vorhandene Serverprobleme durch die DAC verstärkt werden. Um potenzielle Blockierungsszenarien zu vermeiden, führen Sie die Abfrage nach Möglichkeit unter snapshotbasierten Isolationsebenen aus, wenn Sie Abfragen ausführen müssen, die blockiert werden könnten. legen Sie andernfalls die Transaktionsisolationsstufe auf READ UNCOMMITTED einen LOCK_TIMEOUT kurzen Wert fest, z. B. 2000 Millisekunden oder beides. 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 kann die einzige Option sein, SQL Server neu zu starten.

  • 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 Server ist der KILL Befehl möglicherweise nicht erfolgreich. Die einzige Option besteht möglicherweise darin, die Instanz neu zu starten, im Fall von SQL Server oder azure SQL Managed Instance. 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. Dies kann viel Zeit in Anspruch nehmen und kann überhaupt nicht erfolgreich sein.

    • Wenn keine Aufgaben in der sys.dm_os_tasks dieser Sitzung zugeordnet sind, die Sitzung aber nach dem Ausführen des sys.dm_exec_sessions Befehls im KILL bleibt, heißt das, dass Sie keinen Worker zur Verfügung haben. Wählen Sie eine der derzeit ausgeführten Aufgaben aus (eine Aufgabe, die in der sys.dm_os_tasks Ansicht mit einer sessions_id <> NULL) aufgeführt ist, und beenden Sie die damit verbundene Sitzung, um den Worker freizugeben. Es kann sein, dass das Beenden einer einzelnen Sitzung nicht ausreicht; möglicherweise müssen Sie mehrere Sitzungen beenden.

Einschränkung in der Azure SQL-Datenbank

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.

Einschränkung in verwalteter Azure SQL-Instanz

Der DAC funktioniert nicht über einen privaten Endpunkt für azure SQL Managed Instance. In verwalteten SQL-Instanzen lauscht der DAC auf Port 1434. Da private Endpunkte mit verwalteten SQL-Instanzen nur Verbindungen an Port 1433 zulassen, können Sie keinen privaten Endpunkt verwenden, um eine DAC-Verbindung herzustellen. Sie müssen sich im gleichen virtuellen Netzwerk wie die sql-verwaltete Instanz befinden, um eine Verbindung mit DAC herzustellen.

Examples

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

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

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

Ein ähnliches Beispiel für die Verbindung mit der SQL-Datenbank würde den folgenden Befehl verwenden, einschließlich des -d Parameters, um die Datenbank anzugeben:

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