问题
采集数据,linux下执行JOB时。
发现表输入卡在,查询卡住,如图,11:37:19、11:37:42、 11:42:56
分别在40000、60000行的时候卡住,23s、5分14s。
拿出sql到pl/sql上查询,并查看执行计划,均没有卡住。
后续通过Windows上执行,发现并没有卡住。表输入很快就查询装载到组件里了。
通过查看oracle的Session,是查询是完成的,确认kettle的问题。继续通过修改反馈行数为1000,发现卡在某一块查询。后续通过修改日志级别:/level Debug,修改linux的jbdc版本、换一台linux、切换到kettle9.0、修改编码等,发现依旧不行。
解决方法
通过创建dblink、临时表,把数据先插入到临时表(建在目标库)中,再通过临时表 插入\更新 到目标表中。
1、创建dblink、临时表(建在目标库)。
create table tabe_name_temp(……);
create public database link dblin_name_A
connect to username_A identified by password_A
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
2、kettle添加在转换前面,truncate、insert步骤。
truncate table tabe_name_temp;
insert into tabe_name_temp@dblin_name_A
(……)
select
……
from table_name
3、表输入语句改成查询tabe_name_temp。就可以正常的插入更新了。
select * from tabe_name_temp
至此,问题解决。