無法連接到 SQL Server 2017 本地數據庫共享實例
我無法連接到 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 登錄,但不能。
我只能連接管道名稱。
我還嘗試了以下所有方法:
- 為什麼我無法連接到 SQL Server 2012 LocalDB 共享實例?在堆棧溢出
- SQL 2016 sp1 SQLLocalDB 版本錯誤,“Windows API 呼叫“RegGetValueW”返回錯誤程式碼:0。” 在 MSDN 論壇上
為什麼我無法連接?
似乎是 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}
。此鍵包含一個字元串 valueInstanceName
,它儲存管道名稱,如以下螢幕截圖所示:當相應的實例啟動時,它總是選擇這個管道名稱。該名稱保持不變,即當實例重新啟動時,管道名稱被重用。
安裝 LocalDb v2017 或更高版本時會破壞此邏輯:當啟動具有共享名稱的實例時,將忽略系統資料庫中的管道名稱。相反,通過查詢實例時會出現完全不同的管道名稱
sqllocaldb i {instance}
。這可能也是無法建立連接的原因,因為管道名稱不匹配。編輯系統資料庫值以匹配實際管道名稱可以解決問題,但僅在重新啟動實例之前。