我们在用Kettle ETL工具的时候,可能会遇到数据库为Oracle集群的模式,或者有时候目标库为oracle,在持续的循环调度中,经常发现oracle的数据库连接中断的情况,此时,在Kettle中有一个JNDI的连接方式能很好的解决此模式的连接。
1、查看Oracle配置连接文件tnsnames.ora中的连接信息:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 服务IP地址1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 服务IP地址2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
注:此文件在...product\11.2.0\dbhome_1\NETWORK\ADMIN下:
2、在kettle工具中,打开jdbc.properties文件,在此文件中添加如下代码:
OracleJNDI/type=javax.sql.DataSource OracleJNDI/driver=oracle.jdbc.driver.OracleDriver OracleJNDI/url=jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (ADDRESS = (PROTOCOL = TCP)(HOST = 服务IP地址1)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 服务IP地址2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) ( SERVICE_NAME = orcl)))
OracleJNDI/user=数据库用户名
OracleJNDI/password=数据库密码
注:修改此文件后,记得重启Kettle工具。
此文件的目录在kettle工具..\data-integration\simple-jndi:
注:
OracleJNDI/type =数据库类型
OracleJNDI/driver:此数据库的驱动(不同的数据库,此驱动不同)
OracleJNDI/url=jdbc:oracle:thin:@ :此处填第1步中“ORCL = ” 等号后面的内容
OracleJNDI/user = 访问数据库的用户名
OracleJNDI/password= 此用户名的访问密码
3、在kettle连接中,选择JNDI的连接方式即可:
注:JNDI名称为第二步中的自定义的名称:
5、另外,为了避免驱动的版本问题,建议把Oracle的驱动直接拷贝到kettle工具中:
从此目录的驱动拷贝到kettle工具中的lib目录下:
驱动拷贝完后,也需重启kettle工具。