【故障分析】
KETTLE 3.0连接ORACLE 19C数据库报错Error connecting to database:(using class oracle.jdbc.driver.OracleDriver)
ORA-28040: NO MATCHING AUTHENTICATION PROTOCOL。
ORA-28040: 没有匹配的验证协议
显然,这是由于低版本的Oracle JDBC驱动程序在连接高版本数据库时无法兼容所造成的,需要从服务器端和客户端两方面解决问题。调整服务器端SQLNET的向下兼容参数不难理解,而升级客户端驱动程序则不能不说是Oracle的“谋划”。每次数据库的主版本升级都会带来全新的功能,并逐步废弃部分已经不再适用的旧功能,而旧版本的驱动程序无疑在某种程度上“拖累”了升级的步伐。于是,兼容矩阵就像是最后的“通牒”,要么你跟团上车,要么你自己想辙。
由于Oracle 19c调整了认证方式,使得低版本的JDBC驱动程序无法连接到高版本的数据库中,为实现kettle3能够继续连接到19c数据库的目的,特编写本说明。
【解决方法】
一. 修改19c Server端的SQLNET兼容参数
修改Oracle 19c的sqlnet配置参数文件,开启向下兼容特性。打开%ORACLE_HOME%\network\admin目录下的sqlnet.ora文件,在最后添加如下内容(如果参数已定义,改值即可):
SQLNET.ALLOWED_LOGON_VERSION=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
重启OracleTNSListener服务。
二. 调整Kettle3的Oracle JDBC驱动程序
Kettle3默认的Oracle JDBC驱动程序是位于D:\Kettle3.0\libext\JDBC\目录下的Ojdbc14.jar,该驱动适用于JDK1.4及以上的环境,但从19c开始,Oracle修改了认证方式,只提供JDK1.8以上的驱动程序链接到数据库,为了使得低版本的驱动程序能够继续正常使用,目前只有三种方法供选择:
- 升级JDK,更换新驱动,使用Java8驱动
升级Kettle3服务器的JDK版本到Java1.8,用19c的Ojdbc8.jar替换旧的Ojdbc14.jar。
在绩效kettle服务器上执行:Java –version
如果版本低于1.8的话,先卸载JDK,再安装JDK1.8;
删除Kettle3.0\libext\JDBC\目录下的旧驱动Ojdbc14.jar文件,拷贝Ojdbc8.jar文件到上述目录,重启spoon,测试已升级到19c的HIS数据库链接。
- 不升JDK,修改连接参数,继续使用Java1.4驱动
修改Oracle数据库JDBC驱动程序的连接参数;
在数据库连接参数的【数据库名称】处输入以下字符串,HOST、PORT、SERVICE_NAME按实际情况修改:
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.131)(PORT =
1521))(CONNECT_DATA =(SERVER=DEDICATED)(SERVICE_NAME =JXKP)))
【端口】为空或-1
【用户名】【密码】输入连接HIS的用户名、密码
点击【测试】,测试成功如图2所示。

图1 19c连接参数示例

图2 连接测试结果
- 不升JDK,不修改连接参数,使用新版Java1.6驱动
删除Kettle3.0\libext\JDBC\目录下的旧驱动Ojdbc14.jar文件,拷贝本文附带的Ojdbc6.jar文件到上述目录,重启spoon,测试已升级到19c的HIS数据库链接。
三. 登录绩效数据库,测试HIS数据库链接(dblink_his)的可用情况
以hisview用户登录sqlplus或PL/SQL developer,执行如下SQL语句,能读出HIS科室数据代表HIS数据库链接工作正常,如不正常,需排查绩效数据库到HIS数据库的连通以及HIS开放给绩效的用户名、密码是否正确,等等。
SELECT * FROM MV_HIS_DEPT_DICT ;
【小结】
HIS数据库的升级将会影响到绩效分配系统两个支撑软件的运行,一是ETL服务器,一是绩效数据库服务器。本文第一节描述了HIS数据库升级后Server端所做出的兼容性参数修改;第二节给出了ETL服务器JDBC驱动程序的解决方法;最后给出了在绩效数据库中测试HIS数据库链接的简易方法。
本文不仅对有HIS数据库升级意向的,而且对其它有类似工作模式的应用软件的重新适配等情形,或有一定参考意义。鉴于笔者水平有限,错误在所难免,恳请读者批评指正!
2023-05-24




