問題タブ [bulk-operations]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - dblinkを使用したリモートテーブルからの挿入のOracleチューニング
3 億件のレコードを含むリモート テーブルがあり、すべてのデータをローカル データベースのテーブルに挿入する必要があります。
使ってみます
- BULK COLLECT句。
- MERGE 句。
- 平行挿入
すべてのオプションに時間がかかりすぎます。
すべてのレコードを効率的に挿入するには、他にどのようなオプションを使用できますか?
リモートおよびローカル データベースで Oracle 11g を使用しています
oracle - Oracle PLSQL Bulk collect with limit 句を使用して、データ全体をコレクションに入れる
140000行のEMPというテーブルが1つあり、データ全体をコレクションに保持する必要があります.コレクションを拡張し、「BULK COLLECT ..LIMIT」句機能を使用してデータ全体をコレクションにロードする方法.
データが新しいレコードで上書きされたため、以下のロジックは必要な結果を提供しません。ロジックを提案してください。
sql - Oracle 挿入パフォーマンス
範囲パーティション分割され、2 つのローカル インデックスを持つテーブルに、外部テーブルからデータを挿入します。
私の場合、
新しいファイルが来るので、各フラット ファイルに 60 秒未満のレコードを挿入する必要があります。
フラット ファイルは +5 M レコードと 2 GB で構成されます (ボリューム: 1 日あたり合計 50 億レコード)。さらに、外部テーブルの選択に挿入する前に、いくつかの並べ替え操作を行います。
私の環境は、Oracle ExaData X-5 12.2 バージョンです。
同じテーブルに同時に挿入を行うプロセスが多数あるため、追加ヒントを使用できません。並列ヒントとログなしヒントを使用できます。
このすべてのプロセスを管理する .exe があります。ソースからフラットファイルを取得し、フラットファイルがもう1つある場合はそれらを結合し、結合ファイルを外部テーブルの真のディレクトリに移動し、外部テーブルから自分のテーブルにデータを挿入するプロシージャを呼び出します。最後にフラットファイルを次のものに変更します。
異なるフラット ファイルごとに 1 つの .exe があります。
外部テーブルからのすべての選択操作には 35 ~ 40 秒かかりますが、挿入には 50 ~ 60 秒かかりすぎます。
有益なアドバイスをいただけますか?
sql - Oracle でのタイプ 2 SCD の実装
最初に、私はstackoverflowコミュニティに不慣れで、SQL自体に比較的慣れていないので、質問を正しくフォーマットしていなかったり、要件を明確に述べていなかったりした場合は、ご容赦ください。
Oracle でタイプ 2 SCD を実装しようとしています。ソーステーブル ( customer_records
) の構造を以下に示します。
vendor_id
上の表は毎週更新され、 と で表される特定の顧客のレコードを取得しましたcustomer_id
。それぞれの顧客がユニークvendor_id
でcustomer_id
. 顧客の階層 ( rank
) の変更を追跡しようとしています。顧客の階層が数週間同じままである可能性があり、顧客の階層に変更があった場合にのみ追跡します.
目的の出力 (ディメンション テーブル) は次のようになります。
顧客の階層が変化するたびに、新しいテーブルでそれを追跡するようにします。current_flag
また、最新の階層に = 'Y'を含めたいと考えています。
マージを使用してそれを実行できるようにしたい。