星期五, 12月 21, 2012

[SQL] Dedicated Administrator Connection(DAC)

SQL Server 正常(標準)連線失效時,可以利用 DAC 進行連線來執行診斷查詢和排解疑難問題。

各版本的 DAC 預設是開啟,但 Express 為節省資源,除非追蹤旗標 7806 啟動,否則無法使用 DAC。
  • Express 未開啟追蹤旗標 7806 時,SSMS 要使用 DAC 連線時的錯誤訊息。
[SQL] DAC-1
  • SQL Server Configuration Manager => SQL Server 服務 => SQL Server instance 右鍵內容 => 啟動參數 Tag => 加入啟動參數 '-T 7806'。
[SQL] DAC-2
  • 設定追蹤旗標後必須重新啟動,才會產生作用。
[SQL] DAC-3


使用 DAC 有兩種方式,使用 sqlcmd 或 SSMS 來進行連線。
  • sqlcmd:進入命令提示字元內,輸入 sqlcmd -S ComputerName\Instance -d master -A 就可以利用 DAC 進入。
  1. -S 參數:指定要連接的 SQL Server Instance,沒有指定的話,會連線至預設的 Instance
  2. -d 參數:等同於下 USE db_name 的 T-SQL 指令,MSDN 建議使用 DAC 連接到 master DB 去,因為只要啟動 instance,就一定可以連線至 master。
  3. -A 參數:利用專用管理員連接 (DAC) 來登入 SQL Server。
[SQL] DAC-5
  • SSMS:物件總管無法連接 DAC,必須利用 Database Engine 查詢才可以連線。
使用物件總管來進行連線,會出現下列錯誤。

[SQL] DAC-7

[SQL] DAC-10

新增一個 Database Engine 查詢,並在 SSMS 連線登錄介面的伺服器名稱前加上 "admin:",就可以利用 DAC 連線。

[SQL] DAC-8

[SQL] DAC-6

利用 sys.dm_exec_sessions 和 sys.endpoints 可以查詢是否有 DAC 連線。
SELECT
  T2.session_id ,    -- Session 編號
  T1.name ,          -- endpoint 名稱 
  T2.program_name ,  -- 應用程式
  T1.protocol_desc , -- 通訊協定 
  T2.host_name ,     -- 工作主機       
  T2.login_name ,    -- 登錄帳號
  T2.status          -- 狀態
FROM sys.endpoints AS T1
  JOIN sys.dm_exec_sessions AS T2 ON T1.endpoint_id = T2.endpoint_id
WHERE T1.is_admin_endpoint = 1
[SQL] DAC-11

一個 SQL Server instance 只能有一條 DAC 連線,已存在 DAC 連線時,再利用 DAC 連線進入,會出現下列的錯誤訊息。
  • sqlcmd 第二次登錄時的錯誤訊息。
[SQL] DAC-12
  • SSMS 第二次登錄時的錯誤訊息。
[SQL] DAC-13

SQL Server 預設不允許遠端電腦利用 DAC 連線連入,要進行遠端 DAC 連線必須開啟 remote admin connections 的伺服器設定。
  • 在 SSMS 中開啟
[SQL] DAC-14
  • T-SQL 語法開啟
EXEC sp_configure 'remote admin connections' , 1
GO
RECONFIGURE
GO
利用 NB-JengTing\SQL2012 電腦遠端 DAC 登入 WIN7-JengTing\SQL2012 電腦,結果如下圖。

[SQL] DAC -15
  • 20180705
閱讀該篇文章 - SQL Server管理者專用的連線Dedicated Admin Connection(DAC) 時發現 DAC 連線是使用 1434 Port 來連線

沒有留言:

張貼留言