0

txnテーブルを10gで1か月間隔の範囲パーティションでパーティション化したい。txn_dateを持つテーブル。

パーティションを自動化したい。これは11で可能だと思いますが、10gで達成する方法はありますか。

create table part
(
   txn_Date date
)
PARTITION BY RANGE (txn_date)
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
(
   partition p1 values less than (TO_DATE('01-NOV-2007','DD-MON-YYYY'))
);
4

1 に答える 1

0

必要に応じて、これらのパーティションを追加するジョブをスケジュールできます。これはDDLであるため、動的SQLを使用して実行されます。

例えば。月ごとにパーティション化されたデータを保持するテーブルの場合、各月の最後の週末にジョブを実行して、翌月のパーティションを作成することができます。

create or replace procedure p_part_maintenance_mnthy
as
declare
  v_partition_name all_tab_partitions.partition_name%type;
  v_limit varchar2(50);
begin

  select to_char(trunc(add_months(sysdate,1),'MM'),'MonYYYY')
    into v_partition_name 
    from dual; --eg. output Oct2012

  select to_char(trunc(add_months(sysdate,2),'MM'),'dd-mon-yyyy')
    into v_limit
    from dual; -- eg. output 01-nov-2012

execute immediate 'ALTER TABLE sales ADD PARTITION ' || v_partition_name ||
                   ' VALUES LESS THAN (' || v_limit || ') tablespace XYZ';

end;
/

通常、上記のようなすべての同様の関数呼び出し(日次、月次、年次)は1つのパッケージに含まれ、table_nameも入力として受け取ります。これらは、必要に応じて個々の手順から呼び出されます。

于 2012-09-21T18:09:46.387 に答える