將普通表轉變為分割槽表 方法一

2021-04-28 02:21:28 字數 1536 閱讀 8770

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 ...