无法从 SQL Server Standard 连接到 SQL Server Express

无法从 SQL Server Standard 连接到 SQL Server Express

...就像我的标题所说的...我无法从 sql server standard 连接到 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 的虚拟机上的防火墙已关闭...我关闭了运行 sqlexpress 的其中一个虚拟机上的防火墙,但仍然出现错误...有人可以帮忙吗...谢谢

答案1

确保已为数据库实例启用 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 时显示的 IP 地址是否与分配给 Express 计算机的 IP 地址相同。(您可能正在 ping 其他计算机,因为“运气好”。)如果 IP 号码不同,则可能是您的虚拟机管理程序存在某种网络配置错误。

如果您无法通过主机名 ping 通,并且收到有关未找到主机名的错误,请尝试使用完全限定域名。如果您的主机名是“express”,请尝试“express.foo.com”或任何合适的名称。如果一切正常,请尝试使用该主机名连接到实例。

如果您可以通过主机名 ping 并且 IP 号码匹配,则 Express 计算机应该在 DNS 中正确注册。

如果您无法通过主机名成功 ping 但可以通过 IP 成功 ping,请尝试使用 Express 计算机的 IP 地址而不是主机名从标准计算机连接 SSMS(即,尝试“192.168.1.100\sqlexpress”,而不是“hal9000\sqlexpress”)。如果可行,则网络存在问题。

保留该设置并不是一个好的长期解决方案,因为 IP 号码比主机名变化更频繁,但对于测试/开发来说,或者直到您能弄清楚为什么 Express 计算机没有按照您认为的方式出现在 DNS 中,它可能还可以。

如果 ping 成功,您可以使用 Standard 计算机上的 SSMS 连接到 Express 计算机上的实例吗?如果可以,问题可能与链接服务器的定义方式有关。

相关内容