文章出處
文章列表
一、官網關于SQL SERVER Browser服務的解釋(谷歌翻譯后稍作修改的):
背景:
在SQL Server 2000之前,只能在計算機上安裝一個SQL Server實例。 SQL Server通過官方互聯網號碼分配機構(IANA)偵聽端口1433上的傳入請求,然后分配給SQL Server。只有一個實例可以使用這個端口,所以當SQL Server 2000引入了對多個SQL Server實例的支持時,開發了SQL Server解析協議(SSRP)來偵聽UDP端口1434。該監聽器服務響應客戶端對所有已安裝實例的帶實例名字的請求,返回實例們所使用的端口號和命名管道。為了解決SSRP系統的局限性,SQL Server 2005引入了SQL Server Browser服務作為SSRP的替代品。
SQL Server Browser的工作原理:
當SQL Server實例啟動時,如果TCP / IP協議啟用,則會為服務器分配一個TCP/IP端口。如果命名管道協議啟用,SQL Server將偵聽特定的命名管道。該端口或“管道”被該特定實例用于與客戶端應用程序交換數據。在安裝過程中,TCP端口1433和pipe \sql\query分配給默認實例,但之后可以由服務器管理員使用SQL Server Configuration Manager更改這些實例。因為只有一個SQL Server實例可以使用默認端口或管道,所以為命名實例(包括SQL Server Express)分配不同的端口號和管道名稱。
默認情況下,命名實例和SQL Server Express實例啟動時配置為使用動態端口,即SQL Server啟動時分配可用端口。如果需要,可以將特定端口分配給SQL Server實例。連接時,客戶端可以指定特定端口;但是如果端口是動態分配的,則在SQL Server重新啟動時,端口號可以隨時更改,因此客戶端不知道正確的端口號。
SQL Server Browser啟動時,配置使用UDP端口1434。SQL Server Browser讀取注冊表,標識計算機上的所有SQL Server實例,并記下使用的端口和命名管道。當服務器有兩個或更多網卡時,SQL Server瀏覽器將返回第一個啟用的SQL Server端口。 SQL Server瀏覽器支持ipv6和ipv4。
當SQL Server客戶端請求SQL Server資源時,客戶端網絡庫使用端口1434向服務器發送UDP消息。SQL Server Browser會使用所請求實例的TCP / IP端口或命名管道進行響應。然后,客戶端應用程序上的網絡庫通過使用所需實例的端口或命名管道向服務器發送請求來完成連接。
二、個人實驗:
從官網的解釋來看,SQL Server Browser是為解決多實例情況下,非默認實例使用動態端口號的情況。因此實例重啟后,客戶端可能無法連接命名實例。因此需要開啟SQL Server Browser服務來使用UDP的1434端口監聽本服務器所有命名實例,并為客戶端請求返回命名實例所使用的真實端口或命名管道。
1)實驗環境
SQL Server 2008R2版本,安裝了默認實例MSSQLSERVER和命名實例TEST,其中默認實例使用默認的1433端口,TEST使用默認的動態分配端口。
實驗過程中主要觀察:
1、是否可以使用sqlcmd聯通
2、netstat -ano的端口占用情況
2)實驗說明:
開啟SQL Server Browser服務等同于開啟UDP的1434端口。而且如果將默認實例的端口換為1434,Browser服務依然使用UDP1434端口,不會改變。

3)實驗步驟
1.只開啟兩個實例的服務,默認實例使用1433端口,TEST實例使用動態端口,用sqlcmd遠程嘗試連接兩個實例的的結果如下:

2.開啟SQL Server Browser服務之后:

此時如果關閉SQL Server Browser:
sqlcmd -S 192.168.111.69\TEST -U sa -P Leo123 依然會成功,但是將動態端口號設置為0后重啟服務就會失敗,說明只要啟動過一次Browser服務且數據庫服務沒重啟過(這意味著動態端口號沒變過)就一直可以連通。
3.將默認實例的端口號改為動態端口:
sqlcmd -S 192.168.111.69\MSSQLSERVER -U sa -P Leo123 無論Browser服務是否開啟,都無法連接。
說明此服務對默認實例無效。
4)實驗結論
SQL Server Browser只負責使用UDP的1434端口轉發使用動態端口的命名實例的信息給客戶端,默認實例必須使用固定端口,并告知客戶端。
因此如果服務器上有多個實例,且命名實例使用動態端口,那么一定要開啟Browser服務。
對使用固定端口1433連接服務器的程序來說,如果是命名實例,那么最好設置固定的端口號,并修改配置文件使用新的固定端口號連接。此時可以關閉Browser服務。
在集群環境中,應保證Browser服務在所有節點始終開啟。
最后,也希望大家不要迷信這個實驗結論,不保證能解釋所有問題,要自己動手驗證。
三、一些附加信息:
1.可以使用netstat -ano|findstr PID來查看SQL Server監聽的端口號,其中[: :]表示所有IP地址,[: : 1]表示127.0.0.1
2.如何修改SQL Server實例的默認端口號:
修改下圖的IPALL即可,動態端口設為空表示使用固定端口,設為0表示使用動態端口。

文章列表
全站熱搜