全面學習分割槽表及分割槽索引(10)--交換分割槽
直白的說就是遷移資料。遷移資料的方式很多,為什麼要使用exchange partition的方式呢,表急,聽三思慢慢道來。
Exchange partition提供了一種方式,讓你在表與表或分割槽與分割槽之間遷移資料,注意不是將錶轉換成分割槽或非分割槽的形式,而僅只是遷移表中資料(互相遷移),由於其號稱是採用了更改資料字典的方式,因此效率最高(幾乎不涉及io操作)。Exchange partition適用於所有分割槽格式,你可以將資料從分割槽表遷移到非分割槽表,也可以從非分割槽表遷移至分割槽表,或者從hash partition到range partition諸如此類吧。
其語法很簡單:alter table tbname1 exchange partition/subpartition ptname with table tbname2;
Exchange partition遷移的方式也很有意思,言語表達怕大家聽不明白,下面直接透過示例來表達:
借用前文中建立的空分割槽表:t_partition_range,並插入幾條記錄
JSSWEB> create table t_partition_range (id number,name varchar2(50))
2 partition by range(id)(
3 partition t_range_p1 values less than (10) tablespace tbspart01,
4 partition t_range_p2 values less than (20) tablespace tbspart02,
5 partition t_range_p3 values less than (30) tablespace tbspart03,
6 partition t_range_pmax values less than (maxvalue) tablespace tbspart04
7 );
表已建立。
JSSWEB> insert into t_partition_range values (11,'a');
已建立 1 行。
JSSWEB> insert into t_partition_range values (12,'b');
已建立 1 行。
JSSWEB> insert into t_partition_range values (13,'c');
已建立 1 行。
JSSWEB> commit;
提交完成。
再建立一個非分割槽表,結構與t_partition_range相同
JSSWEB> create table t_partition_range_tmp (id number,name varchar2(50));
表已建立。
執行交換分割槽(我們知道剛插入到range分割槽表的資料都在分割槽t_range_p2中,因此這裡指定交換該分割槽)
JSSWEB> alter table t_partition_range exchange partition t_range_p2
2 with table t_partition_range_tmp;
表已更改。
看看效果如何:
JSSWEB> select * from t_partition_range partition(t_range_p2);
未選定行
JSSWEB> select * from t_partition_range_tmp;
ID NAME
---------- --------------------------------------------------
11 a
12 b
13 c
記錄成功交換到未分割槽的表中。
我們再執行一次exchange partition的命令,看看又會發生什麼呢
JSSWEB> select *from t_partition_range partition(t_range_p2);
ID NAME
---------- --------------------------------------------------
11 a
12 b
13 c
JSSWEB> select *from t_partition_range_tmp;
未選定行
又交換回來了,有點兒意思。
再做個更加明確的測試,我們往未分割槽的表中加入一些記錄後再執行exchange partition,看看會發生什麼呢:
JSSWEB> insert into t_partition_range_tmp values (15,'d');
已建立 1 行。
JSSWEB> insert into t_partition_range_tmp values (16,'e');
已建立 1 行。
JSSWEB> insert into t_partition_range_tmp values (17,'d');
已建立 1 行。
JSSWEB> alter table t_partition_range exchange partition t_range_p2
2 with table t_partition_range_tmp;
表已更改。
JSSWEB> select *from t_partition_range partition(t_range_p2);
ID NAME
---------- --------------------------------------------------
15 d
16 e
17 d
JSSWEB> select *from t_partition_range_tmp;
ID NAME
---------- --------------------------------------------------
11 a
12 b
13 c
這就是前面所說的,互相交換的意思~~
注意:
l 涉及交換的兩表之間表結構必須一致,除非附加with validation子句;
l 如果是從非分割槽表向分割槽表做交換,非分割槽表中的資料必須符合分割槽表中指定分割槽的規則,除非附加without validation子句;
l 如果從分割槽表向分割槽表做交換,被交換的分割槽的資料必須符合分割槽規則,除非附加without validation子句;
l Global索引或涉及到資料改動了的global索引分割槽會被置為unusable,除非附加update indexes子句。
提示:
一旦附加了without validation子句,則表示不再驗證資料有效性,因此指定該子句時務必慎重。
例如:
JSSWEB> insert into t_partition_range_tmp values (8,'g');
已建立 1 行。
JSSWEB> alter table t_partition_range exchange partition t_range_p2
2 with table t_partition_range_tmp without validation;
表已更改。
JSSWEB> select *from t_partition_range partition(t_range_p2);
ID NAME
---------- --------------------------------------------------
11 a
12 b
13 c
8 g
雖然新插入的記錄並不符合t_range_p2分割槽的範圍值,但指定了without validation後,資料仍然轉換成功。
=====================================
檢視前面的連載:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1074272/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- 全面學習分割槽表及分割槽索引(1)索引
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 全面學習分割槽表及分割槽索引(17)--其它索引分割槽管理操作索引
- 全面學習分割槽表及分割槽索引(16)--增加和刪除索引分割槽索引
- 全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽索引
- 全面學習分割槽表及分割槽索引(15)--修改表分割槽屬性和模板索引
- 全面學習分割槽表及分割槽索引(7)--怎樣管理索引
- 全面學習分割槽表及分割槽索引(6)--建立range-list組合分割槽索引
- 深入學習Oracle分割槽表及分割槽索引Oracle索引
- 深入學習分割槽表及分割槽索引(1)索引
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- 全面學習分割槽表及分割槽索引(7)--怎樣管理(續)索引
- Oracle分割槽表及分割槽索引Oracle索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- 【三思筆記】 全面學習Oracle分割槽表及分割槽索引筆記Oracle索引
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- 分割槽表及分割槽索引建立示例索引
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引
- 深入學習分割槽表及分割槽索引(5)--建立range-hash組合分割槽(續)索引
- 全面學習分割槽表及分割槽索引(14)--截斷、移動和重新命名索引
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 如何查詢分割槽表的分割槽及子分割槽
- 【學習筆記】分割槽表和分割槽索引——概念部分(一)筆記索引
- 分割槽表分割槽索引查詢效率探究索引
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- 分割槽表、分割槽索引和全域性索引部分總結索引
- oracle 針對普通表的索引分割槽及10g新增hash 索引分割槽Oracle索引
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- INTERVAL分割槽表鎖分割槽操作
- oracle分割槽表和分割槽表exchangeOracle
- PLSQL根據分割槽表的分割槽名批次truncate分割槽SQL
- 分割槽索引學習筆記索引筆記
- 關於分割槽表和分割槽索引(About Partitioned Tables and Indexes)索引Index