會話的建立分成2個部分:
1.連接,即找到這個實例
2.認證,告訴sql server誰要連接
目錄
6.連接的建立和問題排查... 1
6.1協議選擇和別名... 1
6.1.1 服務器網絡配置... 1
6.1.2 SQL Server Browser的作用... 1
6.1.3 客戶端網絡配置... 2
6.1.4 客戶端網絡連接選擇機制... 2
6.2 連接失敗檢測步驟——命名管道... 2
6.3連接失敗檢測步驟——TCP/ip. 2
6.3.1 SQL Server監聽TCP/IP端口... 2
6.3.2 客戶端TCP/IP協議配置... 2
6.3.3 TCP/IP連接keepalive機制... 3
6.3.4 配置SQL Server的keepalive. 3
6.3.5 配置客戶端的keepalive. 3
6.3.6 TCP/IP連接問題的解決步驟... 3
6.4一般性網絡錯誤... 4
6.5 利用Ring Buffer排查連接問題... 4
6.1協議選擇和別名常用協議有3種:
1.Shard Memory:本地訪問會使用的,一般用不到
2.TCP/IP
3.Named Pipes:命名管道不是基于網絡協議的,而是基于Server Message Block套件的一種協議,使用IPC$共享來無縫和透明的傳輸數據和用戶認證上下文,在訪問IPC$共享的時候先要通過Windows認證,這也是命名管道的好處之一。
6.1.1 服務器網絡配置SQL Server的配置管理器可以設置各個協議的開啟和關閉。配置好協議之后重啟服務,會在errorlog中看到服務是否正常啟動。
6.1.2 SQL Server Browser的作用對于命名實例,每次啟動綁定的端口不一樣。所以SQL Server開發了一套SQL Server解析協議(SSRP)用來監聽UDP1434端口。當一個客戶端要訪問這臺服務器上的SQL Server實例,都會先詢問UDP1434端口,然后由SSRP協議告訴客戶端本臺服務器上所安裝的SQL Server實例的端口號及命名管道。
SQL Server Browser最小權限如下:
1.拒絕通過網絡訪問該計算機
2.拒絕本地登錄
3.拒絕以批處理作業登錄
4.拒絕通過“終端服務”登錄
5.作為服務登錄
6.讀寫與網絡通信相關的SQL Server注冊項
SQL Server Browser讀取注冊表信息,識別計算機上的所有實例,并注明他們使用的端口和命名管道。
6.1.3 客戶端網絡配置客戶端有4中驅動:
1.MDAC或者WDAC,基于windows,不需要安裝,可以通過cliconfg.exe配置
2.SQL Server Native Client,SQL Server帶的安裝了才有,隨SQL Server版本變化而變化。在SQL Server配置管理器也可以對Native Client進行配置。
3.SQLClient,客戶端應用程序使用的是托管編程代碼,目前一般使用ADO.NET來連接SQL Server。SQLClient沒有固定配置工具,是按照Shared Memory->TCP/IP->Named Pipes順序來連接的。
4.JDBC,用來給java程序連接SQL Server。
6.1.4 客戶端網絡連接選擇機制SQL Server網絡連接機制:
1.SQL Server有自己的網絡協議,配置選項,決定SQL Server偵聽哪些協議
2.一臺服務器上可以有多個SQL Server實例,每個實例使用不同的端口和管道。SQL Server Browser通過讀取注冊表知道所有實例的網絡配置信息。
3.客戶端的數據庫連接組件上可以配置候選的網絡協議。
客戶端開啟了多個網絡協議,一般最后決定使用什么協議的順序如下:
1.連接字符串中指定協議
2.客戶端別名
3.尋找相應數據驅動的LastConnect注冊記錄
4.通過SQL Server Browser得知端口號或者管道名稱
6.2 連接失敗檢測步驟——命名管道略
6.3連接失敗檢測步驟——TCP/IP6.3.1 SQL Server監聽TCP/IP端口SQL Server監聽端口,可以為機器上的每個IP地址都設置獨立的端口號(無法配置出來),也可以為所有的IP設置統一的端口號。
6.3.2 客戶端TCP/IP協議配置略
6.3.3 TCP/IP連接keepalive機制客戶端和服務器之間的tcp連接是長連接,當客戶端連接到服務器的時候指定了keepaliveinterval和keepalivetime參數,在連接空閑時間超過keepalivetime,tcp就會以keepaliveinterval為間隔自動發出keepalive包測試連接是否存活。如果keepalive檢測次數超過注冊表的TcpMaxDataRetransmissions的定義,對方還是沒有反應,就會關閉這個有問題的連接。
Sql server的keepalivetime為30s,keepaliveinterval為1s,windows tcp配置默認TcpMaxDataRetransmissions為5s。
服務端的管服務端的,客戶端的管客戶端的,但是任何一個超過閥值都會關閉連接。
6.3.4 配置SQL Server的keepalive可以在SQL Server配置管理器中配置tcp的keepalive時間。當然也可以在注冊表上修改。
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/MSSQL12.MSSQLSERVER /MSSQLServer/SuperSocketNetLib/Tcp
TcpMaxDataRetransmissions也可以在注冊表上修改:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/Tcpip/Parameters
6.3.5 配置客戶端的keepalive任何客戶端都有keepalive機制,keepalivetime為30s,keepaliveinterval為1s。其中只有native client可以在SQL Server配置管理器上修改。
當然可以在注冊表上修改
6.3.6 TCP/IP連接問題的解決步驟解決問題思路:
1.驗證SQL Server是否監聽端口,可以查看錯誤日志
2.驗證SQL Server監聽的端口和配置的值是否一致
3.檢查網絡是否正常
4.telnet查看是否可以連接到某個端口
5.檢查登錄用戶權限
6.3.6.1 監聽多個端口多個端口的監聽,可以在設置端口是用逗號隔開
端口綁定失敗,在啟動是時候會報錯。
可以查看端口是否被占用
6.3.6.3 檢查連接使用的協議SELECT*FROMsys.dm_exec_connections
6.3.6.4 訪問防火墻后的SQL Server略
6.4一般性網絡錯誤略
6.5 利用Ring Buffer排查連接問題Ring Buffer,可以捕捉每個由服務器發起的關閉連接記錄,包含會話異常中斷或者登陸失敗,Ring Buffer最多1000條數據。
Connectivity Ring Buffer有3種記錄:ConnectionClose,Error,LoginTimers。
Connectivity Ring Buffer可以讓你在不能使用NetWork Monitor情況下解決棘手的問題。
Connectivity Ring Buffer中的LoginTimers記錄了整個登陸過程所話的時間。
SELECTCAST(record ASxml) record
,CAST( record ASXML). value('(//Record/ConnectivityTraceRecord/RecordTime)[1]','datetime') recordtime
,CAST( record ASXML). value('(//Record/ConnectivityTraceRecord/RecordType)[1]','varchar(20)') Recordtype
FROMsys.dm_os_ring_buffers
WHERE ring_buffer_type ='RING_BUFFER_CONNECTIVITY'
新聞熱點
疑難解答