2012-07-23 107 views
1

我有一種情況!解決方案使用SQLLDR/SQL運行並行運行Loader

10模塊需要大約接近各2小時,以方法,其包括從外部文件加載數據20小時運行的是不合理的,並且必須的,因爲它是編碼的方式順序運行。每個模塊都有一組相同的腳本,但處理不同的數據集。

組件:

一個)桌子:TempTableA,FinalTableA,TempTableB,FinalTableB; 這些表中的每一個都由模塊密鑰唯一地表示。 模塊密鑰默認爲'-99' b)外部文件(FileA,FileB)沒有模塊密鑰,但只有一個數據。 c)腳本知道該模塊的模塊密鑰。 d).ctr文件

每個模塊更多或更少的具有下列步驟中的代碼:

截斷表TempTableA SQLLDR $ USER/$ PASSWRD @ $ PRD_SID控制= CTR/fileA.ctr日誌=日誌/ fileA.log壞=登錄/ fileA.bad跳過= 1行= 10000沉默=反饋

更新表TempTableA設置moduleKey = $ moduleKey其中moduleKey = '-99' INSERT INTO FinalTableA如SELECT * FROM TempTableA;

現在我不能並行運行這些模塊,因爲這些臨時表的被截斷。

有沒有更好的解決方案?

我知道外部表的,但這個心不是關於使用外部表,那麼我是如何用共享的臨時表的問題得到解決。這可能與運行並行負載無關。

回答

0

您可以同時使用SQL * Loader和做出的直接路徑負載。所以,你需要用DIRECT = TRUE和PARALLEL = TRUE來配置命令。

禁止UPDATE語句。將其替換爲CTL文件中的常量。

我想你可以使用一個像提示/ * + APPEND * /在最後一句中插入數據。但是,請檢查您的要求以確定最終表是否可以分區。所以,最後一步不是INSERT INTO類型的句子,而是EXCHANGE PARTITION類型的句子。這是將數據上傳到決賽桌的最快方式。

來自智利。

帕維爾

相關問題