異なるリモートデータベースのデータを独自のデータベースにロードする必要があります。私はWITH文を使用して単一の "複雑な"クエリを作成します。それは約1800万行のデータです。Oracle:大きなデータセットをテーブルに挿入する
挿入を行う最も効率的な方法は何ですか?
または他の方法があるINTO INSERTを使用して1
異なるリモートデータベースのデータを独自のデータベースにロードする必要があります。私はWITH文を使用して単一の "複雑な"クエリを作成します。それは約1800万行のデータです。Oracle:大きなデータセットをテーブルに挿入する
挿入を行う最も効率的な方法は何ですか?
または他の方法があるINTO INSERTを使用して1
最速の方法は、単一のSQL文を使用することです。次の最も効率的な方法は、BULK COLLECT
操作を実行するカーソルを使用して、SQLエンジンとPL/SQLエンジン間のコンテキスト・シフトを最小限にすることです。最も効率的でないアプローチは、カーソルを使用して行ごとにデータを処理することです。
ありがとうございます、BULK COLLECTは本当に役に立ちます。^_^ – Ianthe
1800万行になると、1回の挿入ステートメントでかなりのロールバックが必要になります。ループのカーソルはずっと遅くなりますが、x行ごとにコミットすることができます。
私は古い学校に行き、sqlldrやデータポンプを介してファイルにダンプします。
Justinが書いたように、最も効率的なアプローチは、単一のSQL文(insert into ... select ...)を使うことです。また、あなたがdirect-path insert
を利用することができますあなたはData Synchronisation Studioを使用して、一度に100万を取るために、SELECTステートメントを変更することができ
いくつかの質問(私は一度に18メートルは、おそらくあなたのマシンが過負荷になると思い)。これは一回限りの運動か定期的な出現ですか?負荷を実行するための時間枠は何ですか?ソースデータベースとターゲットデータベースのレイテンシはどのくらいですか?データベース間の接続の信頼性はどれくらいですか?ソースデータベース内のデータは、静的(アーカイブ)または動的(運用系)ですか?プロセスが途中で失敗した場合(ネットワーク接続を失うなど)、ターゲットデータベースに何を起こしたいですか? – APC