0

アーカイブ戦略を見てください-特定のデータセットをアーカイブする必要があります。

挿入/削除ルーチンではなく、パーティション交換を使用することを考えていました。

アーカイブされるテーブルは、日付でパーティション化された間隔範囲であり、国のリストサブパーティションがあります。

交換を分割したいのは特定の国向けです。

create table 
test_table
(tbl_id number,
country varchar2(2),
sales_dt date,
volume number)
partition by range (sales_dt) interval (NUMTOYMINTERVAL(1,'Month'))
subpartition by list (country)
Subpartition template
(subpartition p_ireland values ('IR'),
subpartition p_france values ('FR'),
subpartition p_other values (DEFAULT))
(partition before_2008 values less than (to_date('01-JAN-2008','DD-MON-YYYY')));

ロードされたデータは、パーティションとサブパーティションに正しく分類されます。すべてのパーティション名はシステムによって生成されます。

すべての「FR」サブパーティションのパーティション交換に来ると、ロジックを判別できません。

使用する

Alter table test_table
exchange subpartition system_generated_name
with table TEST_TABLE_ARCH;

特定の「既知の」サブパーティションを交換できます。

Oracle 11gで「for」ロジックを使用できることは知っていますが、構文を機能させることができません。

何か案は?

4

1 に答える 1

0

私たちは過去にこれをテストし、それを正しく行うための手順を考え出す必要があると信じていました. 目標は、2 つのパーティション スワップを実行することです。

前提条件: 空のスワップ テーブルを作成して、ソース テーブルとのパーティション スワップを行います。また、パーティション化されるアーカイブ テーブルも作成します。

大まかなプロセス:

  • アーカイブ テーブルに新しい空のパーティションを作成します。
  • スワップ テーブルとアーカイブするソース パーティションの間でパーティション交換を行います (結果: ソース テーブルの空のパーティション、スワップ テーブルのアーカイブ パーティション)
  • スワップ テーブルとアーカイブ テーブル内の新しい空のパーティションの間でパーティション交換を行います。(結果: 元のソース テーブル パーティションはアーカイブ テーブルのパーティションになり、スワップ テーブルは空に戻ります)
  • ソース テーブルに空のパーティションをドロップします (再利用したくない場合)。

これをコーディングしたことはないので、このプロセスには微調整が必​​要かもしれませんが、そのような戦略を追求した場合、これは私たちがしなければならなかったことだと思います.

于 2011-09-28T13:06:22.360 に答える