Diagnostické připojení pro správce databází

platí pro:SQL Serverazure SQL Managed Instance

SQL Server poskytuje správcům speciální diagnostické připojení, pokud standardní připojení k serveru není možné. Toto diagnostické připojení umožňuje správci přistupovat k SQL Serveru, aby spouštět diagnostické dotazy a řešit problémy i v případě, že SQL Server nereaguje na standardní požadavky na připojení.

Toto vyhrazené připojení správce (DAC) podporuje šifrování a další funkce zabezpečení SQL Serveru. DaC umožňuje změnit kontext uživatele jenom na jiného uživatele s rolí správce.

SQL Server provádí každý pokus o úspěšné připojení DAC, ale v extrémních situacích to nemusí být úspěšné.

Připojení pomocí DAC

Ve výchozím nastavení je připojení povolené jenom z klienta spuštěného na serveru. Síťová připojení nejsou povolená, pokud nejsou nakonfigurovaná pomocí sp_configure uložené procedury s možností konfigurace serveru připojení vzdáleného správce .

Pomocí dac se můžou připojit jenom členové role správce systému SQL Server.

DAC je k dispozici a je podporován v nástroji příkazového řádku sqlcmd pomocí speciálního přepínače pro správce (-A). Další informace o použití sqlcmdnaleznete v tématu sqlcmd – použití se skriptovacími proměnnými. Můžete také připojit předponu admin: k názvu instance ve formátu sqlcmd -S admin:<instance_name>. DaC můžete také zahájit z editoru dotazů aplikace SQL Server Management Studio připojením k admin:<instance_name>.

Postup vytvoření DAC v aplikaci SQL Server Management Studio:

  • Odpojte všechna připojení ke související instanci SQL Serveru, včetně Průzkumníka objektů a všech otevřených oken dotazů.

  • V nabídce vyberte Soubor > Nový > dotaz modulu Database Engine

  • V dialogovém okně připojení v poli Název serveru zadejte admin:<server_name> , zda používáte výchozí instanci nebo admin:<server_name>\<instance_name> používáte pojmenovanou instanci.

port DAC

SQL Server naslouchá DAC na portu TCP 1434, pokud je k dispozici, nebo port TCP dynamicky přiřazený při spuštění databázového stroje. Protokol chyb obsahuje číslo portu, na které daC naslouchá. Ve výchozím nastavení posluchač DAC přijímá připojení pouze na místním portu. Ukázka kódu, která aktivuje připojení vzdálené správy, najdete v tématu Konfigurace serveru: připojení vzdáleného správce.

Po nakonfigurování připojení ke vzdálené správě je naslouchací proces DAC povolený bez restartování SQL Serveru a klient se teď může vzdáleně připojit k DAC. Naslouchací proces DAC umožňuje vzdáleně přijímat připojení, i když SQL Server nereaguje, a to tak, že se nejprve připojí k SQL Serveru místně pomocí daC a potom spustí uloženou proceduru sp_configure pro příjem připojení ze vzdálených připojení.

V konfiguracích clusteru bude dac ve výchozím nastavení vypnutý. Uživatelé mohou spuštěním možnosti sp_configure pro vzdálené připojení správce povolit naslouchači DAC přijímat vzdálená připojení. Pokud SQL Server nereaguje a naslouchací proces DAC není povolený, možná budete muset restartovat SQL Server, abyste se mohli připojit pomocí DAC. Proto doporučujeme povolit možnost konfigurace připojení vzdáleného správce v clusterovaných systémech.

Port DAC se přiřazuje dynamicky SQL Serverem během spouštění. Při připojování k výchozí instanci se DAC při připojování vyhne použití požadavku SSRP (SQL Server Resolution Protocol) ke službě SQL Server Browser Service. Nejprve se připojí přes port TCP 1434. Pokud se to nezdaří, provede volání SSRP pro získání portu. Pokud SQL Server Browser nenaslouchá požadavkům SSRP, vrátí žádost o připojení chybu. V protokolu chyb vyhledejte číslo portu DAC, na které naslouchá. Pokud je SQL Server nakonfigurovaný tak, aby přijímal připojení ke vzdálené správě, musí být DAC inicializován s explicitním číslem portu:

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

Protokol chyb SQL Serveru uvádí číslo portu dac, což je ve výchozím nastavení 1434. Pokud je SQL Server nakonfigurovaný tak, aby přijímal pouze místní připojení DAC, připojte se přes adaptér loopback pomocí následujícího příkazu:

sqlcmd -S 127.0.0.1,1434

Omezení

Vzhledem k tomu, že DAC existuje výhradně pro diagnostiku problémů se serverem ve výjimečných případech, existují určitá omezení připojení:

  • Aby bylo možné zaručit, že pro připojení jsou k dispozici prostředky, je pro každou instanci SQL Serveru povolen pouze jeden DAC. Pokud už je připojení DAC aktivní, všechny nové žádosti o připojení prostřednictvím DAC se zamítnou s chybou 17810.

  • Pokud chcete ušetřit prostředky, SQL Server Express nenaslouchá na portu DAC, pokud není spuštěn s příznakem trasování 7806.

  • DaC se zpočátku pokusí připojit k výchozí databázi přidružené k přihlášení. Po úspěšném připojení se můžete připojit k master databázi. Pokud je výchozí databáze offline nebo není dostupná, připojení vrátí chybu 4060. Pokud ale pomocí následujícího příkazu přepíšete výchozí databázi a místo ní se připojíte k databázi master, bude to fungovat:

    sqlcmd -A -d master
    

    Doporučujeme připojit se k master databázi pomocí daC, protože master je zaručeno, že je k dispozici, pokud je spuštěna instance databázového stroje.

  • SQL Server zakáže spouštění paralelních dotazů nebo příkazů v jazyce DAC. Například chyba 3637 se vygeneruje, pokud v jazyce DAC spustíte některý z následujících příkazů:

    • RESTORE...
    • BACKUP...
  • V případě DAC jsou zaručeně k dispozici pouze omezené zdroje. DaC nepoužívejte ke spouštění dotazů nebo dotazů náročných na prostředky, které můžou blokovat jiné dotazy. To pomáhá zabránit tomu, aby DAC zhoršoval jakékoli stávající problémy se serverem. Pokud se chcete vyhnout potenciálním scénářům blokování, pokud potřebujete spouštět dotazy, které by mohly blokovat, spusťte dotaz v případě potřeby na úrovních izolace založených na snímku; v opačném případě nastavte úroveň izolace transakce na READ UNCOMMITTED a nastavte LOCK_TIMEOUT hodnotu na krátkou hodnotu, například 2000 milisekund nebo obojí. Tím zabráníte zablokování relace DAC. V závislosti na tom, v jakém stavu je SQL Server, ale může dojít k zablokování relace DAC na latchi. Je možné, že budete moci ukončit relaci DAC pomocí CTRL-C, ale nelze to zaručit. V takovém případě může být jedinou možností restartování SQL Serveru.

  • Aby se zajistilo připojení a řešení potíží s DAC, SQL Server si vyhrazuje omezené prostředky pro zpracování příkazů spuštěných v DAC. Tyto prostředky obvykle stačí jenom pro jednoduché funkce diagnostiky a řešení potíží, jako jsou ty uvedené níže.

I když můžete teoreticky spustit jakýkoli příkaz Transact-SQL, který se nemusí paralelně spouštět v DAC, důrazně doporučujeme omezit použití na následující příkazy diagnostiky a řešení potíží:

  • Dotazování na zobrazení dynamické správy pro základní diagnostiku, jako jsou sys.dm_tran_locks pro stav uzamčení, sys.dm_os_memory_cache_counters pro kontrolu stavu mezipamětí a sys.dm_exec_requests a sys.dm_exec_sessions pro aktivní relace a požadavky. Vyhněte se zobrazením dynamické správy, která jsou náročná na prostředky (například sys.dm_tran_version_store prohledává úplné úložiště verzí a může způsobit rozsáhlé vstupně-výstupní operace) nebo která používají složitá spojení. Informace o dopadech na výkon najdete v dokumentaci ke konkrétnímu zobrazení dynamické správy.

  • Dotazování katalogových zobrazení

  • Základní příkazy DBCC, jako jsou DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS a DBCC SQLPERF. Vyhněte se příkazům náročným na prostředky, jako jsou DBCC CHECKDB, DBCC DBREINDEX nebo DBCC SHRINKDATABASE.

  • KILL <spid>Transact-SQL příkaz. V závislosti na stavu SQL Serveru KILL nemusí být příkaz úspěšný. Jedinou možností může být restartování instance v případě SQL Serveru nebo azure SQL Managed Instance. Tady jsou některé obecné pokyny:

    • Ověřte, že identifikátor SPID byl zabit dotazem SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>;. Pokud nevrátí žádné řádky, znamená to, že relace byla ukončena.

    • Pokud je relace stále k dispozici, ověřte, zda jsou k této relaci přiřazeny úkoly spuštěním dotazu SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>;. Pokud tam vidíte úkol, pravděpodobně se vaše relace právě ukončí. To může trvat značné množství času a nemusí vůbec proběhnout úspěšně.

    • Pokud v relaci přidružené k sys.dm_os_tasks nejsou žádné úkoly, ale relace po spuštění příkazu KILL zůstává ve stavu sys.dm_exec_sessions, znamená to, že nemáte k dispozici žádný pracovní proces. Vyberte jeden z aktuálně spuštěných úkolů (úkol uvedený v zobrazení sys.dm_os_tasks pomocí sessions_id <> NULL) a ukončete relaci, která je s ním přidružena, aby se uvolnil pracovní proces. Nemusí stačit ukončit jednu relaci: možná budete muset ukončit několik relací.

Omezení ve službě Azure SQL Database

DaC ve službě Azure SQL Database je obvykle obsazený back-endovým procesem a není přístupný uživatelem.

Omezení ve službě Azure SQL Managed Instance

DAC nefunguje přes privátní koncový bod pro službu Azure SQL Managed Instance. Ve spravovaných instancích SQL naslouchá DAC na portu 1434. Vzhledem k tomu, že privátní koncové body ke spravovaným instancím SQL umožňují připojení jenom na portu 1433, nemůžete k navázání připojení DAC použít privátní koncový bod. Abyste se mohli připojit pomocí DAC, musíte být ve stejné virtuální síti jako spravovaná instance SQL.

Examples

V tomto příkladu si správce všimne, že server contoso-server nereaguje a chce problém diagnostikovat. K tomu uživatel spustí nástroj příkazového řádku sqlcmd a připojí se k serveru contoso-server pomocí parametru -A, který určuje připojení DAC.

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

Správce teď může spouštět dotazy k diagnostice problému a případně ukončit nereagující relace.