2011-02-10 5 views
0

oracleデータベースにclobフィールドを含むファイルにデータを挿入する方法。ベスト/最速アプローチcsvファイルからOracleデータベースにClobデータを挿入します。

ファイルからの読み取り。 oracleデータベースに挿入

clobデータが存在する場合、いくつかの複雑な問題が発生する可能性があります。

おかげで、のNaveen

+0

ファイルには何千もの、時には何百万というレコードが含まれている場合があります。 –

+0

これを追加するのを忘れました。これはC#中間層を使用して行う必要があります。 –

答えて

1

これは私の最後の会社でこれを行うときに、ストアドプロシージャと複数のスレッドを使用してC#プログラムを作成しました。スレッドを上下に調整することで、データベースへの負荷が軽減されました。いくつかの構成設定のためにLoaderを使用できませんでした。連想配列も役に立ちました。

この例では、表が稼動していたために負荷がパフォーマンスを向上させた後に索引をオフにして再構築するため、最適化を行うことができませんでした。私たちのRAC環境では、各racサーバーがインデックスファイルを争い、インデックスを分割し調整することでパフォーマンスが向上しましたが、私は実際にOracleの専門家ではないため、よりスマートに求めてください。

CLOBデータのパフォーマンスが非常に悪いことがわかりました。私たちのフィールドの1つを複数のvarchar(4000)にまたがる圧縮文字列に変更し、使用時にプログラムを再結合するようにしました。

+0

@ Dan-OConnellどのようにしてファイルからデータベースにデータを挿入しましたか? –

+0

複数のスレッド。 1つのスレッドがファイルを読み込み、私たちが保存しようとしているオブジェクトのリストを埋めました(あるいはリストのリストでした、私はもう会社ではないので、私の前にコードはありません)。メインスレッドはファイルを読み込むスレッドを作成します。メインスレッドは、十分に読み込まれた後、新たに追加されたオブジェクトをデータベースに送信する別のスレッドを開始し、その後、メインスレッドは、十分なオブジェクトが読み込まれて別のスレッドを作成するまで待機します。また、スレッド数に制限があります。 –

+0

パフォーマンスを調整するためにデータベースにアップロードしている各スレッドに与えたオブジェクトのリストの数とスレッドの数で再生します。アップロード手順ではクローブをしていなかったので、データをアップロードするために連想配列を持つストアドプロシージャを使用しました。だからあなたのモデルに合っているかどうかは分かりません。 –

3

私は、データベース・サーバー上、またはあなたの意図は、クライアントからファイルをロードするかどうかを置いたファイルがある(または可能)かどうかに応じて、SQL * Loaderのか、外部表を一般的にお勧めしたいです機械。

SQL * Loader制御ファイルの詳細は、ファイルの形式によって異なりますが、マニュアルにはloading CLOB data stored in a data fileという例があります。

+0

@ Justin-Cave Justin、ありがとうございました。私はC#を使ってこれを行うと仮定しています。 –

1

ボトルネックを最小限に抑えます。

  • 太いパイプでDBサーバーに直接アクセスできるようにファイルを移動します。
  • データベースのデータファイルにRAID 10(RAID 5ではなく)が必要です。
  • REDOログ・ファイルがデータ・ファイルと異なるスピンドルにあることを確認してください。あなたは彼らがディスク上で戦うことを望んでいません。 は、このためにREDOログ・ファイルの多重化を無効にしたいと考えています。あなたは(おそらく)プロダクションDB上の永続的なフィクスチャとしてそれを望んではいませんが、これが一回限りの仕事であれば価値があります。
  • レプリケーションを無効にする可能性があるため、アーカイブログ・モードをオフにすると効果的です。もう一度、おそらくこれがオフの場合のみ関連します。
  • ハードウェアの書き込み負荷が高い場合は、SQL * Loader/external表を使用します。

    複数のスレッド/プロセスが、CPUよりもディスクに書き込む機能によって速度が制限されると思われるのかどうかは疑問です。 LOBを複数のスピンドル上のファイルを持つ表領域に分散できれば、それは役に立ちます。

    +0

    パフォーマンスに影響を与えるハードウェアに関する貴重な情報をお寄せいただきありがとうございます。私たちにとっては、C#を使用してこれを実装する必要があります。 –

    関連する問題