Sei sulla pagina 1di 6

#! /usr/bin/ksh ################################################################### # Author: Rajasekhar # Date: September, 2012 # Purpose: To check informatica errors automatically ################################################################## . $HOME/.

profile SCRIPT_DIR=$HOME/scripts INFM_DIR=/sites/app/qatport/temp/INFM LOG_DIR=$INFM_DIR/logs TASK_ERR_LOG=$LOG_DIR/tasks_error.log TASK_ERR_LOG_UNIQ=$LOG_DIR/tasks_error_uniq.log TASK_ERR_LOG_UNIQ_PRIOR=$LOG_DIR/tasks_error_uniq_prior.log TASK_ERR_LOG_DLY=$LOG_DIR/tasks_error_dly.log CHECK_TASK_LOG=$LOG_DIR/check_infm_tasks.log CHECK_TASK_ERR=$LOG_DIR/check_infm_tasks.err EMAIL_NOTE=$LOG_DIR/error_email_message EMAIL="etlperson1@company.com etlperson2@company.com" TEAM_EMAIL="etlperson1@company.com etlpm@company.com" #PAGE="xxxxxxxxxx@abc.com" PRIOR_DATE=`date +%m%d%Y` PRIOR_TIME=`date +%H%M%S` PRIOR_DATETIME=$PRIOR_DATE-$PRIOR_TIME START_DATETIME=$PRIOR_DATETIME cat /dev/null > $TASK_ERR_LOG_UNIQ cat /dev/null > $CHECK_TASK_LOG check_infm_task() { while [ 1 -gt 0 ] do CURR_TIME=`date +%H%M%S` CURR_DATE=`date +%m%d%Y` CURR_DATETIME=`date +%m%d%Y-%H%M%S` echo "----------------------------------------------" echo "" echo "Current Time Stamp = $CURR_DATETIME" if [ $CURR_TIME -gt 050000 -a $CURR_DATE != $PRIOR_DATE ];then echo "==============================================" echo "Daily ETL Status Process Started At $CURR_DATETIME" echo "" if [ -s $TASK_ERR_LOG_UNIQ ]; then cat /dev/null > $TASK_ERR_LOG_DLY echo " ======================================================================= Folder_Name : Wkf_Name : Wklt_Name : Sess_Name : Sess_Start_Time ======================================================================= " >> $TASK_ERR_LOG_DLY cat $TASK_ERR_LOG_UNIQ |awk -F',' '{print $2","$4","$10","$16","$18}' |sort -u | awk F',' '{print $1" : "$2" : "$3" : "$4" : "$5 "\n"}' >>$TASK_ERR_LOG_DLY echo "Sent errored tasks info to ETL Team Thru Email" echo "" mailx -s "Informatica Errored Tasks From $PRIOR_DATETIME To $CURR_DATETIME" $TEAM_EMAIL < $TASK_ERR_LOG_DLY mv $TASK_ERR_LOG_UNIQ $TASK_ERR_LOG_UNIQ_PRIOR cat /dev/null > $TASK_ERR_LOG_UNIQ else mailx -s "All Informatica Tasks Were Succeessful From $PRIOR_DATETIME to $CURR_DATETIME" $TEAM_EMAIL < /dev/null

#echo "Set Prior Date To Current Date To Stop Daily ETL Status Process" PRIOR_DATE=$CURR_DATE PRIOR_TIME=$CURR_TIME PRIOR_DATETIME=$CURR_DATETIME echo "Daily ETL Status Process Finished at $CURR_DATETIME" echo "==============================================" fi fi cat /dev/null > $TASK_ERR_LOG echo "finding errored tasks from $START_DATETIME thru $CURR_DATETIME" #FIND out errored tasks that are associated with wklt sqlplus -s rchepuru/start123 @$SCRIPT_DIR/fail_sess_wklt_involve.sql $START_DATETIME $CURR_DATETIME >> $TASK_ERR_LOG #FIND out errored tasks that are not associated with wklt sqlplus -s rchepuru/start123 @$SCRIPT_DIR/fail_sess_wklt_not_involve.sql $START_DATETIME $CURR_DATETIME >> $TASK_ERR_LOG #FIND out errored tasks that are not wklt or session related sqlplus -s rchepuru/start123 @$SCRIPT_DIR/fail_tasks_other.sql $START_DATETIME $CURR_DATETIME >> $TASK_ERR_LOG START_DATETIME=`sqlplus -s rchepuru/start123 << EOF set heading off set feedback off select to_char(min(start_time), 'mmddyyyy-hh24miss') from infoadmin.rep_wflow_run@p0trpir_dblink where run_status_code = 6; exit; EOF` if [ -z $START_DATETIME ];then #echo "No tasks running at $CURR_DATETIME" #echo "Next run check for errrors from $CURR_DATETIME" START_DATETIME=$CURR_DATETIME fi COUNT=`cat $TASK_ERR_LOG |wc -l` if [ $COUNT -ne 0 ]; then #check whether the error is already recorded for FILE in `cat $TASK_ERR_LOG` do EXIST=`cat $TASK_ERR_LOG_UNIQ |grep "$FILE"` if [ -z $EXIST ];then #check the error in previous day error file for any continuous process PRIOR_EXIST=`cat $TASK_ERR_LOG_UNIQ_PRIOR |grep "$FILE"` if [ -z $PRIOR_EXIST ];then echo $FILE >> $TASK_ERR_LOG_UNIQ FOLDER_NAME=`echo $FILE |awk -F, '{print $2}'` WORKFLOW_NAME=`echo $FILE |awk -F, '{print $4}'` TASK_NAME=`echo $FILE |awk -F, '{print $10}'` TASK_START=`echo $FILE |awk -F, '{print $11}'` TASK_END=`echo $FILE |awk -F, '{print $12}'` SESS_NAME=`echo $FILE |awk -F, '{print $16}'` SESS_START=`echo $FILE |awk -F, '{print $18}'` SESS_END=`echo $FILE |awk -F, '{print $19}'` # Error sessions that are not associated with wklt" if [ -z $TASK_NAME ];then if [ ! -z $SESS_NAME ];then echo " Folder_Name = $FOLDER_NAME Workflow_Name = $WORKFLOW_NAME Session_Name = $SESS_NAME Session_Start_Time = $SESS_START Session_End_Time = $SESS_END

Errored at $SESS_END" > $EMAIL_NOTE mailx -s "$SESS_NAME errored at $SESS_END" $EMAIL < $EMAIL_NOTE mailx -s "$SESS_NAME errored at $SESS_END" $PAGE < $EMAIL_NOTE fi fi # Error session that is associated with wklt" if [ ! -z $TASK_NAME ];then if [ ! -z $SESS_NAME ];then echo " Folder_Name = $FOLDER_NAME Workflow_Name = $WORKFLOW_NAME Worklet_Name = $TASK_NAME Session_Name = $SESS_NAME Session_Start_Time = $SESS_START Session_End_Time = $SESS_END Errored at $SESS_END" > $EMAIL_NOTE mailx -s "$SESS_NAME errored at $SESS_END" $EMAIL < $EMAIL_NOTE mailx -s "$SESS_NAME errored at $SESS_END" $PAGE < $EMAIL_NOTE else # Error tasks with cmd, eventwait etc" echo " Folder_Name = $FOLDER_NAME Workflow_Name = $WORKFLOW_NAME Task_Name = $TASK_NAME Task_Start_Time = $TASK_START Task_End_Time = $TASK_END Errored at $TASK_END" > $EMAIL_NOTE mailx -s "$TASK_NAME errored at $TASK_END" $EMAIL < $EMAIL_NOTE mailx -s "$TASK_NAME errored at $TASK_END" $PAGE < $EMAIL_NOTE fi fi else echo "No new errored tasks From $START_DATETIME thru $CURR_DATETIME" echo "" fi else echo "No new errored tasks From $START_DATETIME thru $CURR_DATETIME" echo "" fi echo "" done else echo "No errored tasks From $START_DATETIME thru $CURR_DATETIME" echo "" fi echo "Check for error tasks again after 30 mins" echo "" sleep 1800 done } check_infm_task 1>>$CHECK_TASK_LOG 2>>$CHECK_TASK_ERR exit;

Sql script details: fail_sess_wklt_involve.sql : /************************************************************/ --Author: Ramadevi.Chepuru --Date: Aug , 2007 --Purpose: To find out error sessions that are associated with wklt /************************************************************/ set verify off define START_DATETIME=$1 define CURR_DATETIME=$2 set pagesize 0 set echo off set heading off set feedback off set linesize 500 select a.subject_id ||','|| a.subject_area ||','|| a.workflow_id ||','|| a.workflow_name ||','|| to_char(a.start_time, 'mmddyyyy-hh24:mi:ss') ||','|| to_char(a.end_time, 'mmddyyyy-hh24:mi:ss') ||','|| round((a.end_time - a.start_time) *24*60,2) ||','|| decode(a.run_status_code, 1, 'Succeed', 2, 'Disabled',3, 'Failed', 4, 'Stopped',5,'Aborted', 'Unknown') ||','|| b.task_id ||','|| b.task_name ||','|| to_char(b.start_time, 'mmddyyyy-hh24:mi:ss') ||','|| to_char(b.end_time, 'mmddyyyy-hh24:mi:ss') ||','|| round((b.end_time - b.start_time) *24*60,2) ||','|| decode(b.run_status_code, 1, 'Succeed', 2, 'Disabled',3, 'Failed', 4, 'Stopped',5,'Aborted', 'Unknown') ||','|| c.session_id ||','|| c.session_name ||','|| c.mapping_name ||','|| to_char(c.actual_start, 'mmddyyyy-hh24:mi:ss') ||','|| to_char(c.session_timestamp, 'mmddyyyy-hh24:mi:ss') ||','|| round((c.session_timestamp - c.actual_start) *24*60,2) ||','|| c.successful_source_rows ||','|| decode(c.run_status_code, 2, 'Disabled',3, 'Failed', 4, 'Stopped',5,'Aborted','Unknown') from rep_wflow_run a, rep_task_inst_run b, rep_sess_log c where a.workflow_id = b.workflow_id and a.workflow_id = c.workflow_id and a.workflow_run_id = b.workflow_run_id and a.workflow_run_id = c.workflow_run_id and a.start_time >= to_date('&1','mmddyyyy-hh24miss') and a.start_time < to_date('&2','mmddyyyy-hh24miss') and b.task_type_name = 'Worklet' and b.worklet_run_id = 0 and b.child_run_id <> 0 and b.child_run_id = c.worklet_run_id and c.run_status_code <> 1 and c.run_status_code <> 6; exit;

fail_sess_wklt_not_involve.sql /************************************************************/ --Author: Ramadevi.Chepuru --Date: Aug , 2007 --Purpose: To find out error sessions that are not associated with wklt /************************************************************/ SET VERIFY OFF define START_DATETIME=$1 define CURR_DATETIME=$2 set pagesize 0 set echo off set heading off set feedback off set linesize 500 select a.subject_id ||','|| a.subject_area ||','|| a.workflow_id ||','|| a.workflow_name ||','|| to_char(a.start_time, 'mmddyyyy-hh24:mi:ss') ||','|| to_char(a.end_time, 'mmddyyyy-hh24:mi:ss') ||','|| round((a.end_time - a.start_time) *24*60,2) ||','|| decode(a.run_status_code, 1, 'Succeed', 2, 'Disabled',3, 'Failed', 4, 'Stopped',5,'Aborted', 'Unknown') ||',,,,,,,'|| c.session_id ||','|| c.session_name ||','|| c.mapping_name ||','|| to_char(c.actual_start, 'mmddyyyy-hh24:mi:ss') ||','|| to_char(c.session_timestamp, 'mmddyyyy-hh24:mi:ss') ||','|| round((c.session_timestamp - c.actual_start) *24*60,2) ||','|| c.successful_source_rows ||','|| decode(c.run_status_code, 2, 'Disabled',3, 'Failed', 4, 'Stopped',5,'Aborted', 'Unknown') from rep_wflow_run a, rep_sess_log c where a.workflow_id = c.workflow_id and a.workflow_run_id = c.workflow_run_id and a.start_time >= to_date('&1','mmddyyyy-hh24miss') and a.start_time < to_date('&2','mmddyyyy-hh24miss') and c.worklet_run_id = 0 and c.run_status_code <> 1 and c.run_status_code <>6; exit; fail_tasks_other.sql /************************************************************/ --Author: Ramadevi.Chepuru --Date: Aug , 2007 --Purpose: To find our error taks other than sessions /************************************************************/ set verify off define START_DATETIME = $1 define CURR_DATETIME = $2 set pagesize 0 set echo off set heading off set feedback off set linesize 500 select a.subject_id ||','|| a.subject_area ||','||

a.workflow_id ||','|| a.workflow_name ||','|| to_char(a.start_time, 'mmddyyyy-hh24:mi:ss') ||','|| to_char(a.end_time, 'mmddyyyy-hh24:mi:ss') ||','|| round((a.end_time - a.start_time) *24*60,2) ||','|| decode(a.run_status_code, 1, 'Succeed', 2, 'Disabled',3, 'Failed', 4, 'Stopped',5,'Aborted', 'Unknown') ||','|| b.task_id ||','|| b.task_name ||','|| to_char(b.start_time, 'mmddyyyy-hh24:mi:ss') ||','|| to_char(b.end_time, 'mmddyyyy-hh24:mi:ss') ||','|| round((b.end_time - b.start_time) *24*60,2) ||',,'|| decode(b.run_status_code, 2, 'Disabled',3, 'Failed', 4, 'Stopped',5,'Aborted', 'Unknown') ||',,,,,,,,' from rep_wflow_run a, rep_task_inst_run b where a.workflow_id = b.workflow_id and a.workflow_run_id = b.workflow_run_id and a.start_time >= to_date('&1','mmddyyyy-hh24miss') and a.start_time < to_date('&2','mmddyyyy-hh24miss') and b.task_type_name not in ('Worklet', 'Session', 'Start') and b.run_status_code <> 1 and b.run_status_code <> 6; exit;

Potrebbero piacerti anche