復原能力代碼
開發回復資料整合時,請使用這些最佳作法。
定義自動清除程序
定義自動清除程序可協助復原程式碼。
您在開發程式碼並執行測試時,將需要重設環境,同時修正錯誤、改善效能以及最佳化載入策略。建立清除程序早期可讓您改善這些程序的發展程式碼,以增進程式碼發展的時間點,讓您將環境重設為任何想要的狀態:
- 重設所有項目,目標系統沒有資料
- 將環境重設為上次載入前的狀態 (這會包括變數、狀態或稽核表格等)
- 重設環境,讓來自特定載入 (或 batch_id 或 run_id) 的資料在整個環境之間重設,而不會影響其他資料
自動執行清除處理作業通常可讓處理作業更有效率地執行 (不需要查看要重設的表格清單或要執行的 SQL 查詢)。自動化也可大幅減少重設環境錯誤部分的某人風險-尤其是在除錯意外,與其他人有關的時候。
由於這些清除程序變得更精細,因此可將它們包含在整合處理作業中。有兩種方式可充分利用:
- 載入資料前一律執行強制清除。如果您是載入可以輕易識別的資料 (使用批次 Id 或特定日期),這可以輕鬆地提供覆寫先前資料集 (會失敗) 的方法
- 如果發生錯誤,請使用工作流程中的這些清除程序。您不想中止整個載入,因為您會遺失來源或目標環境的連線。請假設您載入數百個檔案,並在這些檔案上執行複雜的轉換。您是否要中止所有項目,因為第二個分割表示您存取其中一個檔案時發生問題,或是您必須完成所有項目,儘快重試該檔案,如果仍無法載入該檔案,則只需要較具實際的測量項目?視您正在執行之環境的穩定性而定,您可以選擇在發出警示適當的個人之前重試幾次。同樣地,您可能會想要根據在環境中經歷的中斷類型強制暫停,然後再試一次。
考量不同類型的復原程序。對於簡單的工作,通常要等到重試未執行任何其他清除或重設的作業失敗。但程式碼開發更為複雜,您將會遇到的錯誤類型也會變得更加複雜。解決載入錯誤後 (載入本身無法運作),您可以執行到商業錯誤中 (資料已載入,但是您載入的是錯誤的資料,或某些計算發生錯誤)。您應謹慎調查要如何處理這些類型的更正。在早期階段中,可能會有效重設發生商業錯誤時的所有內容。但您想要以程式碼進展更精細的形式增長,如此您就可以在更正中更明顯。
您可以在 Oracle Data Integrator 中定義循環,以包括清除程序和增量追蹤嘗試次數的計數器。為了提高中斷的能力,最佳做法包括發生錯誤的記錄,以便在錯誤變得更頻繁時採取適當的動作:您不希望在復原時間以隱藏成長問題的成本。您可以使用從失敗的步驟擷取錯誤中描述的方法。
如果您知道處理中的某個特定步驟雖然發生錯誤 (例如,未設定中斷時即使離線的遠端系統),您可以利用 Oracle Data Integrator 內建功能來重試套裝程序中的步驟。使用自動重試說明如何設定步驟的自動重試。
使用此方法時請記住以下事項:
- 如果處理設為重試,Oracle Data Integrator 不會通知您處理失敗。如果其中一項嘗試成功,就會將步驟記錄為 Oracle Data Integrator 日誌成功 (您仍然可以在自己的稽核表格中持續追蹤這些嘗試)。
- 重試和等待會增加該步驟執行的持續時間。複查整合處理作業的效能時請記住。
指定效能偏差
您將想要瞭解延遲的位置,以及這些延遲的原因。這可以與增加網路活動有關,以減少可用的頻寬、資料庫中過時的統計資料,這對於執行 SQL 程式碼會有不利的影響,或是一個伺服器上只對少數選取之項目感興趣的檔案深度。
Oracle Data Integrator 的最佳實務是清除日誌 (以及分析藍本報表),以儘可能改善效能。這個說明存檔日誌或複製效能相關資訊非常有用,以便能夠調查一段時間的效能。
當您調查效能衰退時,請查看 Oracle Data Integrator 中的個別步驟 (不停止整體效能):這是開始瞭解延遲來源的最佳方法。此外,也請確定您有一個自動處理作業可以將 Oracle Data Integrator 日誌整個清除。您可以實際建立執行這些永久清除的 Oracle Data Integrator 工作,包括案例報表。如需詳細資訊,請參閱與 OdiPurgeLog 整個清除日誌。
由於 Oracle Data Integrator 只提供整個清除連結至運算子中存在之階段作業的分析藍本報表,因此在整個清除階段作業之後,需要有 Oracle Support 的協助才能將分析藍本報表整個清除。如果您忘記在永久清除階段作業之前永久清除案例報表,請洽詢「Oracle 客戶服務部」。Oracle 可以引導您完成適當的程序。
長期執行相當重要,以持續監督效能。效能下降通常是環境下降的警告符號。特別是,Oracle 建議您使用「SQL 計畫管理 (SPM)」來控制執行計畫。實際執行的執行計畫變更可能會導致失敗,而表格載入可能會導致執行計畫發生變更風險。
使用 OdiPurgeLog 永久清除日誌
如果您在「Oracle Data Integrator 套裝程式」的「公用程式」抽屜中看見稱為 OdiPurgeLog 的工具。您可以在設計用來整個清除 Oracle Data Integrator 日誌的情況下使用此記錄,並定期執行此分析藍本來確保您儘可能保留幾個日誌。
最佳作法包括:
- 您應一律永久清除報表。將日誌整個清除時,移除的外觀會比它們新。
- 您可以在整個清除中設定部分延遲層次:您可以使用變數來儲存先前的時間或之前的日期,然後將所有項目整個清除 (您可以將它與 End Date 參數搭配使用)。
- 您可以選擇僅整個清除分析藍本日誌 (與報表),或整個清除分析藍本和載入計劃日誌。
從失敗的步驟擷取錯誤
getPrevStepLog() API 通常會用於 Oracle Data Integrator 程序。如果步驟失敗,而您想要在嘗試執行更正動作之前擷取該步驟報告的錯誤,將會非常有用。
使用將傳回適當資訊的特性名稱呼叫此 API。例如,如果您想要階段作業的名稱、失敗的步驟名稱和相關的錯誤訊息,您可以使用下列程式碼來擷取程序的錯誤:
Session:
<%=odiRef.getInfo("SESS_NAME")%> encountered the following
error at step: <%=odiRef.getPrevStepLog("STEP_NAME")%>Error Message:
<%odiRef.getPrevStepLog("MESSAGE")%>
您可以在其他程式碼片段中包含此程式碼片段,將該資訊儲存在某個地方,或者傳送該資訊以進行適當的處理。
使用自動重試
由於簡要或暫時的總監,因此自動重試可節省完整處理作業的時間與取消作業。
在您的套裝程序中,選取您要允許重試的步驟。在特性方塊中,按一下「進階」頁籤。在失敗後處理區域中:
- 定義您要嘗試重試該步驟的次數
- 定義每次重試之間的等待時間
分析藍本階段作業使用唯一或動態名稱
若多次執行相同的案例來載入不同組的資料,「Oracle Data Integrator 運算子」檢視就不會因為全部顯示的是執行相同案例的許多執行處理清單 (有時候可能會發生錯誤) 而有所幫助。
呼叫分析藍本時,其中一個方法是利用「階段作業名稱」(SESS_NAME) 參數。如果相同案例有許多時間執行,您可能已經有一個參數,告訴此案例應該處理哪些資料 (特定資料片段、load_id、日期等)。您可以使用此變數替分析藍本的每次執行建立唯一的名稱。透過在分析藍本呼叫中設定階段作業名稱,套裝程式的其他階段作業會導致 Oracle Data Integrator 運算子中較容易閱讀的日誌。這樣大綱可以讓您更容易瞭解哪些資料集在發生失敗時有問題。
使用事件導向工具
Oracle Data Integrator 提供一些可在套裝程序中使用的工具,以等待新資料提供使用。
所有這些工具都可讓您設定輪詢率和逾時期間:
- OdiFileWait 會等待目錄中的檔案 (請記住,您的 Oracle Data Integrator 代理程式將必須查看該目錄!)。
- OdiWaitForData 會根據您提供的查詢,等待表格中有新資料。
- OdiWaitForTable 會等待在您的資料庫中建立表格。
設定代理程式藍圖快取逾時
使用 Oracle Data Integrator 12c,透過快取執行之分析藍本的定義來改善代理程式的效率。您可以控制在「Oracle Data Integrator 拓樸」的實體代理程式定義中快取分析藍本的時間。
快取代理程式中的案例對於即時工作非常有用,因此代理程式不需要為每次執行而取得儲存區域中的資訊。繪回是無法立即取得案例新版本的部署。預設逾時,直到取得新版本的快取分析藍本為 600 秒 (10 分鐘),而預設會快取 100 個項目。
您可以管理這些值。在「代理程式」定義的「定義」頁籤中,您可以使用「階段作業藍圖快取管理」段落來設定快取項目上限和「未使用的藍圖存留時間 (秒)」。