概述
在使用 Oracle JDBC Thin 驱动建立连接时,URL 的编写方式取决于目标数据库的配置类型。无论是单实例还是 RAC 环境,理解这三种基本格式及其细微差别至关重要。
1. 基于服务名 (Service Name)
这是目前最推荐的通用写法,适用于大多数生产环境,特别是在 RAC 集群中。注意分隔符是双斜杠 //。
String url = "jdbc:oracle:thin:@//192.168.6.66:1521/rac";
这里 rac 代表数据库的服务名(Service Name)。
2. 基于实例名 (SID)
这种写法多见于较旧的单实例配置。关键在于分隔符变成了冒号 :,容易与服务名格式混淆。
String url = "jdbc:oracle:thin:@192.168.6.66:1521:rac1";
这里的 rac1 是数据库的实例名(SID)。
3. 使用完整连接串 (TNS Descriptor)
当需要更精细的控制,例如指定负载均衡或故障转移策略时,可以使用完整的 TNS 描述符。这在复杂的 RAC 环境中很常见。
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.66)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=rac)))";
或者包含多节点地址列表:
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.66)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.68)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=rac)))";
甚至开启故障转移与负载平衡:
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.66)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.68)(PORT=1521))(FAILOVER=on)(LOAD_BALANCE=on))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=rac)))";
关键注意点
很多开发者容易忽略分隔符的区别。使用 SID 时中间用冒号 :,而使用 Service Name 时必须用双斜杠 //。写错会导致连接失败,排查时请优先检查此处。

