记一次,kettle执行JOB的一个BUG,linux下环境表输入(查询)卡住问题,windows环境下执行正常。

问题

采集数据,linux下执行JOB时。
发现表输入卡在,查询卡住,如图,11:37:19、11:37:42、 11:42:56
分别在40000、60000行的时候卡住,23s、5分14s。
记一次,kettle执行JOB的一个BUG,linux下环境表输入(查询)卡住问题,windows环境下执行正常。_第1张图片

拿出sql到pl/sql上查询,并查看执行计划,均没有卡住。
记一次,kettle执行JOB的一个BUG,linux下环境表输入(查询)卡住问题,windows环境下执行正常。_第2张图片
后续通过Windows上执行,发现并没有卡住。表输入很快就查询装载到组件里了。
表
通过查看oracle的Session,是查询是完成的,确认kettle的问题。继续通过修改反馈行数为1000,发现卡在某一块查询。后续通过修改日志级别:/level Debug,修改linux的jbdc版本、换一台linux、切换到kettle9.0、修改编码等,发现依旧不行。
记一次,kettle执行JOB的一个BUG,linux下环境表输入(查询)卡住问题,windows环境下执行正常。_第3张图片

解决方法

通过创建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

记一次,kettle执行JOB的一个BUG,linux下环境表输入(查询)卡住问题,windows环境下执行正常。_第4张图片
3、表输入语句改成查询tabe_name_temp。就可以正常的插入更新了。

select * from tabe_name_temp

记一次,kettle执行JOB的一个BUG,linux下环境表输入(查询)卡住问题,windows环境下执行正常。_第5张图片
记一次,kettle执行JOB的一个BUG,linux下环境表输入(查询)卡住问题,windows环境下执行正常。_第6张图片
至此,问题解决。

你可能感兴趣的:(bug,linux,运维,kettle)