kettle如何連接oracle19c
軟件配置參數
軟件版本 | 值 |
---|---|
數據庫版本 | Oracle19c |
數據庫驅動 | ojdbc8.jar,orai18n.jar |
JDK版本 | JDK1.8.0_162 |
etl工具 | Spoon5.4 |
數據庫配置
數據庫類型 | 容器數據庫 | 可插拔數據庫 |
---|---|---|
數據庫類型編碼 | CDB | PDB |
數據庫名稱 | orcl | d1 |
用戶名 | system | u1 |
密碼 | 123456 | 123456 |
需求描述
最近在做數據庫遷移,需要將數據庫版本從Oracle11g升級到Oracle19c。
使用kettle連接數據庫時,提示以下錯誤:
錯誤連接數據庫 [d1] : org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
問題分析:
根據測試,數據庫升級到oracle19c後,應用服務需要進行以下修改:
- 1、升級數據庫驅動
新增jar包:ojdbc8.jar,orai18n.jar
取消jar包:ojdbc14.jar 修改爲 ojdbc14.jar.bak - 2、修改數據庫連接參數,變更方式如下:
原連接方式:
config.jdbcUrl=jdbc:oracle:thin:@192.168.5.129:1521:d1
新連接方式:
config.jdbcUrl=jdbc:oracle:thin:@192.168.5.129:1521/d1
默認情況下,在kettle數據庫連接中配置連接後,查看特徵列表,發現實際的URL地址如下:
jdbc:oracle:thin:@192.168.5.129:1521:d1
此方式,僅限於連接CDB數據庫,測試將PDB替換爲CDB,測試連接成功:
如果需要正確連接PDB,需要使用以下3種方法:
解決辦法:
方式1、數據庫名稱添加反斜線
在原有的數據庫名稱前面添加反斜線/,測試連接:成功
方式2、數據庫名稱填寫全地址
主機名稱、端口號留空;
數據庫名稱:填寫數據庫訪問地址和數據庫名稱,如下:
192.168.5.129/d1
192.168.5.129:1521/d1
測試連接:成功
方式3、JNDI方式
打開Keetle配置文件文件:
%KETTLE_HOME%\simple-jndi\jdbc.properties
新增以下內容:
192.168.5.129@d1/type=javax.sql.DataSource
192.168.5.129@d1/driver=oracle.jdbc.driver.OracleDriver
192.168.5.129@d1/url=jdbc:oracle:thin:@192.168.5.129:1521/d1
192.168.5.129@d1/user=u1
192.168.5.129@d1/password=123456
由於使用JNDI方式,數據庫密碼以明文方式存儲,存在安全隱患,且不便於分佈式部署實施。建議採用方案1或方案2;