ODI监控调度状态

Oracle Data Integrator(简称ODI)是一款的ELT工具,除了官网的文档外,网络上的相关资料相对还是比较有限,而且不够深入。

    我在监控和使用这个工具期间简单研究了一下工作资料档案库的表结构,可以通过sql在一定程度上直接查询你所设置的调度运行状态。

在配置RCU资料档案库的时候会让你选择资料档案库的前缀,我这边设置的是ETL1 。所以我的资料档案库名称叫:ETL1_ODI_REPO(主资料档案库与工作资料档案库共享)。

那么登录这个库查询不为空的表结构:

select 
'select * from '||table_name||' ;'
from user_tables where num_rows>0 order by table_name

我这边查出来108个表,这些表都没有注释,所以只能通过表名和内容去猜测。我目前能够确定的有用的表如下:

--如果简单监控,用如下几个表就足够了
select * from SNP_AGENT ;--代理
select * from SNP_PACKAGE ;--程序包
select * from SNP_SCEN ;--场景
select * from SNP_PLAN_AGENT ;--场景调度方案

--下面三组信息是类似的,都是记录场景及相关步骤以及执行详细信息的,如果需要查询明细的执行状况就要用到下面的表了。
select * from SNP_SCEN ;
select * from SNP_SCEN_REPORT; 
select * from SNP_SCEN_STEP ;
select * from SNP_SCEN_TASK ;

select * from SNP_SESSION ;
select * from SNP_SESSION_DBG ;
select * from SNP_SESS_TASK_LOG ;

select * from SNP_STEP ;
select * from SNP_STEP_LOG ;
select * from SNP_STEP_REPORT ;

我自己用的监控语句如下:

select lagent_name,scen_name,case when sync_time-r_dur_interval>20 then '警告' else '正常' end as status  from 
(
select t2.lagent_name,t1.scen_name,(trunc((sysdate-t1.last_date)*24*60)) sync_time,t2.r_dur_interval
from SNP_SCEN t1 inner join SNP_PLAN_AGENT t2 on t1.scen_name=t2.scen_name
where t2.r_time = 0 order by 1
)

解释:last_date指的是最后一次开始执行的时间,r_dur_interval是我设置的循环间隔的分钟数。我的每个调度几乎20分钟以内就执行完毕了,然后间隔10分钟循环执行。所以如果运行间隔如果超过了20分钟那么肯定就有问题了。

当然也有定时执行的,不过我这边绝大多数都是循环执行。所以我只写了监控定时调度的监控语句。

 

上面语句运行,最后一列状态如果是警告就去具体核查处理就行了。

可以写一个java程序定时或者循环查询状态,有异常就发邮件或者短信通知开发者处理。

或者也可以将监控写成odi的单独的程序包,不过我本身就要监控odi还要利用odi监控自己这个有点矛盾了。

 

 

 

你可能感兴趣的:(BI,Oracle,ELT,ODI,ODI监控,Oracle,Data,Integrator)