深入探討SQL Server中DAC連接及其它

来源:http://www.cnblogs.com/RobZH/archive/2016/08/25/5806297.html
-Advertisement-
Play Games

DAC(Dedicated Admin Connection)是SQL Server 2005引入的一個東西,目的是在SQL Server發生嚴重性能問題的時候仍保留有限的資源保證管理員能夠執行一些簡單的命令用於問題診斷、釋放資源、殺死肇事進程等。微軟官方對DAC的說明:使用專用管理員連接。對於DA ...


DAC(Dedicated Admin Connection)是SQL Server 2005引入的一個東西,目的是在SQL Server發生嚴重性能問題的時候仍保留有限的資源保證管理員能夠執行一些簡單的命令用於問題診斷、釋放資源、殺死肇事進程等。微軟官方對DAC的說明:使用專用管理員連接。對於DAC使用的一般情況,有兩個不錯的Blog值得推薦:
http://www.cnblogs.com/kerrycode/p/3344085.html
http://www.cnblogs.com/lyhabc/archive/2012/09/23/2698702.html

上面的兩篇blog涉及到的基本是DAC訪問單機單實例的情況。本文試圖對DAC訪問單機多實例的情況也做個探討。

1)單機單SQL Server實例,且SQL Server實例使用預設埠(1433)

--以下的形式都可以訪問
sqlcmd -S myServer -U myUser -P myPassword -A
sqlcmd -S ADMIN:myServer -U myUser -P myPassword
sqlcmd -S myServer,1434 -U myUser -P myPassword
sqlcmd -S xxx.xxx.xxx.xxx -U myUser -P myPassword -A
sqlcmd -S xxx.xxx.xxx.xxx,1434 -U myUser -P myPassword
說明:
a) sqlcmd命令行中參數與參數值之間可以有空格也可以沒有;如果你的密碼中有空格,你可以用雙引號把你的密碼引起來;
b) sqlcmd命令中的“-S”其實也可以用"/S",其它參數也一樣;
c) 1434是SQL Server連接的預設埠號;
d) 在伺服器前加"ADMIN:"也是為了指定進行DAC連接;
e) “-A”是在sqlcmd命令行中指定DAC連接的參數;
f) "-A","ADMIN:",",1434"不能在一條命令中出現兩個或以上,否則會報錯;
g) 不在命令行中加入這3個參數("-A","ADMIN:",",1434")的任何一個,登錄也能成功,差別在於你使用的連接是普通連接,不是DAC連接。一般來說,普通連接能用的資源更多,但是當系統性能出現嚴重問題的時候普通連接可能沒法建立,這也是引入DAC的初衷;再就是DAC連接下能看到一些有助於診斷的秘密視圖(參見上面推薦的第一個blog)。

2)單機單SQL Server實例,SQL Server實例使用非預設埠

我通過測試得到的結論是:對於單機單SQL Server實例,使用非預設埠時候的DAC訪問跟使用預設埠1433時候完全一樣。網上的一些論壇說要確保“SQL Server Browser”在運行,似乎不是必要的,至少我測試(用的SQL Server 2008 R2 SP3)過程中“SQL Server Browser”是不是在運行不影響訪問。

3)單機多SQL Server實例

通過DAC來訪問單機多SQL Server實例的情況要複雜一些。上面的幾條命令行在這種情況下都會失效。原因在兩個:
a) DAC訪問是實例級別的,服務端得有辦法知道你要訪問的是哪個實例;
b) 在單機多實例的情況下監視DAC訪問的是隨機埠,而不再是預設的1434

--怎麼破?
我們在訪問資料庫引擎的時候,碰到單機多實例的情況有兩種辦法,一種是在配置S參數的時候加上實例名,一種是加實例埠號。命令行的形式類似下麵:
sqlcmd -S myServer\InstanceName -U myUser -P myPassword
sqlcmd -S xxx.xxx.xxx.xxx\InstanceName -U myUser -P myPassword
sqlcmd -S myServer,6xxx -U myUser -P myPassword
sqlcmd -S xxx.xxx.xxx.xxx,6xxx -U myUser -P myPassword

先從實例名著手:
sqlcmd -S myServer\InstanceName -U myUser -P myPassword -A
sqlcmd -S xxx.xxx.xxx.xxx\InstanceName -U myUser -P myPassword -A
sqlcmd -S ADMIN:myServer\InstanceName -U myUser -P myPassword
sqlcmd -S ADMIN:xxx.xxx.xxx.xxx\InstanceName -U myUser -P myPassword

經測試確認,以上4種連接方式都是OK的。註意一點,對於InstanceName的解析是伺服器上的“SQL Server Browser”進行的,如果這個服務不在運行,DAC的訪問是要失敗的。流程是:Browser根據“myServer\InstanceName”或者“xxx.xxx.xxx.xxx\InstanceName”找到你要訪問的實例,然後根據“-A”或者“ADMIN:”找到你要訪問的埠。

既然這樣可以進行DAC訪問,那用類似訪問資料庫引擎的方式,把上面命令中的“\InstanceName”改成",xxxx"格式的埠號是不是也行呢?
sqlcmd -S myServer,xxxx -U myUser -P myPassword -A
sqlcmd -S xxx.xxx.xxx.xxx,xxxx -U myUser -P myPassword -A
sqlcmd -S ADMIN:myServer,xxxx -U myUser -P myPassword
sqlcmd -S ADMIN:xxx.xxx.xxx.xxx,xxxx -U myUser -P myPassword

如果你在幾個命令行中配的埠號跟訪問資料庫引擎時候配置的埠號是一樣的話,答案是不行。原因在哪裡呢?那個埠是資料庫引擎的訪問埠,並不是被監聽的DAC埠,因為不在一個頻道上DAC還不知道你想訪問。我的理解,在命令行中指定了埠號的情況下,Browser認為那就是你想訪問的埠,結果因為它並不是那個隨機的DAC埠而導致了失敗。

DAC訪問偵聽跟資料庫引擎一樣,從根本上來說也是一個tcp服務(關於這一點你可以查看sys.endpoints來確認)。是服務,我們如果能知道它偵聽的埠號就應該能解決問題。但不幸也在這兒,如上面b)所說,在單機多實例的情況下這個被監聽的埠是隨機的。視圖sys.endpoints是能查到當前SQL Server實例上的tcp服務信息的,每個endpoint都有一條記錄,比如你就能在這裡查到用於鏡像的5022,但遺憾的是對於DAC,埠那一列卻顯示的是0.通過埠訪問的這條路我沒能走通。

4)DAC訪問與防火牆

如果有人通過我上面提到的有效的方式進行DAC訪問卻不幸失敗了,也請不要奇怪。拋開埠劫持等特殊情況,DAC訪問失敗最常見的就是受到防火牆設置的攔截。對於上面提到的兩種單機單實例的情況,只要確認服務端配置了允許對tcp1434埠的訪問,DAC連接應該是沒有問題的;複雜的情況仍然是單機多實例。

對於單機多實例的情況,由於DAC偵聽的埠是隨機的,不能指定,所以我們沒法在防火牆上給它開口子,除非關閉防火牆。事實上,我在測試的時候就是讓伺服器上的Windows防火牆對域範圍內的訪問不起作用(關閉針對域內部訪問的攔截)的。那要想從外網訪問怎麼辦?總不能為了一個DAC連接把這台伺服器赤裸裸的暴露出來(給它配外網IP)或者關掉公司的級別的防火牆吧?這倒不必,可以用VPN或者埠映射從防火牆上開個小口子,這樣你就能連接到區域網,從那進行DAC訪問。

5)如何確認當前是DAC連接還是普通連接

可以使用下麵的SQL:
select	s.session_id,
	s.login_time,
	s.login_name,
	s.host_name,
	p.endpoint_id,
	p.protocol_desc,
	p.name
from sys.dm_exec_sessions s
inner join sys.endpoints p on s.endpoint_id = p.endpoint_id

你可以從login_time,login_name,host_name來判斷出哪一個是你當前的連接session,如果是DAC連接的話,你能從name列看到“Dedicated Admin Connection”。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:首先查看一下關於UIButton的定義 UIButton是繼承於UIControl,並且也遵循NSCoding的協議; 知識點1:關於UIControlState的Enum值 知識點2:contentHorizontalAlignment;可以設置UIButton文字的對齊方式,contentH ...
  • 改變顏色 [_hotProductsTableView setSeparatorColor : kSeparatorColor]; -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; if ([_hotProductsTable ...
  • 最近在Android手機開發中使用了ORM框架Sugar1.4,節省了大量代碼,同時也遇到不少麻煩,記錄如下: 1. 使用group by將查詢結果轉換為POJO對象 在Sugar1.4中,可以使用如下代碼將查詢結果轉換為POJO對象。 該方法會調用SugarRecord類的inflate方法,如下 ...
  • 表大小 慢的sql select a.city, a.agent_id, a.username, a.real_name, phone, zgy_name, login_count, user_count, count(distinct b.invest_id) user_invested, sum ...
  • 項目裡面需要對mongodb的性能進行測試,看了下網上很多做法都是使用YCSB進行測試,因此開始學習使用YCSB。 參考資料: 1 安裝 基於參考文檔(https://github.com/brianfrankcooper/YCSB/tree/master/mongodb )安裝java,mvn,y ...
  • 久等了,近期公司比較忙,學習的時間都沒有啊,到今日才有時間呢!!!好了,下麵就跟著筆者開始配置Hadoop集群吧。 hosts文件和SSH免密碼登錄配置好了之後,現在進入Hadoop安裝目錄,修改一些配置文件,修改配置還是相對簡單的,一下是需要修改的文件內容(當然這裡只是學習時的配置,更加深入的配置 ...
  • 轉自:http://chuansong.me/n/443660447865 PDB 的創建和訪問 在使用 dbca 建庫時,創建資料庫之前,可以保存一下創建腳本,分析其具體執行過程。以自定義方式創建名稱為julia的資料庫為例,其主要腳本 julia.sql 中包含如下腳本調用: 在第一個腳本 Cr ...
  • 資料庫集群 集群的存在意義是為了保證高可用、數據安全、擴展性以及負載均衡。 什麼是集群? 由二台或更多物理上獨立的伺服器共同組成的"虛擬"伺服器稱之為集群伺服器。一項稱做MicroSoft集群服務(MSCS)的微軟服務可對集群伺服器進 行管理。一個SQL Server集群是由二台或更多運行SQL S ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...