Sql server 从Windows 64位连接到SQL Server命名实例

Sql server 从Windows 64位连接到SQL Server命名实例,sql-server,networking,firewall,named-instance,Sql Server,Networking,Firewall,Named Instance,我有java和.net应用程序在应用服务器上运行,使用Microsoft Windows server 2003企业版。这些正在迁移到另一个应用服务器Windows 2008 64位计算机 所有应用程序都连接到一个命名实例上的同一个SQL Server 2005数据库 到目前为止,我已尝试将应用程序完全按原样从旧框移动到新框,配置文件不做任何更改 在新的应用服务器上,java和.net应用程序都没有连接到数据库(命名实例) JDBC错误消息:“与命名实例的连接失败。错误:java.net.Soc

我有java和.net应用程序在应用服务器上运行,使用Microsoft Windows server 2003企业版。这些正在迁移到另一个应用服务器Windows 2008 64位计算机

所有应用程序都连接到一个命名实例上的同一个SQL Server 2005数据库

到目前为止,我已尝试将应用程序完全按原样从旧框移动到新框,配置文件不做任何更改

在新的应用服务器上,java和.net应用程序都没有连接到数据库(命名实例)

JDBC错误消息:“与命名实例的连接失败。错误:java.net.SocketTimeoutException:接收超时。”

.net错误消息:“与SQL Server建立连接时发生网络相关或特定于实例的错误。找不到或无法访问该服务器。”

如果我将DB配置更改为不在命名实例上的配置,它将在新的应用程序服务器上工作

数据库设置正确,因为我们能够在旧的应用程序服务器上连接。我可以从新的应用服务器ping数据库服务器

是否有任何原因导致此操作无法在新的应用程序服务器上运行

java连接字符串:“jdbc:microsoft:sqlserver://[dbservername];SelectMethod=Cursor;instanceName=[dbinstance]”

.net连接字符串:“服务器=[dbservername]\[dbinstance];数据库=风险\数据库;Uid=[user];Pwd=[Pwd];”

更新 根据答案中的建议,我得到了实例端口号。我还安装了SQLServerManagementStudio,以便在出现问题时消除我的应用程序。从ManagementStudio,如果我使用[servername][instancename],我会收到消息“在建立与SQL Server的连接时出现与网络相关或特定于实例的错误…”,但当我使用[servername]、[port]时,它会起作用。不确定是否有办法解决这个问题

更新#2将问题上报给基础架构/服务器/网络团队。他们在新的应用服务器上禁用了windows防火墙。普雷斯托,现在我可以连接到Management Studio中的[dbservername]\[dbinstance],所有应用程序都使用现有配置文件工作。

可能的问题:

  • 防火墙可能会阻止连接
  • 实例名称与连接字符串中指定的名称不同
  • 连接字符串指定不同的端口,或者SQL Server正在不同的端口上运行,而不是默认的1433端口

您的命名实例将在不同的端口上运行。端口1433(默认实例的默认端口)可能已打开,而运行命名实例的端口可能已被阻止。您可以检查指定实例的错误日志中的端口(假设您可以在本地连接,在对象资源管理器中,展开服务器,展开管理,展开SQL server日志,右键单击当前,然后选择“查看SQL server日志”IIRC),它在启动时会这样说:

Server is listening on [ 127.0.0.1 <ipv4> 3587 ].
服务器正在侦听[127.0.0.1 3587]。
最后一个数字是需要从远程机器以及它必须通过的任何网络设备和服务访问的端口号。如果找不到这样的行,则可能没有为命名实例启用TCP/IP。在该服务器上,转到SQL server配置管理器,展开SQL server网络配置,单击“的协议”,并确保在右侧窗格中启用了TCP/IP。如果必须启用此功能,则需要重新启动SQL Server才能使其生效


如果已启用(或启用并重新启动服务后),如果右键单击TCP/IP,点击“属性”并移动到“IP地址”选项卡,则应该能够刷新此视图并验证正在使用的端口。您可以看到每个IP的当前端口。这里将有多个IPn部分和一个IPAll部分。对于每个IP,您可以将“TCP端口”框更改为要使用的端口(并将所有“动态TCP端口”框中的任何值删除为0)。点击Apply并重新启动服务。这将再次需要重新启动服务,但将允许您指定特定端口,以便您可以向防火墙添加排除(或使用已存在的排除,假设此服务器尚未使用该端口).

只是为了进一步确认要检查的内容-可能是旧框在防火墙中有一个明确的异常,允许它连接到数据库服务器(这可能是我的IP地址或名称)。如果是这种情况,请忽略我关于更改/修复SQL Server端口的建议,并与您的网络管理员讨论如何为新机箱设置相同的防火墙例外。也可能是SQL Server Browser服务正在旧机箱上运行(从而将命名实例请求动态路由到正确的端口)但不在新服务器上运行。@Clark您不需要在应用程序服务器上使用SQL Browser服务来执行任何操作。我认为从这个问题上看这不是100%明显的,但在我看来,应用程序已经移动了,而不是数据库。“旧服务器”仍然可以连接到数据库的是旧的应用程序服务器。我的错误,看起来是我误读了这个问题。再仔细阅读一下,我同意你的解释,SQL浏览器服务没有发挥作用。编辑了这个问题以澄清Aaron Bertrand的解释是正确的-只有应用程序在移动,而不是移动db。谢谢大家对端口的建议。我没有访问SQL Server日志的权限。我必须向DBA询问指定的实例端口,并将向他们报告。