使用專用管理員連接
更新: 2006 年 4 月 14 日
SQL Server 2005 為系統管理員提供了特殊的診斷連接,可在伺服器的標準連接失效時使用。這個診斷連接可讓系統管理員存取 SQL Server 以執行診斷查詢和排解疑難問題,即使 SQL Server 未回應標準連接要求。
此專用管理員連接 (DAC) 支援加密以及 SQL Server 的其他安全性功能。DAC 只允許將使用者內容變更為其他管理使用者。
SQL Server 將不斷嘗試以便讓 DAC 順利連接,但是在極端的情況下可能無法成功。
連接 DAC
依預設,只能從執行於伺服器上的用戶端進行連接。除非使用 SQL Server 介面區組態工具或使用 sp_configure 預存程序搭配 remote admin connections 選項來設定網路連接,否則不允許進行網路連接。
只有 SQL Server sysadmin 角色的成員可以使用 DAC 進行連接。
DAC 的存取與支援須使用特殊的系統管理員參數 (-A),透過命令提示字元公用程式 sqlcmd 來執行。如需使用 sqlcmd 的詳細資訊,請參閱<以指令碼變數使用 sqlcmd>。您也可以前面加上 admin: 連接到執行個體名稱,如 sqlcmd -Sadmin:<instance_name> 這種格式。您也可以藉由連接到 admin:<instance_name>,從「SQL Server Management Studio 查詢編輯器」起始 DAC。
限制
由於 DAC 僅在少數的情況下才會為了診斷伺服器問題而建立,因此這項連接有某些限制:
- 若要保證有足夠的資源可供連接使用,每個 SQL Server 執行個體只能有一個 DAC。若已有作用中的 DAC 連接存在,則所有透過 DAC 建立連接的新要求都會遭到拒絕,並產生錯誤 17810。
- 為了節省資源,除非以追蹤旗標 7806 啟動,否則 SQL Server 2005 Express Edition 不會接聽 DAC 通訊埠。
- DAC 最初會嘗試連接到與登入相關聯的預設資料庫。連接成功後,您就可以連接到 master 資料庫。若預設資料庫為離線狀態,或因其他原因無法使用,連接會傳回錯誤 4060。但是,若您使用下列命令來覆寫預設資料庫以連接到 master 資料庫,連接就會成功:
sqlcmd –A –d master
建議您使用 DAC 連接到 master 資料庫,因為只要啟動 Database Engine 執行個體,就一定可以使用 master。 - SQL Server 禁止以 DAC 執行平行查詢或命令。例如,若您以 DAC 執行下列其中一項陳述式,就會產生錯誤 3637:
- RESTORE
- BACKUP
- 只有某些限定的資源必定可透過 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 命令,例如 DBCC FREEPROCCACHE、DBCC FREESYSTEMCACHE、DBCC DROPCLEANBUFFERS**,** 及 DBCC SQLPERF。請勿執行需要大量資源的命令,例如 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 是以 Database Engine 啟動時動態指派的專用 TCP/IP 通訊埠來接聽 DAC。錯誤記錄檔包含 DAC 接聽時所使用的通訊埠編號。依預設,DAC 接聽程式只接受本機通訊埠上的連接。如需可啟動遠端管理連接的程式碼範例,請參閱<remote admin connections 選項>。
一旦設定遠端管理連接之後,即會啟用 DAC 接聽程式而不需重新啟動 SQL Server,而且用戶端可以從遠端連接到 DAC。您可以先在本機使用 DAC 連接到 SQL Server,然後執行 sp_configure 預存程序以接受遠端的連接,藉以啟用 DAC 接聽程式使其可接受遠端連接,即使 SQL Server 未回應仍可執行。
在叢集組態中,DAC 預設為關閉。使用者可執行 sp_configure 的 remote admin connection 選項,啟用 DAC 接聽程式以存取遠端連接。若 SQL Server 未回應且 DAC 接聽程式未啟用,您可能必須重新啟動 SQL Server 以連接 DAC。因此,建議您在叢集系統上啟用 remote admin connections 組態選項。
SQL Server 會在啟動期間動態指定 DAC 通訊埠。在連接到預設的執行個體時,DAC 會在連接時避免對 SQL Server Browser 服務使用 SQL Server Resolution Protocol (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
命令提示字元公用程式,並使用 -A
來表示 DAC,連接到伺服器 URAN123
。
sqlcmd -S URAN123 -U sa -P <xxx> –A
此時,系統管理員可執行查詢以診斷問題,並盡可能結束未回應的工作階段。
請參閱
工作
如何:利用 SQL Server Management Studio 使用專用管理員連接
概念
其他資源
sqlcmd 公用程式
SELECT (Transact-SQL)
sp_who (Transact-SQL)
sp_lock (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
SET LOCK_TIMEOUT (Transact-SQL)
KILL (Transact-SQL)
DBCC CHECKALLOC (Transact-SQL)
DBCC CHECKDB (Transact-SQL)
DBCC OPENTRAN (Transact-SQL)
DBCC INPUTBUFFER (Transact-SQL)
交易相關動態管理檢視和函數
追蹤旗標 (Transact-SQL)
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|