2008-12-11

SQL Server Express 與 「專用管理員連接(dedicated administrator connection,DAC)」



依據線上說明,SQL Server Express 版本是有支援「專用管理員連接(dedicated administrator connection,DAC)」,但是要搭配追蹤旗標 7806後才行使用。

這是為了節省資源,除非以追蹤旗標 7806 啟動,否則 SQL Server Express 不會接聽 DAC 通訊埠。

適用版本:SQL Server 2005/2008

以下是關於追蹤旗標 7806的說明:
追蹤旗標 7806:
在 SQL Server Express 上啟用專用管理員連接 (DAC)。依預設,SQL Server Express 上不會保留任何 DAC 資源。範圍:只限全域。
因為追蹤旗標 7806是全域的追蹤旗標,所以在 SQL Server 服務啟動選項上,需要利用 -T 7806 的方式來啟用 SQL Server。

若你需要在 SQL Server Express 2005/2008 上啟用「專用管理員連接(dedicated administrator connection,DAC)」時,請參考以下的步驟:

步驟01. 執行「SQL Server 組態管理員」。
步驟02. 在左邊窗格,點選「SQL Server 服務」。
步驟03. 在右邊窗格內,點選「SQL Server(SQLEXPRESS)」,滑鼠右鍵,選擇「內容」。
步驟04. 在「SQL Server(SQLEXPRESS)內容」視窗,點選「進階」頁面。

請參考下圖所示:



步驟05. 點選「啟動參數」方塊,再點選位於最右邊的下拉符號。
步驟06. 在下拉方塊中,最後一行最後一個字元處,輸入:「;-T 7806」。

請參考下圖所示:


步驟07. 點選「套用」,在「警告」視窗,點選「確定」,在「SQL Server(SQLEXPRESS)內容」視窗,點選「確定」。
步驟08. 啟動 SQL Server Express。
步驟09. 使用「專用管理員連接(dedicated administrator connection,DAC)」登入到 SQL Server Express。
例如,使用 sqlcmd,搭配特殊的系統管理員參數 (-A):
sqlcmd -S localhost\SQLEXPRESS -A
例如,使用「Database Engine 查詢」、「SSMS 查詢編輯器」,在執行個體前面輸入:「admin:」,連線格式為:「admin:」。

請參考下圖所示:


要提醒你的是:
每個 SQL Server 執行個體只能有一個 DAC。
若已有作用中的 DAC 連接存在,則所有透過 DAC 建立連接的新要求都會遭到拒絕,並產生錯誤 17810。

請參考下圖所示:



若你需要知道目前執行個體上,是否已經有「專用管理員連接(dedicated administrator connection,DAC)」的連線,請參考以下的範例:
SELECT session_id N'Session 編號',name N'endpoint 名稱', program_name N'應用程式',
protocol_desc N'通訊協定', host_name N'工作主機', login_name N'登入帳號'
FROM sys.endpoints as t1 INNER JOIN sys.dm_exec_sessions as t2
ON t1.endpoint_id = t2.endpoint_id
WHERE t1.is_admin_endpoint=1


請參考下圖所示:


在「SQL Server 錯誤記錄檔」內,你也可以檢視到「Dedicated admin connection support was established for listening locally on port XXXX」訊息,請參考:
...
2008-12-11 14:21:59.04 Server      Registry startup parameters:
-d C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\master.mdf
-e C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Log\ERRORLOG
-l C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\mastlog.ldf
-T  7806
2008-12-11 14:21:59.12 伺服器         SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.
...
2008-12-11 14:22:02.74 伺服器         Dedicated admin connection support was established for listening locally on port 2031.
...


「SQL Server 錯誤記錄檔」是位於 Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG 和 ERRORLOG.n 檔案中。
例如:
C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Log\ERRORLOG

你可以用任何文字編輯器來檢視 SQL Server 錯誤記錄檔。

以下是有關於「專用管理員連接(dedicated administrator connection,DAC)」的說明:
SQL Server 為系統管理員提供了特殊的診斷連接,可在伺服器的標準連接失效時使用。
這個診斷連接可讓系統管理員存取 SQL Server 以執行診斷查詢和排解疑難問題,即使 SQL Server 未回應標準連接要求。


此專用管理員連接 (DAC) 支援加密以及 SQL Server 的其他安全性功能。 DAC 只允許將使用者內容變更為其他管理使用者。
SQL Server 將不斷嘗試以便讓 DAC 順利連接,但是在極端的情況下可能無法成功。


Microsoft SQL Server 會提供專用管理員連接 (DAC)。即使伺服器對其他用戶端連接沒有回應,系統管理員也可以使用 DAC 來存取 SQL Server Database Engine 的執行中執行個體,以針對伺服器上的問題進行疑難排解。

您可以透過 sqlcmd 公用程式與 SQL Server Management Studio 來存取 DAC。只允許在伺服器上執行之用戶端的連接。不允許網路連接。

若要使用 SQL Server Management Studio 搭配 DAC,請在伺服器名稱前面輸入 ADMIN:,使用 [查詢編輯器] 連接到 SQL Server Database Engine 的執行個體。[物件總管] 無法使用 DAC 來連接。

SQL Server 是以 Database Engine 啟動時動態指派的專用 TCP/IP 通訊埠來接聽 DAC。 錯誤記錄檔包含 DAC 接聽時所使用的通訊埠編號。 依預設,DAC 接聽程式只接受本機通訊埠上的連接。


一旦設定遠端管理連接之後,即會啟用 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:,

SQL Server 錯誤記錄檔會列出 DAC 的通訊埠編號,依預設為 1434。 若將 SQL Server 設定為只接受本機 DAC 連接,請利用下列命令使用回送配接器進行連接:
sqlcmd –S127.0.0.1,1434

關於旗標的說明:
在 SQL Server 中有兩種類型的追蹤旗標:工作階段和全域。工作階段追蹤旗標用於某個連接,而且只會在該連接顯示出來。
全域追蹤旗標是設在伺服器層級,只要是該伺服器上的連接,都看得到它們。某些旗標只能啟用為全域旗標,某些則可以啟用為全域或工作階段範圍。


適用下列規則:
全域追蹤旗標必須全域啟用,否則追蹤旗標就沒有效果。我們建議您利用 -T 命令列選項,在啟動時啟用全域追蹤旗標。
如果追蹤旗標具有全域或工作階段的範圍,可以使用適當的範圍加以啟用。以工作階段層級啟用的追蹤旗標絕不會影響其他工作階段,而且當開啟該工作階段的 SPID 登出時,該追蹤旗標的效果也隨之消失。


請利用下列方法之一,將追蹤旗標設為開啟或關閉:
使用 DBCC TRACEON 和 DBCC TRACEOFF 命令。
例如,DBCC TRACEON 2528:若要全域啟用追蹤旗標,請利用 -1 引數使用 DBCC TRACEON:DBCC TRACEON (2528, -1)。若要關閉全域追蹤旗標,請利用 -1 引數使用 DBCC TRACEOFF。

利用 -T 啟動選項來指定在啟動期間開啟追蹤旗標。
-T 啟動選項會全域啟用追蹤旗標。您不能利用啟動選項啟用工作階段層級的追蹤旗標。如需有關啟動選項的詳細資訊,請參閱<使用 SQL Server 服務啟動選項>。

請利用 DBCC TRACESTATUS 命令來判斷目前有哪些旗標在使用中。

參考資料:
SQL Server Express 功能
http://msdn.microsoft.com/zh-tw/library/ms165636(SQL.90).aspx
http://msdn.microsoft.com/zh-tw/library/ms165636.aspx

追蹤旗標 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms188396.aspx

使用 SQL Server 服務啟動選項
http://msdn.microsoft.com/zh-tw/library/ms190737.aspx

DBCC TRACESTATUS (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms187809.aspx

使用專用管理員連接
http://msdn.microsoft.com/zh-tw/library/ms189595.aspx

如何:利用 SQL Server Management Studio 使用專用管理員連接
http://msdn.microsoft.com/zh-tw/library/ms178068.aspx

1 則留言:

  1. 本來要放棄了,原來是這樣設定,謝謝了
    很清楚的解說

    回覆刪除