2012-04-30 45 views
0

我們有兩個並行運行的Informatica作業。Shell腳本來檢查informatica工作流的狀態

一開始於11.40 CET,它有大約300個Informatica工作流程,其中一個是fact_sales。

其他工作運行在3.40 CET,它有大約115個工作流程,其中許多工作流程依賴於fact_sales數據一致性。

問題是fact_sales應該在流程2中的某些工作流程開始之前完成,以確保數據準確,但這種情況一般不會發生。

我們試圖做的是將fact_sales依賴工作流只在fact_sales完成後才運行。

您能否爲我提供一種方法來編寫一個檢查這個fact_sales狀態的unix shell腳本,如果它成功,然後啓動其他依賴工作流程,如果沒有,那麼它應該發送失敗的郵件。 謝謝

+0

你是說,Informatica的不支持工作/腳本/流的依賴作爲基本功能?祝你好運。 – shellter

+0

它,我從來沒有說過它不但是該系統是這樣的,我們不能使用的功能 – Egyptian

回答

0

我沒有看到需要編寫一個自定義shell腳本。這些大部分都是相當標準/通用的功能,可以使用Command Task和事件等待來實現。

 
**Process1 - runs at 11:50** 
....workflow 
... 
fact_sales workflow. **Add a command task at the end 
         **that drops a flag, say, fact_sales_0430.done 
... 
....workflow..500 

而所有依賴進程將有一個等待在這個.done文件上的事件等待。由於有多個相關的工作流程,請確保它們都不會立即刪除文件。您可以在一天結束時或第二天開始加載時刪除該.done文件。

 

workflow1 
..... 
dependantworkflow1 -- Event wait, waiting on fact_sales_0430.done (do not delete file). 
dependantworkflow2 -- Event wait, waiting on fact_sales_0430.done (do not delete file). 
someOtherWorkflow 
dependantworkflow3 -- Event wait, waiting on fact_sales_0430.done (do not delete file). 
.... 
...... 
+0

我是這個方法中,所有的槍,但事實是依賴是巨大的,我們正在處理的工作流的數量是說,大約200工作流程。問題似乎是我們必須根據fact_sales來分解流程2。在每個依賴工作流中使用命令任務和事件等待似乎並不是一項邏輯任務,儘管它是最安全的。 – Egyptian

+0

瞭解。在這種情況下,您應該開始構建基於UNIX Cron的自定義調度程序。您可以擁有諸如WKF_STATUS,WKF_LOGS和WKF_DEPENDENCIES等表格。你的腳本將運行作爲後臺進程,並檢查是否有完整的(狀態=「完成」)任何父流程,並提交所有尚未運行(STATUS =「NOTRUN」)的相關流程。花時間,但可行。看看http://www.etl-developer.com/2011/04/workflow-dependency-in-informatica-part-2-load-status-entries/,看看它是否有幫助。除了deamon過程,您的腳本將採用類似的方式。 –

+0

考慮銷售事實表加載需要完成20個工作流程(第二集)才能開始。 (只是一個示例數字,你可以不同)。 像拉傑什說,先裝完成後創建文件系統上的文件。 在第二組工作流中,依賴項應該將此作爲工作流中的額外依賴項。等待文件在那裏,但不要刪除它。 對我來說聽起來相當簡單。 – Gyan

0

第二種方法可以如下 -

您必須運行某種調度的用於啓動這些工作流程。由於在一組的Informatica着的時間表多個工作流,它只能處理worklet /會話在那個依賴關係管理層。

從調度器,創建跨銷售事實負荷WF和其他相關工作流程的依賴..

0

我認爲以下提到的腳本會爲你工作。請修改參數。

WAIT_LOOP=1 
    while [ ${WAIT_LOOP} -eq 1 ] 
    do 
     WF_STATUS=`pmcmd getworkflowdetails -sv $INFA_INTEGRATION_SERVICE -d $INFA_DOMAIN -uv INFA_USER_NAME -pv INFA_PASSWORD -usd Client -f $FOLDER_NAME $WORKFLOW_NAME(fact_sales) | grep "Workflow run status:" | cut -d'[' -f2 | cut -d']' -f1` 
      echo ${WF_STATUS} | tee -a $LOG_FILE_NAME 
        case "${WF_STATUS}" in 
          Aborted) 
           WAIT_LOOP=0 
           ;; 
          Disabled) 
           WAIT_LOOP=0 
           ;; 
          Failed) 
           WAIT_LOOP=0 
           ;; 
          Scheduled) 
           WAIT_LOOP=0 
           ;; 
          Stopped) 
           WAIT_LOOP=0 
           ;; 
          Succeeded) 
           WAIT_LOOP=0 
           ;; 
          Suspended) 
           WAIT_LOOP=0 
           ;; 
          Terminated) 
           WAIT_LOOP=0 
           ;; 
          Unscheduled) 
           WAIT_LOOP=0 
           ;; 
        esac 
        if [ ${WAIT_LOOP} -eq 1 ] 
        then 
          sleep $WAIT_SECONDS 
        fi 
    done 
      if [ ${WF_STATUS} == "Succeeded" ] 
      then 
        pmcmd startworkflow -sv $INFA_INTEGRATION_SERVICE -d $INFA_DOMAIN -uv INFA_USER_NAME -pv INFA_PASSWORD -usd Client -f $FOLDER_NAME -paramfile $PARAMETER_FILE $WORKFLOW_NAME(dependent_one) | tee $LOG_FILE_NAME 
      else 
        (echo "Please find attached Logs for Run" ; uuencode $LOG_FILE_NAME $LOG_FILE_NAME)| mailx -s "Execution logs" $EMAIL_LIST 
        exit 1 
      fi 
0

我可以看到你有主要挑戰 - 保持大量infa工作流之間的依賴關係。 你有兩個選項 -

  1. 你可以使用一些自動化的調度工具設置的依賴,並通過一個正常運行它們之一。有很多免費工具,但取決於你的舒適/時間/成本等,你應該選擇。鏈接here
  2. 其次,您可以創建自定義作業調度程序。我使用UNIX腳本oracle表做了一個類似的調度器。因此,這裏是步驟 -
    • 將您的所有工作流分類到組中。獨立流量應該進入組1,並且組1上的相關流量進入組2,依此類推。
    • 設置你的過程,從上面的組中逐個挑選並啓動它們。如果啓動隊列是空的,那麼它應該等待。稱之爲loop2。
    • 保持一個輪詢循環,將檢查拉開序幕流動的狀態。如果失敗,中止等過程失敗,郵件發送給用戶並標記所有'隊內/從屬'流程失敗。如果運行繼續輪詢。如果成功把控制權交給環路2 - 如果開球隊列爲空,然後進入下一組僅當組中的所有工作流程成功。

這是一個有點棘手的過程,但一旦您設置了回報。只要你想,你可以添加儘可能多的工作流程和你的維護將更加平滑相比INFA調度或INFA worklet等