sql> create table t (id number primary key, time date);
table created
sql> insert into t select rownum, created from dba_objects;
52269 rows inserted
sql> commit;
commit complete
sql>
sql> create table t_new (id, time) partition by range (time)
2 (partition p1 values less than (to_date('2004-7-1', 'yyyy-mm-dd')),
3 partition p2 values less than (to_date('2006-7-1', 'yyyy-mm-dd')),
4 partition p3 values less than (to_date('2008-7-1', 'yyyy-mm-dd')),
5 partition p4 values less than (maxvalue))
6 as select id, time from t;
table created
sql> rename t to t_old;
table renamed
sql> rename t_new to t;
table renamed
sql> select count(*) from t;
count(*)
----------
52269
sql> select count(*) from t partition (p1);
count(*)
----------
0sql> select count(*) from t partition (p2);
count(*)
----------
49697
sql> select count(*) from t partition (p3);
count(*)
----------
0sql> select count(*) from t partition (p4);
count(*)
----------
2572
優點:方法簡單易用,由於採用ddl語句,不會產生undo,且只產生少量redo,效率相對較高,而且建表完成後資料已經在分布到各個分割槽中了。
不足:對於資料的一致性方面還需要額外的考慮。由於幾乎沒有辦法通過手工鎖定t表的方式保證一致性,在執行create table語句和rename t_new to t語句直接的修改可能會丟失,如果要保證一致性,需要在執行完語句後對資料進行檢查,而這個代價是比較大的。另外在執行兩個rename語句之間執行的對t的訪問會失敗。
適用於修改不頻繁的表,在閒時進行操作,表的資料量不宜太大。
來自:http://yangtingkun.itpub.net/post/468/13091
將普通表轉變為分割槽表
oracle的普通表沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,下面介紹三種效率比較高的方法,並說明它們各自的特點。方法一 利用原表重建分割槽表。步驟 sql create table t id number primary key,time date 表已建立。sql...
將普通表轉變為分割槽表
oracle的普通表沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,下面介紹三種效率比較高的方法,並說明它們各自的特點。方法一 利用原表重建分割槽表。步驟 sql create table t id number primary key,time date 表已建立。sql...
普通表變為分割槽表
將已存在資料的普通表轉變為分割槽表,沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,一般可以有三種方法,視不同場景使用 用例 方法一 利用原表重建分割槽表。create table t id number primary key,time date insert into ...