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

登錄觸發器導致 SQL Server 無法連線?DAC 專用管理員連接救援指南

     編輯:SQL Server 2005

問題現象

當登錄觸發器發生錯誤(如引用不存在的資料庫或表)時,所有正常登錄嘗試將失敗,錯誤訊息如圖所示。

登錄觸發器錯誤

圖 1:登錄觸發器錯誤導致連線失敗

錯誤觸發範例

CREATE TRIGGER BadLogonTrigger ON ALL SERVER FOR LOGON
AS
BEGIN
    INSERT INTO BadDB.dbo.SomeTable VALUES ('Test');
END;
GO

因 BadDB 不存在,該觸發器會導致所有登錄嘗試失敗。

解決方案:使用專用管理員連接 (DAC)

DAC 是 SQL Server 為管理員保留的「後門」,允許在標準連線全部失敗時仍能連線進行診斷。關鍵特性:DAC 不會執行登錄觸發器,因此可繞過故障觸發器。

連線方式

  • SQLCMD:使用 -A 開關:
    sqlcmd -S server_name -A
  • SSMS:在「連線到伺服器」對話框的伺服器名稱前加 ADMIN: 前綴,如 ADMIN:server_name。

SSMS 使用 DAC 連線

圖 2:SSMS 指定 ADMIN: 連線

修復步驟

  1. 透過 DAC 連線(本機或已啟用遠程 DAC)。
  2. 執行 DROP TRIGGER BadLogonTrigger ON ALL SERVER; 移除故障觸發器,或用 DISABLE TRIGGER 停用它。
  3. 驗證一般連線已恢復正常。

DAC 使用限制與注意事項

  • 每個實例同一時間僅允許一個 DAC 連線。
  • 預設連線至登錄帳戶的預設資料庫;若該資料庫離線,請加參數 -d master 強制連 master。
  • 不可執行平行查詢、RESTORE/BACKUP 等大量資源操作。
  • Express 版本預設不支援 DAC。
  • 遠程 DAC 需啟用:sp_configure 'remote admin connections', 1; RECONFIGURE;

常見連線錯誤排查

錯誤現象原因與解決
TCP 連線被拒絕檢查 SQL Server 遠程連線設定、防火牆、瀏覽器服務是否啟動。
「不支援專用管理員連接」確認已啟用遠程 DAC,且用戶為 sysadmin 角色成員。
登錄超時先用一般連線成功後,再嘗試 DAC;或檢查實例是否處於高負載。
遠程主機強迫關閉連線已有其他 DAC 連線佔用,先關閉現有 DAC 會話再試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved