Udostępnij za pomocą


Połączenie diagnostyczne dla administratorów bazy danych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Program SQL Server zapewnia specjalne połączenie diagnostyczne dla administratorów, gdy standardowe połączenia z serwerem nie są możliwe. To połączenie diagnostyczne umożliwia administratorowi dostęp do programu SQL Server w celu wykonywania zapytań diagnostycznych i rozwiązywania problemów nawet wtedy, gdy program SQL Server nie odpowiada na standardowe żądania połączeń.

To dedykowane połączenie administratora (DAC) obsługuje szyfrowanie i inne funkcje zabezpieczeń programu SQL Server. Funkcja DAC zezwala tylko na zmianę kontekstu użytkownika na innego użytkownika administratora.

Program SQL Server podejmuje każdą próbę pomyślnego nawiązania połączenia z usługą DAC, ale w skrajnych sytuacjach może się nie powiódł.

Nawiązywanie połączenia z usługą DAC

Domyślnie połączenie jest dozwolone tylko od klienta uruchomionego na serwerze. Połączenia sieciowe nie są dozwolone, chyba że są skonfigurowane przy użyciu sp_configure procedury składowanej z opcją konfiguracji serwera połączeń administratora zdalnego .

Tylko członkowie roli sysadmin programu SQL Server mogą łączyć się przy użyciu usługi DAC.

Funkcja DAC jest dostępna i obsługiwana za pośrednictwem sqlcmd narzędzia wiersza polecenia przy użyciu specjalnego przełącznika administratora (-A). Aby uzyskać więcej informacji na temat korzystania z programu sqlcmd, zobacz sqlcmd — używanie ze zmiennymi skryptowymi. Możesz również połączyć prefiks z admin: nazwą wystąpienia w formacie sqlcmd -S admin:<instance_name>. Możesz również zainicjować kontrolę dostępu DAC z poziomu edytora zapytań programu SQL Server Management Studio, łącząc się z usługą admin:<instance_name>.

Aby ustanowić DAC z programu SQL Server Management Studio:

  • Rozłącz wszystkie połączenia z powiązanym wystąpieniem programu SQL Server, w tym Eksploratorem obiektów i wszystkimi otwartymi oknami zapytań.

  • Z menu wybierz pozycję Plik > Nowy > aparat bazy danych Zapytanie

  • W oknie dialogowym połączenie w polu Nazwa serwera wprowadź admin:<server_name> , jeśli używasz wystąpienia domyślnego lub admin:<server_name>\<instance_name> jeśli używasz nazwanego wystąpienia.

Port DAC

Program SQL Server nasłuchuje funkcji DAC na porcie TCP 1434, jeśli jest dostępny, lub port TCP dynamicznie przypisany podczas uruchamiania aparatu bazy danych. Dziennik błędów zawiera numer portu, na którym nasłuchuje DAC. Domyślnie odbiornik DAC akceptuje połączenie tylko na porcie lokalnym. Aby zapoznać się z przykładem kodu, który aktywuje połączenia administracji zdalnej, zobacz Konfiguracja serwera: połączenia administratora zdalnego.

Po skonfigurowaniu połączenia administracji zdalnej odbiornik DAC jest włączony bez ponownego uruchamiania programu SQL Server, a klient może teraz połączyć się zdalnie z usługą DAC. Odbiornik DAC umożliwia zdalne akceptowanie połączeń, nawet jeśli program SQL Server nie odpowiada, najpierw łącząc się z programem SQL Server przy użyciu lokalnego programu DAC, a następnie wykonując sp_configure procedurę składowaną w celu akceptowania połączenia z połączeń zdalnych.

W konfiguracjach klastra funkcja DAC będzie domyślnie wyłączona. Użytkownicy mogą wykonać opcję połączenia administratora zdalnego, sp_configure aby umożliwić odbiornikowi DAC dostęp do połączenia zdalnego. Jeśli program SQL Server nie odpowiada, a odbiornik DAC nie jest włączony, może być konieczne ponowne uruchomienie programu SQL Server w celu nawiązania połączenia z usługą DAC. W związku z tym zalecamy włączenie opcji konfiguracji połączeń administratora zdalnego w systemach klastrowanych.

Port DAC jest przypisywany dynamicznie przez program SQL Server podczas uruchamiania. Podczas nawiązywania połączenia z wystąpieniem domyślnym usługa DAC unika używania żądania protokołu SSRP (SQL Server Resolution Protocol) do usługi SQL Server Browser podczas nawiązywania połączenia. Najpierw łączy się za pośrednictwem portu TCP 1434. Jeśli to się nie powiedzie, wywołanie protokołu SSRP w celu pobrania portu. Jeśli przeglądarka SQL Server nie nasłuchuje żądań SSRP, żądanie połączenia zwraca błąd. Zapoznaj się z dziennikem błędów, aby znaleźć numer portu DAC nasłuchuje. Jeśli program SQL Server jest skonfigurowany do akceptowania połączeń administracji zdalnej, moduł DAC musi być inicjowany przy użyciu jawnego numeru portu:

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

W dzienniku błędów programu SQL Server jest wyświetlany numer portu dla modułu DAC, który jest domyślnie 1434. Jeśli program SQL Server jest skonfigurowany do akceptowania tylko lokalnych połączeń DAC, połącz się przy użyciu adaptera sprzężenia zwrotnego przy użyciu następującego polecenia:

sqlcmd -S 127.0.0.1,1434

Ograniczenia

Ponieważ DAC istnieje wyłącznie do diagnozowania problemów z serwerem w rzadkich okolicznościach, istnieją pewne ograniczenia dotyczące połączenia:

  • Aby zagwarantować, że istnieją zasoby dostępne dla połączenia, tylko jeden DAC jest dozwolony dla każdego wystąpienia programu SQL Server. Jeśli połączenie DAC jest już aktywne, każde nowe żądanie nawiązania połączenia za pośrednictwem funkcji DAC zostanie odrzucone z powodu błędu 17810.

  • Aby zaoszczędzić zasoby, program SQL Server Express nie nasłuchuje na porcie DAC, chyba że jest uruchomiony z flagą trace 7806.

  • Usługa DAC początkowo próbuje nawiązać połączenie z domyślną bazą danych skojarzona z identyfikatorem logowania. Po pomyślnym nawiązaniu połączenia można nawiązać połączenie z bazą master danych. Jeśli domyślna baza danych jest w trybie offline lub w inny sposób niedostępna, połączenie zwróci błąd 4060. Jednak powiedzie się, jeśli zastąpisz domyślną bazę danych, aby nawiązać połączenie z bazą master danych, zamiast tego użyj następującego polecenia:

    sqlcmd -A -d master
    

    Zalecamy nawiązanie połączenia z bazą master danych za pomocą funkcji DAC, ponieważ master jest gwarantowana dostępność, jeśli wystąpienie aparatu bazy danych jest uruchomione.

  • Program SQL Server uniemożliwia uruchamianie równoległych zapytań lub poleceń za pomocą funkcji DAC. Na przykład błąd 3637 jest generowany, jeśli wykonasz jedną z następujących instrukcji z DAC:

    • RESTORE...
    • BACKUP...
  • Gwarantowana jest dostępność tylko ograniczonych zasobów z DAC. Nie używaj funkcji DAC do uruchamiania zapytań intensywnie korzystających z zasobów ani zapytań, które mogą blokować inne zapytania. Pomaga to zapobiec tworzeniu istniejących problemów z serwerem przez DAC. Aby uniknąć potencjalnych scenariuszy blokowania, jeśli musisz uruchamiać zapytania, które mogą blokować, uruchom zapytanie w obszarze poziomów izolacji opartej na migawkach, jeśli to możliwe; w przeciwnym razie ustaw poziom izolacji transakcji na READ UNCOMMITTED i ustaw LOCK_TIMEOUT wartość na krótką wartość, taką jak 2000 milisekund lub obie te wartości. Uniemożliwi to zablokowanie sesji DAC. Jednak w zależności od stanu, w jaki znajduje się program SQL Server, sesja DAC może zostać zablokowana na zatrzaśnięcie. Możesz zakończyć sesję DAC przy użyciu CTRL-C, ale nie jest gwarantowana. W takim przypadku jedyną opcją może być ponowne uruchomienie programu SQL Server.

  • Aby zagwarantować łączność i rozwiązywanie problemów z usługą DAC, program SQL Server rezerwuje ograniczone zasoby do przetwarzania poleceń uruchamianych w DAC. Te zasoby są zwykle wystarczające tylko dla prostych funkcji diagnostycznych i rozwiązywania problemów, takich jak wymienione poniżej.

Mimo że teoretycznie można uruchomić dowolną instrukcję Transact-SQL, która nie musi być wykonywana równolegle w dac, zdecydowanie zalecamy ograniczenie użycia do następujących poleceń diagnostycznych i rozwiązywania problemów:

  • Wykonywanie zapytań dotyczących dynamicznych widoków zarządzania na potrzeby podstawowej diagnostyki, takiej jak sys.dm_tran_locks stanu blokowania, sys.dm_os_memory_cache_counters w celu sprawdzenia kondycji pamięci podręcznych oraz sys.dm_exec_requests i sys.dm_exec_sessions dla aktywnych sesji i żądań. Unikaj dynamicznych widoków zarządzania intensywnie korzystających z zasobów (na przykład sys.dm_tran_version_store skanuje magazyn pełnej wersji i może powodować rozległe operacje we/wy) lub używające złożonych sprzężeń. Aby uzyskać informacje o implikacjach dotyczących wydajności, zobacz dokumentację konkretnego dynamicznego widoku zarządzania.

  • Wykonywanie zapytań względem widoków wykazu.

  • Podstawowe polecenia DBCC, takie jak DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS i DBCC SQLPERF. Unikaj poleceń intensywnie korzystających z zasobów, takich jak DBCC CHECKDB, DBCC DBREINDEX lub DBCC SHRINKDATABASE.

  • KILL <spid>Transact-SQL polecenie. W zależności od stanu programu SQL Server KILL polecenie może się nie powieść. Jedyną opcją może być ponowne uruchomienie wystąpienia w przypadku programu SQL Server lub usługi Azure SQL Managed Instance. Poniżej przedstawiono niektóre ogólne wytyczne:

    • Sprawdź, czy identyfikator SPID został zabity, wykonując SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>;zapytanie . Jeśli nie zwraca żadnych wierszy, oznacza to, że sesja została zabita.

    • Jeśli sesja jest nadal dostępna, sprawdź, czy istnieją zadania przypisane do tej sesji, uruchamiając zapytanie SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>;. Jeśli widzisz tam zadanie, najprawdopodobniej sesja jest obecnie zabita. Może to zająć dużo czasu i w ogóle nie powiedzie się.

    • Jeśli nie ma żadnych zadań skojarzonych sys.dm_os_tasks z tą sesją, ale sesja pozostaje w sys.dm_exec_sessions po wykonaniu KILL polecenia, oznacza to, że nie masz dostępnego procesu roboczego. Wybierz jedno z aktualnie uruchomionych zadań (zadanie wymienione w sys.dm_os_tasks widoku z elementem sessions_id <> NULL) i zabij skojarzona z nim sesję, aby zwolnić proces roboczy. Może nie wystarczyć, aby zabić jedną sesję: może być konieczne zabicie wielu sesji.

Ograniczenie w usłudze Azure SQL Database

Podczas nawiązywania połączenia z usługą Azure SQL Database przy użyciu funkcji DAC należy również określić nazwę bazy danych w parametrach -d połączenia przy użyciu opcji .

Ograniczenie w usłudze Azure SQL Managed Instance

Usługa DAC nie działa w przypadku prywatnego punktu końcowego dla usługi Azure SQL Managed Instance. W wystąpieniach zarządzanych SQL moduł DAC nasłuchuje na porcie 1434. Ponieważ prywatne punkty końcowe do wystąpień zarządzanych SQL zezwalają tylko na połączenia na porcie 1433, nie można użyć prywatnego punktu końcowego do nawiązania połączenia DAC. Aby nawiązać połączenie z usługą DAC, musisz znajdować się w tej samej sieci wirtualnej co wystąpienie zarządzane SQL.

Przykłady

W tym przykładzie administrator zauważy, że serwer contoso-server nie odpowiada i chce zdiagnozować problem. W tym celu użytkownik aktywuje sqlcmd narzędzie wiersza polecenia i nawiązuje połączenie z serwerem contoso-server przy użyciu polecenia -A , aby wskazać DAC.

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

Administrator może teraz wykonywać zapytania, aby zdiagnozować problem i ewentualnie zakończyć sesje nieodpowiadjące.

Podobny przykład nawiązywania połączenia z usługą SQL Database używa następującego polecenia, w tym parametru -d w celu określenia bazy danych:

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