3

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

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

到目前为止,我已经尝试将应用程序完全按原样移动,而不会更改配置文件,从旧盒子到新盒子。

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

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

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

如果我将数据库配置更改为不在命名实例上的配置,它将在新的应用服务器上运行。

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

有什么理由这在新的应用服务器上不起作用?

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

.net 连接字符串:“Server=[dbservername]\[dbinstance];Database=Risk_DB;Uid=[user];Pwd=[pwd];”

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

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

4

2 回答 2

6

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

Server is listening on [ 127.0.0.1 <ipv4> 3587 ].

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

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

于 2012-05-01T00:01:29.093 回答
0

可能的问题:

  • 防火墙可能会阻止连接。
  • 实例名称与连接字符串中指定的名称不同。
  • 连接字符串指定不同的端口或 SQL Server 在不同的端口上运行,而不是默认的 1433
于 2012-04-30T22:49:52.600 回答