2012-04-19 12 views
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」よりと「20120601」から「20120501」からのデータはDEFパーティションに格納される値が含まれているように、私はテーブルを変更したいです。

答えて

3

最初に、DATE列に日付を格納する必要があります。 VARCHAR2(25)列に日付を格納することは、問題を解決するためのレシピです。予期せぬ形式の文字列を挿入することは避けられません。

第二には、MAYDEFパーティションの間にパーティションが存在しないと仮定して、あなたがMAYパーティション

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

を分割して、私はJUNE_TEMPDEFパーティション

ALTER TABLE cust_order 
    MERGE PARTITIONS june_temp, def 
    INTO PARTITION def 

をマージすることができしかし、このことを知っているかどうかはわかりません。デフォルトのパーティションには一般的にデータは格納されません。一般的には挿入だけでエラーが発生しません意外に大きなパーティションキーがある場合したがって、既に1つのパーティションにあるデータを取り出し、それをデフォルトのパーティションに移動させるのはむしろ奇妙に思えます。将来的にJUNEパーティションを作成する場合は、パーティションをMAYパーティションとJUNEパーティションに分割しない理由がわかりません。

+0

こんにちはJustin、はい1)しかし、これはこの実装方法です。私は20120501より小さい値がMAYに行き、そのパーティションにもはや適合しないものがDEFに行くように、MAYパーティションを「分割」したいと思います。 – odew

+0

@odew - あなたの質問と私の答えを更新しました。 –

関連する問題