1

状況があります!

10 個のモジュールは、外部ファイルからのデータのロードを含む処理にそれぞれ約 2 時間近くかかります。20 時間の実行は無理であり、コード化されているため、順次実行する必要があります。各モジュールには同じスクリプト セットがありますが、異なるデータ セットを扱います。

コンポーネント:

a) テーブル: TempTableA、FinalTableA、TempTableB、FinalTableB; これらの各テーブルは、モジュール キーによって一意に表されます。モジュール キーのデフォルトは「-99」です。 b) 外部ファイル (FileA、FileB) にはモジュール キーがなく、データのみがあります。c) スクリプトは、そのモジュールのモジュール キーを認識します。d) .ctr ファイル

各モジュール内のコードには、多かれ少なかれ次の手順があります。

テーブル TempTableA の切り捨て sqlldr $USER/$PASSWRD@$PRD_SID control=ctr/fileA.ctr log=log/fileA.log bad=log/fileA.bad skip=1 rows=10000 silent=FEEDBACK

update table TempTableA set moduleKey = $moduleKey where moduleKey = '-99' insert into FinalTableA as select * from TempTableA;

これらの一時テーブルが切り捨てられているため、これらのモジュールを並行して実行できません。

より良い解決策はありますか?

私は外部テーブルを認識していますが、これは外部テーブルの使用に関するものではなく、共有一時テーブルの使用の問題を回避する方法に関するものです。また、これは並列ロードの実行についてではないかもしれません。

4

1 に答える 1

0

SQL*LOADER をパラレルで使用して、ダイレクト・パス・ロードを作成できます。したがって、DIRECT=TRUE および PARALLEL=TRUE を使用してコマンドを構成する必要があります。

UPDATE 文を抑制します。CTL ファイル内の定数に置き換えます。

最後の文の /*+ APPEND */ のようなヒントを使用してデータを挿入できると思います。ただし、要件を確認して、最終的なテーブルをパーティション分割できるかどうかを確認してください。したがって、最後のステップは INSERT INTO タイプの文ではなく、EXCHANGE PARTITION の文になります。そして、これがデータをファイナル テーブルにアップロードする最速の方法です。

チリからよろしく。

パベル

于 2013-04-02T15:44:21.770 に答える