標準 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_BALANCE | on | 客戶端隨機選擇 ADDRESS_LIST 中的地址,實現負載均衡 |
| FAILOVER | on | 首個地址失敗自動嘗試下一個,實現連接故障轉移 |
| SERVICE_NAME | 集群服務名 | 而非 SID;RAC 下服務名可跨實例漂移 |
| SDU | 32767 | Session 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)。