首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005 DAC 專用管理員連接完整指南:啟用、限制、修改系統表實戰

     編輯:SQL Server 2005

什麼是 DAC?

專用管理員連接 (Dedicated Administrator Connection, DAC) 是 SQL Server 2005 引入的特殊診斷連線,當標準連線因資源耗盡、鎖死或觸發器錯誤而無法建立時,DAC 仍可讓 sysadmin 角色成員連線執行診斷查詢、殺死阻塞進程、修復故障。

DAC 的核心用途

  • 在伺服器無響應標準連線時,仍能訪問執行診斷查詢(如查看 sys.dm_exec_requests、sys.dm_os_waiting_tasks)。
  • 終止失控會話 (KILL spid)。
  • 繞過登錄觸發器錯誤(DAC 不執行 LOGON 觸發器)。
  • 單用戶模式下修改系統表(配合啟動參數 -m)。

連線方式

1. sqlcmd 命令列

sqlcmd -S server_name -A          # 使用 -A 開關
sqlcmd -S admin:server_name       # 或使用 admin: 前綴

2. SSMS 查詢編輯器

在「連線到伺服器」視窗的伺服器名稱輸入 ADMIN:instance_name(如 ADMIN:QIANGGUO\ODS)。

DAC 重要限制

  1. 單一連線:每實例僅允許一個 DAC,第二個請求會報錯 17810。
  2. 預設資料庫:嘗試連登錄帳戶的預設資料庫;若離線報錯 4060。建議啟動時加 -d master 直接連 master。
  3. 禁止平行查詢:執行 RESTORE、BACKUP 等會報錯 3637。
  4. 資源極限:僅保留極少資源供簡單診斷用,嚴禁跑複雜聯接或易阻塞查詢。建議用 READ UNCOMMITTED 隔離級或設 LOCK_TIMEOUT。
  5. Express 版不支援:SQL Server 2005 Express Edition 無 DAC 功能。

啟用遠程 DAC

sp_configure 'remote admin connections', 1;
GO
RECONFIGURE;
GO

設定後立即生效,無需重啟。預設僅偵聽 127.0.0.1:1434。

常用診斷腳本

-- 記憶體快取計數器
SELECT * FROM sys.dm_os_memory_cache_counters;
-- 正在執行的請求
SELECT * FROM sys.dm_exec_requests;
-- 所有會話
SELECT * FROM sys.dm_exec_sessions;
-- 結束會話
KILL ;
-- 查詢特定會話任務
SELECT * FROM sys.dm_os_tasks WHERE session_id = ;

常見錯誤與解決

錯誤代碼/訊息解決方案
HResult 0x274D,TCP 提供程式: 目標機器積極拒絕檢查 SQL Server 遠程連線設定、防火牆、SQL Browser 服務。
不支援專用管理員連接 (ObjectExplorer)確認已執行 sp_configure 'remote admin connections', 1 且用戶為 sysadmin。
登錄超時先用一般連線成功,再用 DAC;或檢查實例負載。
錯誤 10054:遠程主機強迫關閉連線已有 DAC 連線佔用,先關閉現有會話。

進階應用:單用戶模式 + DAC 修改系統表

SQL Server 2005 移除了 sp_configure 'allow updates', 1 直接修改系統表的能力。若必須修改系統目錄(極少數情況),步驟如下:

  1. 以單用戶模式啟動實例:
    "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe" -m
  2. SSMS 連線時伺服器名輸入 admin:InstanceName 使用 DAC 登入。
  3. 直接對系統表執行 UPDATE/DELETE(無需 allow updates)。

警告:直接修改系統表極度危險,可能導致資料字典不一致、資料庫損壞。優先使用系統預存程序(如 sp_rename、sp_change_users_login)完成同等任務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved