Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure 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.
SQL Server dokłada wszelkich starań, aby pomyślnie nawiązać połączenie DAC, ale w skrajnych sytuacjach może się to nie udać.
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 za pomocą procedury składowanej sp_configure przy użyciu opcji konfiguracji serwera zdalne połączenia administracyjne.
Tylko członkowie roli sysadmin programu SQL Server mogą łączyć się przy użyciu usługi DAC.
DAC jest dostępny i obsługiwany za pomocą narzędzia wiersza polecenia sqlcmd przy użyciu specjalnego przełącznika administracyjnego (-A). Aby uzyskać więcej informacji na temat korzystania z programu sqlcmd, zobacz sqlcmd — używanie ze zmiennymi skryptowymi. Możesz także dodać prefiks admin: do nazwy instancji w formacie sqlcmd -S admin:<instance_name>. Możesz również zainicjować połączenie DAC w Edytorze zapytań programu SQL Server Management Studio, łącząc się z 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 Plik > Nowy > Zapytanie aparatu bazy danych
W oknie dialogowym połączenia, w polu Nazwa serwera wprowadź
admin:<server_name>, jeśli używasz wystąpienia domyślnego, lubadmin:<server_name>\<instance_name>, jeśli używasz wystąpienia nazwanego.
port DAC
SQL Server nasłuchuje połączeń DAC na porcie TCP 1434, jeśli jest on dostępny, lub na porcie TCP dynamicznie przypisanym podczas uruchamiania Aparatu baz 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, wykonuje wywołanie SSRP, aby uzyskać port. Jeśli przeglądarka SQL Server nie nasłuchuje żądań SSRP, żądanie połączenia zwraca błąd. Sprawdź dziennik błędów, aby znaleźć numer portu, na którym nasłuchuje DAC. 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 SQL Server jest skonfigurowany tak, aby przyjmował tylko lokalne połączenia DAC, połącz się za pomocą adaptera pętli zwrotnej, używając 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.
DAC początkowo próbuje nawiązać połączenie z domyślną bazą danych skojarzoną z loginem. Po pomyślnym nawiązaniu połączenia można nawiązać połączenie z bazą
masterdanych. 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 operacja zakończy się powodzeniem, jeśli zamiast domyślnej bazy danych wskażesz do połączenia bazę danychmasterza pomocą następującego polecenia:sqlcmd -A -d masterZalecamy nawiązanie połączenia z bazą danych
masterprzy użyciu połączenia DAC, ponieważ dostęp domasterjest gwarantowany, jeśli wystąpienie silnika bazy danych zostało 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 UNCOMMITTEDi ustawLOCK_TIMEOUTwartość 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 jakim znajduje się SQL Server, sesja DAC może zostać zablokowana przez latch. 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ń względem dynamicznych widoków zarządzania w celu przeprowadzenia podstawowej diagnostyki, takich jak sys.dm_tran_locks do sprawdzania stanu blokad, sys.dm_os_memory_cache_counters do sprawdzania stanu pamięci podręcznych oraz sys.dm_exec_requests i sys.dm_exec_sessions do sprawdzania 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.
polecenie Transact-SQL
KILL <spid>. W zależności od stanu SQL Server polecenieKILLmoż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 SPID został zakończony, wysyłając zapytanie
SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>;. 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 ten proces, najprawdopodobniej Twoja sesja jest właśnie kończona. Może to zająć dużo czasu i w ogóle nie powiedzie się.Jeśli w elemencie
sys.dm_os_taskspowiązanym z tą sesją nie ma żadnych zadań, ale sesja nadal pozostaje wsys.dm_exec_sessionspo wykonaniu poleceniaKILL, oznacza to, że nie masz dostępnego procesu roboczego. Wybierz jedno z aktualnie uruchomionych zadań (zadanie widoczne w widokusys.dm_os_tasksz elementemsessions_id <> NULL) i zakończ skojarzoną z nim sesję, aby zwolnić worker. Może nie wystarczyć zamknięcie jednej sesji: może być konieczne zamknięcie wielu sesji.
Ograniczenie w usłudze Azure SQL Database
Usługa DAC w Azure SQL Database zazwyczaj jest zajmowana przez proces warstwy zaplecza i nie jest dostępna dla użytkownika.
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 zarządzanych wystąpieniach 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 uruchamia narzędzie wiersza polecenia sqlcmd i nawiązuje połączenie z serwerem contoso-server przy użyciu polecenia -A, aby określić użycie 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.
Treści powiązane
- Używanie narzędzia sqlcmd ze zmiennymi skryptowymi
- narzędzie sqlcmd
- WYBIERZ (Transact-SQL)
- sys.sp_who (Transact-SQL)
- sys.sp_lock (Transact-SQL)
- KILL (Transact-SQL)
- DBCC CHECKALLOC (Transact-SQL)
- DBCC CHECKDB (Transact-SQL)
- DBCC OPENTRAN (Transact-SQL)
- DBCC INPUTBUFFER (Transact-SQL)
- opcje konfiguracji serwera
- Dynamiczne widoki zarządzania i funkcje związane z transakcjami (Transact-SQL)
- Ustaw flagi śledzenia za pomocą DBCC TRACEON (Transact-SQL)