Connectivity

無法連接到 SQL Server 2017 本地數據庫共享實例

  • June 29, 2021

我無法連接到 SQL Server 2017 (14.0.1000.169)本地數據庫共享實例。

我在一台筆記型電腦上試過,它以前有一些 SQL Server Express 和我都解除安裝的東西。並且還在新的 Win10 虛擬機上。

兩者總是有相同的錯誤:

Sqlcmd:錯誤:Microsoft ODBC Driver 17 for SQL Server:命名管道提供程序:無法打開與 SQL Server 2的連接。.

Sqlcmd:錯誤:Microsoft ODBC Driver 17 for SQL Server:登錄超時已過期。

Sqlcmd:錯誤:Microsoft ODBC Driver 17 for SQL Server:建立與 SQL Server 的連接時發生與網路相關或特定於實例的錯誤。伺服器未找到或無法訪問。檢查實例名稱是否正確以及 SQL Server 是否配置為允許遠端連接。有關詳細資訊,請參閱 SQL Server 聯機叢書。

此錯誤來自,SQLCMD但我也嘗試過使用 SSMS 和 Visual Studio 連接字元串。

我嘗試與實例的所有者聯繫,但不能。還嘗試使用具有系統管理員權限的 SQL 登錄,但不能。

我只能連接管道名稱。

我還嘗試了以下所有方法:

為什麼我無法連接?

似乎是 LocalDb v2017 及更高版本中的錯誤。我測試了所有可用的版本,從 v2012 SP4 開始。在 v2016 SP2 之前(包括 v2016 SP2),友好共享名稱"(localdb)\.\SHAREDNAME"在連接請求中被接受。使用 v2017 或更高版本時,請求始終會導致“未找到實例”錯誤。

我還觀察到查詢所有已安裝的 LocalDb 版本sqllocaldb.exe v會導致出現 v2016 及更高版本的錯誤消息:

Windows API 呼叫“RegGetValueW”返回錯誤程式碼:0。

不確定此行為是否可能與原始問題有關。


應用問題中連結的系統資料庫修復解決了版本查詢。

經過一番探勘,我想我可能已經找到了連接失敗的原因。在本地電腦上安裝最高 v2016的 SQLLocalDb 時,共享功能的工作方式如下:

在系統資料庫中,會在 中創建一個新鍵Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Shared Instances\{SharedName}。此鍵包含一個字元串 value InstanceName,它儲存管道名稱,如以下螢幕截圖所示:

在此處輸入圖像描述

當相應的實例啟動時,它總是選擇這個管道名稱。該名稱保持不變,即當實例重新啟動時,管道名稱被重用。

安裝 LocalDb v2017 或更高版本時會破壞此邏輯:當啟動具有共享名稱的實例時,將忽略系統資料庫中的管道名稱。相反,通過查詢實例時會出現完全不同的管道名稱sqllocaldb i {instance}

這可能也是無法建立連接的原因,因為管道名稱不匹配。編輯系統資料庫值以匹配實際管道名稱可以解決問題,但僅在重新啟動實例之前。

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