SQL Server 集群的 JDBC 连接字符串
Posted
技术标签:
【中文标题】SQL Server 集群的 JDBC 连接字符串【英文标题】:JDBC connect string for SQL Server cluster 【发布时间】:2009-07-21 15:41:36 【问题描述】:我需要设置一个到 SQL Server 的 JDBC 连接字符串。 这个问题类似于C# ADO.Net connection question。这是特定于 JDBC 连接字符串的。
JDBC 字符串的常用格式是“jdbc:sqlserver://host:port”。 现在,对于 SQL 服务器集群,我有一个集群名称 vvv\iii (virtual serverinstance name)。
使用 vvv\iii 字符串作为服务器名称时,通过“到 SQL Server 的新数据源”向导设置 ODBC 连接没有问题。但是,似乎 JDBC 连接字符串需要特定的主机和端口。
有没有办法让 JDBC 连接字符串到 SQL Server 集群?
【问题讨论】:
【参考方案1】:事实证明,您可以在 JDBC 字符串中使用“instanceName”属性,如“命名和多个 SQL Server 实例”部分中的 Microsoft Technet page 中所述。对我来说有效的是虚拟服务器 vvv 和数据库实例名称 iii 的以下字符串:
"jdbc:sqlserver://vvv;instanceName=iii"
【讨论】:
我不喜欢接受自己的答案,但这是迄今为止最好的答案 ;-)【参考方案2】:在集群或独立环境中使用 SQL Server 命名实例时,每个 SQL Server 实例都会在启动时动态分配一个端口号。 SQL Server Browser 服务器处理对每个实例的请求,因为每次服务器重新启动都可能更改每个实例使用的端口号。在服务器重新启动时启动的第一个实例分配为 1433,但如果您有 2 个实例,则无法保证其中一个将始终获得 1433。有几个变量会影响实例启动所需的启动和恢复时间。这可以每次改变。
这很可悲......当连接到一个命名实例时,jdbc 连接字符串应该如下所示: jdbc:sqlserver://server_name/db_name;instance=instance_name
而不是这个 jdbc:sqlserver://server_name:1433/db_name;instance=instance_name
请注意,默认数据库“/db_name”是可选的。如果排除连接将使用分配给 SQL Server 登录的默认数据库。
【讨论】:
【参考方案3】:集群资源有一个主机名和一个监听端口。使用 jdbc:sqlserver://virtualserver:1433
(如果不监听默认端口,则使用适当的监听端口)。
【讨论】:
【参考方案4】:我会评论Mark Stewart 的评论,但缺乏声誉。 My source 没有提到 /db_name 我也无法让它工作。可能是confused instance names 的另一个案例?
【讨论】:
【参考方案5】:请确保您关闭端口定义,因为集群会为您确定这一点。
所以我的数据源定义如下:
jdbc:sqlserver://sqlcluster_hostname\instancename;DATABASENAME=databasename;sendStringParametersAsUnicode=false;SelectMethod=direct
我在尝试设置 Railo 数据源以连接到 MSSQL 集群时遇到了这个问题。
稍微偏离主题...如果您将端口字段留空,则标准 Railo 数据源 MSSQL 驱动程序选项将端口设置为“-1”,但是如果将其设置为“0”,则它会完全删除端口定义,然后是所有内容作品。但最好的方法是选择“Other - JDBC Driver”来完整定义JDBC连接字符串。
【讨论】:
以上是关于SQL Server 集群的 JDBC 连接字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在火花中使用 sql server 2012 jdbc jar
JDBC无法与SQL Server建立SSL连接(Domino Java Agent FP 9)
如何使用 JDBC 连接到 SQL Server 2008 数据库?
使用JDBC连接SQL SERVER的数据库后,读取出来的中文数据是乱码?