2016-11-15 11 views
1

データをターゲットテーブルにロードするETLプロセスがあります。 のターゲットテーブルと同じ別のテーブルBを作成しました。レポートを生成する。現在、データがターゲット表Aにロードされると、ストアド・プロシージャーが呼び出されて、表Bを表Temp、表Bを表A、表Aを表Tempとして名前を変更します。これは、レポート生成のダウンタイムを最小限に抑えるために行われます。テーブルの名前変更と交換パーティションの違い

この方法では、レポートは常に最新のデータにアクセスします。今私の質問は、私はテーブルBのパーティションを作成し、AとパーティションテーブルBのセグメントを交換する交換パーティションのメカニズムを使用することができます。どのようなより良いアプローチとどのようにテーブルの名前を変更から交換パーティションです。

+0

@Georgeは、それは我々がパーティションP1とパーティションP2を入れ替えることができ、ターゲット表のpatitionのP1にターゲット表とETLプロセスのデータをロードするには2つのパーティションP1とP2を持ち、その後、交換用のパーティションを使用することが可能です。 P1はETLに使用され、P2はレポートに使用されます... Exchangeパーティションメカニズムを使用してこの設計が可能ですか? – Dex

答えて

0

概念的には同じです。メタデータのみが変更されます。 しかし、交換パーティションを使用します。 1.パーティションに統計を収集するオプションがあります(フルテーブルと比較して小さいサブセット) 2.古いデータのアーカイブが容易になります。 (たとえば、3年以上前のパーティションをアーカイブすることができます)

詳細については、asktomの次のリンクを参照してください。あなたがテーブルに静的にこれらのテーブルに参照するオブジェクトの名前を変更している場合は無効になる場合があり

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1238800184155,%7Bpartitions%7D

1

。だから私は交換パーティションを使用することを好むだろう。

交換パーティション方式のもう1つの利点は、テーブルAとテーブルBが異なる許可を持つことができることです。Aは最終ユーザーへの読み取り許可を持つターゲットテーブル、Bはアプリケーションによる中間テーブルアクセスです。

また、異なるインデックスを持つ可能性があります.Bはインデックスをまったく必要としません。

表Aはすべての履歴データを(パーティション内に)格納することができ、Bは現在生成された中間データ(非パーティション化)のみを保持します。

+0

私は同意します。パーティション化されたテーブルにパーティションが1つしかない場合でも、パーティション化オプションを使用すると交換パーティションが好きです。 –

0

テーブルは、データオブジェクト(およびデータオブジェクトのメタデータ(行数など)と組み合わされた固有の論理メタデータ(名前、権限など)のセットを持つオブジェクトであることを理解する必要があると思います。その他の統計情報)。

テーブルの名前を変更すると、そのテーブル名の文字列が解決するオブジェクトに関するすべてのテーブルメタデータ、データオブジェクト、およびそのメタデータが変更される可能性があります。システム。今は別のオブジェクトを指しています。

パーティションを交換すると、テーブルオブジェクトに関連付けられたデータオブジェクトが変更されます。テーブルのメタデータはそのまま残り、依然として同じ論理オブジェクトを指しているため、システムの残りの部分には本質的に影響が少なくなります。

この理由から、パーティション交換をテーブルの名前変更に変更することをお勧めします。

p.s.このメタファーを使用すると、ビュー・オブジェクトは両方とも同様の論理メタデータを持つため、表オブジェクトと論理的にほとんど同じであると見なすこともできます。もちろん、ビューにはデータオブジェクトはなく、その基礎となる関係を定義するための追加のメタデータがあります。

マテリアライズド・ビューも表と似ていますが、追加のメタデータ(ビューに似ています)とリフレッシュ目的のための追加のメタデータがあります。

遅延セグメント作成テーブルは、データオブジェクトがまだ作成されていないテーブルオブジェクトです。

など

関連する問題