kettle通过odbc连接mysql_kettle5.4ODBC和OCI连接配置

本文介绍了在kettle 5.4中遇到通过JDBC连接Oracle 11g RAC报错的问题,详细记录了通过ODBC和OCI方式成功连接的过程,包括配置环境变量、解决ocijdbc11.dll缺失问题以及复杂Oracle集群连接字符串设置。
摘要由CSDN通过智能技术生成

1.kettle 5.4 使用JDBC连接的时候报错(测试不同的数据库,发现只是连接11gRAC 的时候会报JDBC的错误)

具体报错如下

java.sql.SQLException: 建数据库连接出现异常:

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:@90.12.xx.xx:1521:orcl

ORCL_CON

Listener refused the connectionwiththe following error:

ORA-12505, TNS:listener does not currently know of SID given inconnect descriptor

The Connection descriptor usedbythe client was:90.12.xx.xx:1521:orcl

使用sqlplus 进一步测定发现数据库功能正常,尝试其他的连接方式。

2.尝试用ODBC的方式连接:

管理工具-->数据源--用户DSN--添加--选择oracle驱动

在kettle上配置ODBC连接 测试OK!

3.尝试OCI的连接方式报错如下:

错误连接数据库 [Source_Db]: org.pentaho.di.core.exception.KettleDatabaseException:

Error occurredwhile trying to connect to the databaseError connectingto database: (using class oracle.jdbc.driver.OracleDriver)

no ocijdbc11injava.library.path

org.pentaho.di.core.exception.KettleDatabaseException:

Error occurredwhile trying to connect to the databaseError connectingto database: (using class oracle.jdbc.driver.OracleDriver)

no ocijdbc11injava.library.path

at org.pentaho.di.core.database.Database.normalConnect(Database.java:428)

at org.pentaho.di.core.database.Database.connect(Database.java:358)

at org.pentaho.di.core.database.Database.connect(Database.java:311)

at org.pentaho.di.core.database.Database.connect(Database.java:301)

at org.pentaho.di.core.database.DatabaseFactory.getConnectionTestReport(DatabaseFactory.java:80)

主机名 :

端口 :1521数据库名:orcl

4.google了一下采取以下方案解决:

在环境变量中设置:

ORACLE_HOME=D:\app\gssjcj\product\11.2.0\dbhome_1

TNS_ADMIN=D:\app\gssjcj\product\11.2.0\dbhome_1\NETWORK\ADMIN

PATH=%ORACLE_HOME%\BIN;%PATH%tnsnames.oracontains:

J3_CX=(DESCRIPTION=(ADDRESS= (PROTOCOL = TCP)(HOST = 90.xx.xx.xx)(PORT = 1521))

(CONNECT_DATA=(SERVER=DEDICATED)

(SERVICE_NAME=orcl)

)

)

Copied OCIJDBC11.dllto the libswt\win64

配置OCI连接:

20180110220036867848.png

测试OK!

之后在http://community.pentaho.com/看到如下描述:

OCI

OCI uses the Oracle client installed on the client you‘re currently using. If you are using OCI and an Oracle Net8 client, the JDBC driver version used in Kettle needs to match your Oracle client version. PDI 2.5.0 shipped with version 10.1, 3.0.0 ships with version 10.2. You can either install that version of the Oracle client orchange the JDBC driver in PDI if versions don‘t match up.

This is how you change the Oracle JDBC driver in Kettle. Replace files "ojdbc14.jar" and "orai18n.jar" in the directory libext/JDBC of your distribution with the files found in the $ORACLE_HOME/jdbc directory on your server or if the versions are different, with the JDBC driver that matches your Net8 client. For Oracle 11g the drivers are named ojdbc5.jar and ojdbc6.jar.

If you still have issues please remember that the DLL that Oracle uses to connect has to be in your path. If all else fails, try copying the ocijdbc10.dll (might be called different in different versions) to the libswt/win32 folder (or win64).

RAC (Real Application Cluster)

When dealing with a Real Application Cluster or other complex failover oracle situations, please define the connection like this:

·* Set to native (JDBC) connection type

·* Leave hostname and port empty (this is also working with a port setting of -1)

·* Set the database name to something like this...

(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host1-vip)(PORT =

1521))(ADDRESS = (PROTOCOL = TCP)(HOST = host2-vip)(PORT = 1521))(LOAD_BALANCE

= yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =

db-service)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY

= 5))))

or

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_NODE_HOSTNAME)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=SECONDARY_NODE_HOSTNAME)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DATABASE_SERVICENAME)))

or

(DESCRIPTION=(FAILOVER=ON)(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx)(PORT=1526))(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1526)))(CONNECT_DATA=(SERVICE_NAME=somesid)))

Note: This does only work with a

repository based system until 3.0.4. Beginning with 3.0.5 and 3.1 file based

systems do also support this.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值