1

パーティションのある大きなテーブルがあります。元:

CREATE TABLE cust_order (
cust_id     NUMBER(10), 
start_date   VARCHAR2(25), 
amount_sold NUMBER(10,2))
PARTITION BY RANGE (START_DATE)
(  
PARTITION MAY VALUES LESS THAN ('20120601'),
PARTITION DEF VALUES LESS THAN(MAXVALUE));

MAYパーティションに含まれる値が '20120501' 未満になり、'20120501' から '20120601' までのデータがパーティションに格納されるように、テーブルを変更したいと考えていますDEF

4

1 に答える 1

3

まず、常に日付をDATE列に格納する必要があります。列に日付を格納するVARCHAR2(25)ことは、将来の問題のレシピです。誰かが、予期しない形式の文字列を必然的に挿入します。

MAY次に、とパーティションの間にパーティションがないと仮定すると、パーティションDEFを分割できますMAY

ALTER TABLE cust_order
  SPLIT PARTITION may AT ('20120501')
   INTO( PARTITION may,
         PARTITION june_temp )
 UPDATE GLOBAL INDEXES;

JUNE_TEMP次に、とDEFパーティションをマージします

ALTER TABLE cust_order
  MERGE PARTITIONS june_temp, def
   INTO PARTITION  def

しかし、これを行う際の知恵がわかるかどうかはわかりません...デフォルトのパーティションは通常、データを保存するべきではありません。通常、そこにのみ存在するため、予期しない大きなパーティションキーがある場合でも挿入がエラーになりません。 。したがって、すでに1つのパーティションにあるデータを取得し、それをデフォルトのパーティションに移動するのはかなり奇妙に思えます。将来パーティションを作成するだけの場合、パーティションをとJUNEパーティションに分割しない理由がわかりません。MAYJUNE

于 2012-04-19T20:04:45.133 に答える