2009-07-21 60 views
3

我需要將JDBC連接字符串設置爲SQL Server。 此問題與C# ADO.Net connection question類似。這個是特定於JDBC連接字符串的。SQL Server羣集的JDBC連接字符串

JDBC字符串的通常格式是「jdbc:sqlserver:// {host}:{port}」。 現在,對於SQL服務器羣集,我有一個羣集名稱vvv \ iii({virtual server} {instance name})。

使用vvv \ iii字符串作爲服務器名稱時,通過「新建數據源到SQL Server」嚮導設置ODBC連接沒有問題。但是,似乎JDBC連接字符串需要特定的主機和端口。

有沒有辦法使JDBC連接字符串到SQL Server集羣?

回答

7

事實證明,您可以在JDBC字符串中使用「instanceName」屬性,如Microsoft Technet page「命名的和多個SQL Server實例」部分所述。在什麼情況下,我的工作是爲虛擬服務器VVV和數據庫實例名III以下字符串:

「的jdbc:SQLSERVER:// VVV;實例名= III」

+0

我不喜歡接受我自己的答案,但它是目前爲止最好的答案;-) – pythonquick 2009-07-28 13:03:10

0

羣集資源具有主機名和偵聽端口。使用j dbc:sqlserver://{virtualserver}:1433(或者如果不在默認的監聽端口上收聽,則爲合適的監聽端口)。

2

當使用集羣命名實例的SQL Server或獨立的環境中,每個SQL Server實例在啓動時都會動態分配一個端口號。 SQL Server Browser服務器處理對每個實例的請求,因爲每個服務器重新啓動都可能會更改每個實例使用的端口號。在服務器重新啓動時啓動的第一個實例將被分配1433,但不能保證是否有兩個實例中的其中一個總是會獲得1433.有幾個可影響啓動​​和恢復時間的實例啓動。這可以改變每次。

這是悲傷...連接到命名實例的JDBC連接字符串應該是這樣的,當: JDBC:SQLSERVER://服務器名稱/ DB_NAME;例如= INSTANCE_NAME

,而不是這個 的jdbc:SQLSERVER :// server_name:1433/db_name; instance = instance_name

請注意,默認數據庫「/ db_name」是可選的。如果被排除,連接將使用分配給SQL Server登錄的默認數據庫。

0

確保在羣集爲您確定時關閉端口定義。

所以我的數據源定義是這樣的:

jdbc:sqlserver://sqlcluster_hostname\instancename;DATABASENAME=databasename;sendStringParametersAsUnicode=false;SelectMethod=direct

我就遇到了這個問題,而試圖建立一個Railo數據源連接MSSQL集羣。

有點偏題...如果您將端口字段留空,標準的Railo數據源MSSQL驅動程序選項將端口設置爲「-1」,但如果將其設置爲「0」,則它將完全刪除端口定義,然後一切正常。但最好的方法是選擇'Other - JDBC Driver'來完整地定義JDBC連接字符串。