Java连接Oracle 12c RAC出现onsRemoteConfig属性无法识别错误
Nov 08, 2021 11:11:34 AM oracle.simplefan.impl.FanManager configure
SEVERE: unrecognized property while configuring FanManager
java.lang.IllegalArgumentException: unrecognized property "onsRemoteConfig"
at oracle.simplefan.impl.FanManager.configure(FanManager.java:71)
at oracle.jdbc.driver.HAManager.configure(HAManager.java:146)
at oracle.jdbc.driver.HAManager.(HAManager.java:122)
at oracle.jdbc.driver.HAManager.getInstance(HAManager.java:126)
at oracle.jdbc.driver.HAManager.enableHAIfNecessary(HAManager.java:725)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:713)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
该报错由Oracle JDBC驱动与simplefan.jar包版本不兼容触发:onsRemoteConfig是高版本JDBC驱动新增的配置项,但当前环境依赖的simplefan.jar版本过低,无法识别该属性。即使已经在WebLogic控制台禁用了数据源的Fan Enabled属性,JDBC驱动初始化阶段仍会尝试加载HA相关配置,最终触发报错。
- 方案1:统一Oracle依赖版本
确保环境中ojdbc8.jar(Oracle 12c适配JDBC驱动)、simplefan.jar、ons.jar三者版本完全一致,优先使用Oracle 12c官方安装包中自带的同版本jar包替换现有依赖,消除版本不匹配问题。 - 方案2:强制关闭JDBC层FAN特性
仅修改WebLogic控制台的Fan Enabled配置无法覆盖JDBC驱动的默认配置,需要额外在数据源的连接属性中添加参数:
如果是独立Java代码直接连接数据库,可通过两种方式配置:oracle.jdbc.fanEnabled=false- 代码中设置系统属性:
System.setProperty("oracle.jdbc.fanEnabled", "false");- JDBC连接URL追加参数:
jdbc:oracle:thin:@//<RAC扫描地址>:<端口>/<服务名>?oracle.jdbc.fanEnabled=false - 方案3:移除不必要的simplefan依赖
如果业务无需使用Oracle FAN、ONS等RAC高可用特性,直接从应用类路径、WebLogic域公共库目录下删除simplefan.jar即可从根源避免该类初始化加载。 - 方案4:升级WebLogic内置JDBC驱动
若使用的WebLogic版本较低,内置Oracle驱动与12c RAC不兼容,可将MW_HOME/wlserver/server/lib路径下的旧版ojdbc、simplefan、ons jar包统一替换为12c对应版本。
修改配置后重启WebLogic域或者对应应用服务,发起数据库连接测试,确认日志无FanManager相关报错、数据库连接正常即可。
内容的提问来源于stack exchange,提问作者Karthikeyan Duraisamy

