Database

無法從 sql server 標準連接到 sql server express

  • October 13, 2012

…就像我的標題所說…我無法從 sql server 標準連接到我在 sql server express 上的實例…我嘗試禁用防火牆並檢查了 sqlbrowser 是否已啟動但由於某種原因我無法連接到我的數據庫.. . 稱為 server_name\sqlexpress..

我有一個虛擬機和一個完整的 MS SQL Server 2008 R2 執行在它上面……我還有其他幾個執行 sqlexpress 的虛擬機。它們執行良好,我可以使用 sqlexpress 連接到它們…但是當我嘗試從 sqlserver 訪問時…我收到此錯誤。

建立與 SQL Server 的連接時發生與網路相關或特定於實例的錯誤。伺服器未找到或無法訪問。驗證實例名稱是否正確以及 SQL Server 是否配置為允許遠端連接。(提供者:SQL 網路介面,錯誤:26 - 錯誤定位伺服器/指定的實例)(Microsoft SQL Server,錯誤:-1)

深入探勘錯誤,我發現了這個

錯誤號:-1 嚴重性:20 狀態:0

最後這個…

Program Location:

at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server)
at Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()

執行 mssqlserver 的 VM 上的防火牆已關閉…我在其中一個執行 sqlexpress 的 VM 上關閉了防火牆,但我仍然收到錯誤…有人可以幫忙…謝謝

確保您為數據庫實例啟用了 TCP 協議。Microsoft在此處提供了詳細說明。

簡短而簡單的答案就這麼多…

對我來說,錯誤消息意味著 SQL Server Standard 無法在 DNS 中找到主機名,它無法與 sqlbrowser 服務正確互動,sqlbrowser 由於某種原因不知道該實例,或者 Standard 無法連接到Express 電腦上的正確埠。

我們可以從表格中刪除諸如錯誤的使用者名、錯誤的 SQL 密碼或缺少預設數據庫之類的東西,這些在連接會被注意到。連接過程還遠遠不夠,無法發生此類故障。

我假設您的所有虛擬機都在同一台伺服器上,並且我們不必擔心硬體防火牆或 NAT 重定向,因為虛擬機都在同一個虛擬網路上。

令我印象深刻的是,您可以從標準電腦連接到除一台 Express 電腦之外的所有電腦。那台特定的電腦有什麼不同?我認為壞掉的那個有一些網路功能,就像它可以看到其他電腦一樣。問題電腦是否與其他電腦位於不同的虛擬網路上?

一些故障排除任務:首先,弄清楚 Express 電腦的 IP 地址是什麼。

接下來,使用終端服務、遠端桌面、vSphere 或類似工具連接到 SQL Server Standard 電腦。您可以從 SQL Server Standard ping 到 SQL Server Express 嗎?首先,嘗試 ping Express 電腦的主機名,然後嘗試使用 IP。如果您可以按主機名和 IP 進行 ping,請仔細檢查在按主機名 ping 時顯示的內容是否與分配給 Express 電腦的 IP 地址相同。(您可能正在 ping 其他電腦,已經“幸運”了。)如果 IP 編號不同,則您的管理程序可能存在某種網路錯誤配置。

如果您無法按主機名 ping 並且收到有關未找到主機名的錯誤,請嘗試使用完全限定的域名。如果您的主機名是“express”,請嘗試“express.foo.com”,或任何看起來合適的名稱。如果可行,請嘗試使用它作為主機名連接到實例。

如果您可以通過主機名 ping 並且 IP 號碼匹配,則 Express 電腦應該在 DNS 中正確註冊。

如果您無法通過主機名成功 ping,但您可以通過 IP,請嘗試使用 Express 電腦的 IP 地址而不是主機名(即,而不是“hal9000\sqlexpress”,嘗試“192.168. 1.100\sqlexpress"。如果可行,則說明網路有問題。

保留它不是一個好的長期解決方案,因為 IP 號碼比主機名更頻繁地變化,但它可能適合測試/開發,或者直到你弄清楚為什麼 Express 電腦不像你想像的那樣在 DNS 中它應該是。

如果 ping 正常,您可以在 Standard 電腦上使用 SSMS 連接到 Express 電腦上的實例嗎?如果可以,問題可能與連結伺服器的定義方式有關。

引用自:https://serverfault.com/questions/437496