2

我正在尝试添加一个服务器作为 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 连接。”。

4

1 回答 1

1

从文档使用 JDBC 驱动程序连接到 SQL Server - 设置连接属性文档,属性failoverPartner

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

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


来自 Microsoft 的 KB-2284190(在连接字符串的 failoverPartner 属性中使用端口号时,应用程序无法连接到镜像合作伙伴服务器)我读到的内容差不多:

原因

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

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

解析度

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

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

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


总之,请执行以下操作之一:

  • 指定故障转移服务器在端口 1433 上侦听 TCP。
  • 创建一个命名实例并指定failoverPartneras server_name\instance_name。确保 SQL Server Browser 服务正在运行并且端口 1434 未被阻止。
于 2016-11-14T11:54:02.417 回答