首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

JDBC 連接 Oracle RAC/集群數據庫的正確 URL 寫法

     編輯:Oracle 資料庫相關知識

標準 Thin 驅動連接描述符

jdbc:oracle:thin:@(DESCRIPTION=
    (LOAD_BALANCE=on)
    (FAILOVER=on)
    (ADDRESS_LIST=
        (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.77)(PORT=1521))
        (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.91)(PORT=1521))
        (ADDRESS=(PROTOCOL=TCP)(HOST=host3)(PORT=1521))
    )
    (CONNECT_DATA=(SERVICE_NAME=APPDB))
)

關鍵參數解析

參數建議值說明
LOAD_BALANCEon客戶端隨機選擇 ADDRESS_LIST 中的地址,實現負載均衡
FAILOVERon首個地址失敗自動嘗試下一個,實現連接故障轉移
SERVICE_NAME集群服務名而非 SID;RAC 下服務名可跨實例漂移
SDU32767Session Data Unit,大數據傳輸建議調大 (19c+ 支持 2MB)

完整 Java 配置示例

String url = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)"
    + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.77)(PORT=1521))"
    + "(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.91)(PORT=1521))"
    + "(ADDRESS=(PROTOCOL=TCP)(HOST=host3)(PORT=1521)))"
    + "(CONNECT_DATA=(SERVICE_NAME=APPDB)))";
String user = "app_user";
String password = "app_pwd";

Properties props = new Properties();
props.setProperty("oracle.net.CONNECT_TIMEOUT", "5000");  // 5秒連接超時
props.setProperty("oracle.jdbc.ReadTimeout", "30000");    // 30秒讀取超時

try (Connection conn = DriverManager.getConnection(url, props)) {
    // 使用連接...
}

進階高可用特性

  • FCF (Fast Connection Failover): 配合 ONS (Oracle Notification Service) 實現毫秒級故障感知,需 oracle.ons.nodes 系統屬性。
  • Application Continuity (AC): 12c+ 支持,會話狀態自動重放,業務無感知故障轉移。
  • SCAN (Single Client Access Name): 11gR2+ 僅需 jdbc:oracle:thin:@scan-name:1521/service_name,DNS 轮詢解析多 VIP。

常見錯誤

  • ORA-12514: SERVICE_NAME 拼寫錯誤或未在監聽器註冊,用 lsnrctl services 核對。
  • ORA-12170: 連接超時,檢查防火牆、VIP 可達性、CONNECT_TIMEOUT 設置。
  • 只連到單節點: 確認 LOAD_BALANCE=on 且 JDBC 驅動版本 ≥ 11.2.0.3 (早期版本有 Bug)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved