資料庫管理員的診斷連接
SQL Server 在無法與伺服器的標準連線時,為系統管理員提供特殊的診斷連線。 此診斷連線可讓系統管理員存取 SQL Server 來執行診斷查詢,並針對問題進行疑難解答,即使 SQL Server 未回應標準連線要求也一定。
此專用管理員連接 (DAC) 支援加密以及 SQL Server 的其他安全性功能。 DAC 只允許將使用者內容變更為其他管理使用者。
SQL Server 將不斷嘗試以便讓 DAC 順利連接,但是在極端的情況下可能無法成功。
適用於:SQL Server (SQL Server 2008 至目前版本),SQL 資料庫 V12。 |
使用 DAC 連線
依預設,只能從執行於伺服器上的用戶端進行連接。 除非使用sp_configure預存程式搭配 遠端管理員連線選項來設定網路連線,否則不允許網路連線。
只有 SQL Server 系統管理員 (sysadmin) 角色的成員可以使用 DAC 進行連接。
DAC 是透過 sqlcmd 命令提示字元公用程式使用特殊系統管理員參數 (-A) 來取得和支援的。 如需使用 sqlcmd 的詳細資訊,請參閱搭配腳本變數使用 sqlcmd。 您也可以使用 sqlcmd -Sadmin>:<instance_name 格式,將前置admin:
詞連接到實例名稱。您也可以從 SQL Server Management Studio 查詢編輯器 起始 DAC,方法是連線到 admin:
<instance_name。>
限制
由於 DAC 僅在少數的情況下才會為了診斷伺服器問題而建立,因此這項連接有某些限制:
若要保證有足夠的資源可供連接使用,每個 SQL Server 執行個體只能有一個 DAC。 若已有作用中的 DAC 連接存在,則所有透過 DAC 建立連接的新要求都會遭到拒絕,並產生錯誤 17810。
為了節省資源,除非以追蹤旗標 7806 開頭,否則 SQL Server Express 不會接聽 DAC 埠。
DAC 最初會嘗試連接到與登入相關聯的預設資料庫。 成功連線之後,您可以連線到 master 資料庫。 如果預設資料庫離線或是無法使用,連接將會傳回錯誤 4060。 不過,如果您覆寫預設資料庫以改為使用下列命令來連線到 master 資料庫,將會成功:
sqlcmd -A -d master
建議您使用 DAC 連接到 master 資料庫,因為如果啟動 資料庫引擎 實例,則保證 master 可供使用。
SQL Server 禁止以 DAC 執行平行查詢或命令。 例如,若您以 DAC 執行下列其中一項陳述式,就會產生錯誤 3637:
RESTORE
備份
只有某些限定的資源必定可透過 DAC 來使用。 請勿使用 DAC 來執行耗用大量資源的查詢(例如,大型數據表上的複雜聯結)或可能會封鎖的查詢。 如此可防止 DAC 在現有的伺服器問題外衍生出其他問題。 為了避免潛在的封鎖情況,若您必須執行可能會封鎖的查詢,請盡可能在快照隔離等級下執行查詢;否則,請將交易隔離等級設為 READ UNCOMMITTED,並將 LOCK_TIMEOUT 值設為 2000 毫秒之類的短數值。 如此可防止 DAC 工作階段產生封鎖的情形。 但依照 SQL Server 所處的狀態,DAC 工作階段也可能會遭到閂鎖封鎖。 您可以使用 CNTRL-C 終止 DAC 工作階段,但並不保證。 在這種情況下,重新啟動 SQL Server 可能是唯一的選擇。
為了保證 DAC 連接與疑難排解能順利進行,SQL Server 會保留有限的資源來處理 DAC 所執行的命令。 通常,這些資源僅足夠用來執行簡單的診斷與疑難排解功能,如下表所示。
雖然理論上您可以執行任何不需要在 DAC 上平行執行的 Transact-SQL 語句,但強烈建議您限制使用下列診斷和疑難解答命令:
基本診斷的查詢動態管理檢視,例如 sys.dm_tran_locks 可了解封鎖狀態、sys.dm_os_memory_cache_counters 可檢查快取的健全狀態,而 sys.dm_exec_requests 和 sys.dm_exec_sessions 可了解作用中的工作階段與要求。 請避免使用會耗用大量資源 (例如 sys.dm_tran_version_store 會掃描完整版本存放區而產生大量 I/O) 或使用複雜聯結的動態管理檢視。 如需效能含意的資訊,請參閱特定 動態管理檢視的文件集。
查詢目錄檢視。
DBCC FREEPROCCACHE、DBCC FREESYSTEMCACHE、DBCC DROPCLEANBUFFERS
,
和 DBCC SQLPERF 等基本 DBCC 命令。 請勿執行需要大量資源的命令,例如 DBCC CHECKDB、DBCC DBREINDEX 或 DBCC SHRINKDATABASE。Transact-SQL KILL*<spid>* 命令。 根據 SQL Server 的狀態而定,KILL 命令可能不會每次都成功,這時只能選擇重新啟動 SQL Server。 下面是部分一般方針:
藉由查詢
SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>
來確認SPID實際上已終止。 若未傳回資料列,表示已清除工作階段。若工作階段仍然存在,請執行
SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>
查詢,以確認此工作階段上是否有指定的工作。 若您在工作階段上看到工作,很可能表示工作階段正在清除中。 請注意,這可能需要相當長的時間,而且可能完全無法成功。如果與此會話相關聯的sys.dm_os_tasks中沒有任何工作,但會話在執行KILL命令之後仍會保留在sys.dm_exec_sessions中,這表示您沒有可用的背景工作角色。 請選取目前正在執行的其中一個工作 (列示於 sys.dm_os_tasks 檢視表中而含有
sessions_id <> NULL
的工作),然後清除與此工作相關聯的工作階段以釋放工作者。 請注意,它可能不足以終止單一會話:您可能必須終止多個會話。
DAC 埠
SQL Server 如果在啟動資料庫引擎之後有可用或動態指派的 TCP 通訊埠,會在 TCP 通訊埠 1434 上接聽 DAC。 錯誤記錄檔包含 DAC 接聽時所使用的通訊埠號碼。 依預設,DAC 接聽程式只接受本機通訊埠上的連接。 如需可啟動遠端管理連接的程式碼範例,請參閱 remote admin connections 伺服器組態選項。
設定遠端管理連線之後,就會啟用 DAC 接聽程式,而不需要重新啟動 SQL Server,而客戶端現在可以從遠端連線到 DAC。 即使 SQL Server 在本機使用 DAC 連線到 SQL Server,然後執行sp_configure預存程式以接受來自遠端連線的連線,您還是可以讓 DAC 接聽程式從遠端接受連線,以從遠端連線接受連線,讓 DAC 接聽程式從遠端接聽程式進行遠端連線。
在叢集組態中,DAC 預設為關閉。 用戶可以執行 sp_configure的遠端系統管理員連線選項,讓 DAC 接聽程式能夠存取遠端連線。 如果 SQL Server 沒有回應且未啟用 DAC 接聽程式,您可能必須重新啟動 SQL Server 以與 DAC 連線。 因此,建議您在叢集系統上啟用 remote admin connections 組態選項。
SQL Server 會在啟動期間動態指定 DAC 通訊埠。 連接到預設執行個體時,DAC 會在連接時避免對 SQL Server Browser 服務使用 SQL Server 解析通訊協定 (SSRP) 要求。 它會先透過 TCP 通訊埠 1434 連接。 若失敗,則會發出 SSRP 呼叫以取得通訊埠。 如果 SQL Server Browser 未接聽 SSRP 要求,連線要求會傳回錯誤。 請參閱錯誤記錄檔,以了解 DAC 接聽時所使用的通訊埠編號。 若 SQL Server 的組態可接受遠端管理連接,DAC 就必須以明確的通訊埠編號起始:
sqlcmd-Stcp:<server,port><>
SQL Server 錯誤記錄檔會列出 DAC 的通訊埠編號,依預設為 1434。 若將 SQL Server 設定為只接受本機 DAC 連接,請利用下列命令使用回送配接器進行連接:
sqlcmd-S127.0.0.1,1434
範例
在此範例中,系統管理員注意到伺服器 URAN123
沒有回應,而且想要診斷問題。 為了進行這項作業,使用者啟動 sqlcmd
命令提示字元公用程式,並使用 URAN123
來表示 DAC,連接到伺服器 -A
。
sqlcmd -S URAN123 -U sa -P <xxx> -A
此時,系統管理員可執行查詢以診斷問題,並盡可能結束未回應的工作階段。
相關工作
相關內容
DBCC CHECKALLOC (Transact-SQL)