Sql-Server

為什麼改變網路協議的順序沒有任何意義?

  • January 7, 2020

我要做的就是通過命名管道連接到 SQL Server,而不使用像NP:ServerName這樣的顯式方式,因為提到的方法有效我想僅使用 ServerName 通過命名管道進行連接,並讓 SQL Server 有機會選擇正確的網路協議。所以我有3 個虛擬機:

在此處輸入圖像描述

我一步一步做了什麼:

  1. SQL Server A的****伺服器配置中,我啟用了所有網路協議。

在此處輸入圖像描述

  1. 我也熟悉 Order 列,但是,更改它似乎沒有影響。我交換了TCP/IP命名管道的順序: 在此處輸入圖像描述
  2. 我嘗試使用電腦名WIN-VKHOKLJ3IJG )從****SQL Server B 連接到SQL Server A,我希望它會使用命名管道協議,但不幸的是它選擇了 TCP/IP 作為連接協議: 在此處輸入圖像描述

有人可以解釋為什麼選擇 TCP/IP 而不是命名管道嗎?根據順序,SQL Server 應該選擇 Named Pipes,但更傾向於使用 TCP/IP。

我相信這個問題與從伺服器 A 建立與伺服器 B 的連接時使用的客戶端有關,而不是與您如何在伺服器本身上訂購協議順序有關。

第一個提示來自選擇網路協議:啟用協議(突出顯示我的):

必須在客戶端和伺服器上都啟用該協議才能工作。伺服器可以同時偵聽所有啟用的協議上的請求。客戶端電腦可以選擇一個,或者按照 SQL Server 配置管理器中列出的順序嘗試協議。

我懷疑大多數客戶端確定正在使用的協議的所需順序,而不是將其委託給伺服器。

進一步探勘 MS 文件會在Client Protocols Properties (Order Tab)文章中產生這個有趣的註釋:

筆記

Microsoft .NET SqlClient 不使用這些設置(例如訂單)。.NET SqlClient 的協議順序是先 TCP,然後是命名管道,不能更改。

正如我們在 .NET SqlClient 中看到的那樣,如果 TCP/IP 是伺服器上啟用的協議並且正在使用 .NET SqlClient,那麼無論您做什麼,您都會獲得 TCP/IP 連接。因此,特別是對於這個客戶端,伺服器上指定的協議絕對無關緊要。

通過這些範例,我認為很明顯,您用於連接伺服器的客戶端對所使用的協議的影響更大,而不是伺服器本身的連接協議順序。

在您的特定情況下,如果您真的想使用命名管道而不是 TCP/IP,您可以通過Client Alias強制它:

在此處輸入圖像描述

您需要在伺服器 A 上為伺服器 B 創建此別名。請注意,別名有它們自己的麻煩(例如,當您處理伺服器 B 上的連接更改時,您現在需要管理另一件事),但作為一種解決方法,它可能會奏效。

另外值得注意的是,命名管道在慢速連接上可能會出現問題,而通過 TCP/IP 連接的影響不大,這可能是大多數客戶端預設傾向於 TCP/IP 協議的原因。

引用自:https://dba.stackexchange.com/questions/256678