【问题标题】:Connecting to SQL Server Named Instance from Windows 64bit从 Windows 64 位连接到 SQL Server 命名实例
【发布时间】:2012-04-30 22:37:36
【问题描述】:

我在使用 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],并且所有应用程序都在使用现有配置文件工作。

【问题讨论】:

    标签: sql-server networking firewall named-instance


    【解决方案1】:

    您的命名实例将在不同的端口上运行。端口 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)。点击应用并重新启动服务。这将再次需要重新启动服务,但允许您指定特定端口,以便您可以向防火墙添加排除项(或使用已经存在的排除项,假设此服务器尚未使用该端口)。

    【讨论】:

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

    可能的问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      相关资源
      最近更新 更多