2012-01-01 8 views
5

私は471ファイルの合計が約100GBです。ファイルは次の形式でトランザクションデータを持つ独立した「\ tの」、次のとおりです。複数のファイルをロードするOracle 11gR2:sqlldrまたは外部テーブル?

char(10) not null, 
char(8) not null, 
char(1) not null, 
char(4) not null, 
number not null, 
char(1) not null, 
char(1) not null, 
char(1) not null, 
number not null 

ファイルのトランザクションの順序が重要であり、理想的には、主キーIDと、保存する必要があります。最初は、これらのファイルをsqlldrでロードしましたが、非常に時間がかかります。私は最近、外部テーブルについて学びました。戦略的な観点から、どの方法が良いですか?外部テーブルはどのように機能しますか?ありがとうございました。

+1

*を*それは十分にありますマニュアルに記載されています(http://docs.oracle.com/cd/E11882_01/server.112/e22490/et_concepts)。htm –

+0

なぜsqlldrは時間がかかりますか?ダイレクトロードを試して、データが同じローカルサブネットまたはSANにあることを確認してください(または、基本的に、NJのサーバーがCAのデータベースにプッシュするように、ネットワークを介して小さなパイプを通してデータをプッシュしないでください)。直接負荷の制限がありますが、それよりもはるかに高速です。 – tbone

+1

私は、sqlldrが1時間に8500万行の割合でロードされていると評価しました。一人の男と話すことに基づいて、これは合理的だと思われますが、彼は専門家ではありません。 300k行ごとにコミットがあります。オラクル・シーケンスは、挿入時に主キーを生成します。データの順序は重要であり、キーは順序を保持します。ファイルは、データベースと同じサーバー上のドライブ上にあります。より良いレートを達成できますか? –

答えて

3

外部表とSQL * Loaderのレコード解析は非常に似ているため、通常は同じレコード形式で大きなパフォーマンスの違いはありません。 しかし、 外部表は、以下の状況で、より適切かもしれない:

  • あなたはそれがデータベースにロードされるときにデータを変換したいです。
  • データをロードする必要があり、ステージングテーブルの追加のインデックス作成が必要です。
  • 最初に外部データを分割しなくても、透過的な並列処理を使用したいと考えています。

ただし、次のような状況では、最高の負荷性能のためのSQL * Loaderを使用します。

  • あなたがリモートでデータをロードします。
  • データに変換は不要であり、データをパラレルにロードする必要はありません。

SQL * Loaderのパフォーマンスを向上させるために、次の提案が行われました。

  • コマンドラインで、次のオプションを追加してロード処理
  • 中に負荷 テーブル上のインデックスおよび/または制約(主キー)をお持ちでない:TRUE = DIRECT。これにより、従来のパスローダーの代わりにダイレクトパスローダー を使用して、 がRDBMS処理のほとんどをバイパスします。ただし、ダイレクトロードを使用できない場合は、 というケースがあります。これらの制限は、 Oracleサーバー・ユーティリティー・ガイド
  • 区切りのデータではなく固定幅のデータを使用して取得できます。区切りデータのために、各 レコードは、変換は、両方の時間と従来型パスのCPU 集中
  • ているように、文字セット変換を回避READSIZEおよびBINDSIZEパラメータを使用するデリミタ
  • 試行のためにスキャンする必要があります。
    READSIZEは、読み取りシステムコールごとに大きなデータチャンクを取得します。 BINDSIZEパラメータは、今度 にバッチ

ソースごとにロードされる行数を指定するバインド配列のサイズ指定:?外部表はどのように機能するのhttp://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/sql_loader_faq.pdf

+0

はどちらの場合も並列に動作します。 –

+0

これは+1でしたが、 "修正幅データを使用する"となりました。彼らのクライアントは確かに固定されていませんか? – Ben

+0

@FlorinGhitaあなたは正しいですが、なぜオラクルが文書にこれを書いているのかわかりません... –