【问题标题】:How to specify port in JDBC connection URL for failoverPartner server in SQL Server如何在 SQL Server 中的 failoverPartner 服务器的 JDBC 连接 URL 中指定端口
【发布时间】:2016-11-13 17:29:03
【问题描述】:

我正在尝试添加一个服务器作为 SQL Server 的故障转移,但它没有使用端口 1443,我使用的是端口 2776。我试图指定它,但我尝试的一切都没有奏效。我怎么能这样做?

private String url = "jdbc:sqlserver://server1:2776;DatabaseName=db;failoverPartner=server2";

我尝试了以下配置,但都没有成功。

  1. ...failoverPartner=server2:2776
  2. ...failoverPartner=server2,2776
  3. ...failoverPartner=server2\\db

但每次我遇到异常。

  1. com.microsoft.sqlserver.jdbc.SQLServerException:与主机 server2、端口 1433 的 TCP/IP 连接失败。错误:“连接超时。验证连接属性,检查 SQL Server 实例是否正在主机上运行并在端口接受 TCP/IP 连接,并且没有防火墙阻止与端口的 TCP 连接。”。

  2. com.microsoft.sqlserver.jdbc.SQLServerException:与主机 server2:2776、端口 1433 的 TCP/IP 连接失败。错误:“null。验证连接属性,检查 SQL Server 实例是否正在主机上运行并在端口接受 TCP/IP 连接,并且没有防火墙阻止与端口的 TCP 连接。”。

  3. com.microsoft.sqlserver.jdbc.SQLServerException:与主机 server2、2776、端口 1433 的 TCP/IP 连接失败。错误:“null。验证连接属性,检查 SQL Server 实例是否正在主机上运行并在端口接受 TCP/IP 连接,并且没有防火墙阻止与端口的 TCP 连接。”。

【问题讨论】:

  • 我添加了标签 failoverdatabase-mirroring,因为我认为这就是您正在使用的...对吗?
  • this answer 对您有帮助吗?不是一个相同的问题,但它可能与 failoverPartner 名称中缺少的实例名称有关。
  • 另外,您是否阅读了此链接:Using Database Mirroring (JDBC)?也许那里有一些指针?
  • 谢谢,@TT。我在想我需要 instanceName 来完成这项工作,但我还没有收到它来测试。我已经检查过了,但没有太大帮助。

标签: java sql-server jdbc failover database-mirroring


【解决方案1】:

来自文档Connecting to SQL Server with the JDBC Driver - Setting the Connection Properties文档,属性failoverPartner

注意:驱动程序不支持将故障转移伙伴实例的服务器实例端口号指定为连接字符串中的 failoverPartner 属性的一部分。但是,支持在同一连接字符串中指定主体服务器实例的 serverName、instanceName 和 portNumber 属性以及故障转移伙伴实例的 failoverPartner 属性。

措辞非常混乱,但您似乎无法为故障转移服务器指定端口号。


来自 KB-2284190 来自 Microsoft (Applications cannot connect to a mirror partner server when using port number in the failoverPartner attribute of the connection string ) 我读到的内容差不多:

原因

这两条错误消息的出现是因为 SQL Server JDBC 驱动程序(所有版本)不支持解析 FailoverPartner 连接字符串属性的端口号,并依赖 DNS 和 SQL Server Browser 服务(仅适用于命名实例)来解决伙伴服务器的连接信息。在满足症状部分中讨论的条件的环境中,JDBC 驱动程序无法解析合作伙伴服务器信息,因此您会收到上述错误消息。

SQL 镜像基础架构的这种行为是设计使然。因此,Microsoft JDBC Driver 3.0 版仅支持 [\] 格式的故障转移伙伴属性值。

分辨率

要解决此问题,请在涉及数据库镜像的环境中使用以下方法之一:

  • 对于属于镜像配置一部分的默认 SQL Server 实例,请确保它们正在侦听 TCP 连接的默认端口 1433。

  • 对于命名实例,确保 SQL 浏览器服务正在运行,并且网络上没有阻塞端口 1434,并且服务器 B 没有配置为隐藏实例。


最后,请执行以下操作之一:

  • 指定故障转移服务器在端口 1433 上侦听 TCP。
  • 创建一个命名实例并将failoverPartner 指定为server_name\instance_name。确保 SQL Server Browser 服务正在运行并且端口 1434 未被阻止。

【讨论】:

  • 感谢您的帮助。正如您所说,没有办法更改故障转移端口,但通过添加它可以工作的 instanceName 。您能否将此添加到您的答案中,以便我可以将其作为解决方案?
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2019-11-10
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多