【實驗】【PARTITION】RANGE分割槽建立
前言:可以說Oracle是分割槽技術的先行者,在oracle7的時候就提出了分割槽技術,而且在最新版本的11g中分割槽的型別又有所加強(如複合索引的組合方式增多了),分割槽技術對於海量資料的儲存和高效檢索起到了不可或缺的作用。range分割槽是使用最多的一種分割槽,這個小文兒將進行一些關於range分割槽的介紹和實驗。
1.range分割槽簡介
以列值的取值範圍作為分割槽的劃分條件
按照表的時間列對每月的資料進行分割槽就是一個很好的range分割槽的例子。
不在指定範圍內的記錄會被儲存在maxvalue所在的分割槽
2.建立range分割槽表所需要的表空間
sec@ora10g> create tablespace tbs_part01 datafile '/oracle/oradata/ora10g/tbs_part01.dbf' size 100m;
sec@ora10g> create tablespace tbs_part02 datafile '/oracle/oradata/ora10g/tbs_part02.dbf' size 100m;
sec@ora10g> create tablespace tbs_part03 datafile '/oracle/oradata/ora10g/tbs_part03.dbf' size 100m;
sec@ora10g> create tablespace tbs_part04 datafile '/oracle/oradata/ora10g/tbs_part04.dbf' size 100m;
3.建立分割槽表
sec@ora10g> 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 tbs_part01,
4 partition t_range_p2 values less than (20) tablespace tbs_part02,
5 partition t_range_p3 values less than (30) tablespace tbs_part03,
6 partition t_range_pmax values less than (maxvalue) tablespace tbs_part04);
Table created.
4.查詢user_part_tables檢視獲得“分割槽的表”的資訊
sec@ora10g> select table_name,partitioning_type,partition_count from user_part_tables where table_name='T_PARTITION_RANGE';
TABLE_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
T_PARTITION_RANGE RANGE 4
5.查詢user_tab_partitions檢視獲得“表的分割槽”資訊
sec@ora10g> col TABLE_NAME for a20
sec@ora10g> col partition_name for a20
sec@ora10g> col HIGH_VALUE for a10
sec@ora10g> col TABLESPACE_NAME for a15
sec@ora10g> select table_name,partition_name,high_value,tablespace_name from user_tab_partitions where table_name='T_PARTITION_RANGE' order by partition_position;
TABLE_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
-------------------- -------------------- ---------- ---------------
T_PARTITION_RANGE T_RANGE_P1 10 TBS_PART01
T_PARTITION_RANGE T_RANGE_P2 20 TBS_PART02
T_PARTITION_RANGE T_RANGE_P3 30 TBS_PART03
T_PARTITION_RANGE T_RANGE_PMAX MAXVALUE TBS_PART04
6.建立global索引range分割槽
sec@ora10g> create index idx_parti_range_id on t_partition_range(id)
2 global partition by range(id)(
3 partition i_range_p1 values less than (10) tablespace tbs_part01,
4 partition i_range_p2 values less than (40) tablespace tbs_part02,
5 partition i_range_pmax values less than (maxvalue) tablespace tbs_part03);
Index created.
7.查詢user_part_indexes檢視獲得“分割槽的索引”的資訊
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';
INDEX_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID RANGE 3
8.查詢user_ind_partitions檢視獲得“索引的分割槽”資訊
sec@ora10g> select index_name,partition_name,high_value,tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;
INDEX_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID I_RANGE_P1 10 TBS_PART01
IDX_PARTI_RANGE_ID I_RANGE_P2 40 TBS_PART02
IDX_PARTI_RANGE_ID I_RANGE_PMAX MAXVALUE TBS_PART03
9.建立local索引range分割槽
刪除原有的索引
sec@ora10g> drop index idx_parti_range_id;
Index dropped.
建立
sec@ora10g> create index idx_parti_range_id on t_partition_range(id) local;
Index created.
查詢local索引資訊
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';
INDEX_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID RANGE 4
sec@ora10g> select index_name,partition_name, high_value, tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;
INDEX_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID T_RANGE_P1 10 TBS_PART01
IDX_PARTI_RANGE_ID T_RANGE_P2 20 TBS_PART02
IDX_PARTI_RANGE_ID T_RANGE_P3 30 TBS_PART03
IDX_PARTI_RANGE_ID T_RANGE_PMAX MAXVALUE TBS_PART04
結論:local索引的分割槽維護完全依賴於其索引所在表
10.local索引的較高階的玩法--自定義表空間
sec@ora10g> drop index idx_parti_range_id;
Index dropped.
sec@ora10g> create index idx_parti_range_id on t_partition_range(id) local (
2 partition i_range_p1 tablespace tbs_part01,
3 partition i_range_p2 tablespace tbs_part01,
4 partition i_range_p3 tablespace tbs_part02,
5 partition i_range_pmax tablespace tbs_part02
6 );
Index created.
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';
INDEX_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID RANGE 4
sec@ora10g> select index_name,partition_name, high_value, tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;
INDEX_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID I_RANGE_P1 10 TBS_PART01
IDX_PARTI_RANGE_ID I_RANGE_P2 20 TBS_PART01
IDX_PARTI_RANGE_ID I_RANGE_P3 30 TBS_PART02
IDX_PARTI_RANGE_ID I_RANGE_PMAX MAXVALUE TBS_PART02
比照上面的結果,這裡的表空間已經調整
-- The End --
1.range分割槽簡介
以列值的取值範圍作為分割槽的劃分條件
按照表的時間列對每月的資料進行分割槽就是一個很好的range分割槽的例子。
不在指定範圍內的記錄會被儲存在maxvalue所在的分割槽
2.建立range分割槽表所需要的表空間
sec@ora10g> create tablespace tbs_part01 datafile '/oracle/oradata/ora10g/tbs_part01.dbf' size 100m;
sec@ora10g> create tablespace tbs_part02 datafile '/oracle/oradata/ora10g/tbs_part02.dbf' size 100m;
sec@ora10g> create tablespace tbs_part03 datafile '/oracle/oradata/ora10g/tbs_part03.dbf' size 100m;
sec@ora10g> create tablespace tbs_part04 datafile '/oracle/oradata/ora10g/tbs_part04.dbf' size 100m;
3.建立分割槽表
sec@ora10g> 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 tbs_part01,
4 partition t_range_p2 values less than (20) tablespace tbs_part02,
5 partition t_range_p3 values less than (30) tablespace tbs_part03,
6 partition t_range_pmax values less than (maxvalue) tablespace tbs_part04);
Table created.
4.查詢user_part_tables檢視獲得“分割槽的表”的資訊
sec@ora10g> select table_name,partitioning_type,partition_count from user_part_tables where table_name='T_PARTITION_RANGE';
TABLE_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
T_PARTITION_RANGE RANGE 4
5.查詢user_tab_partitions檢視獲得“表的分割槽”資訊
sec@ora10g> col TABLE_NAME for a20
sec@ora10g> col partition_name for a20
sec@ora10g> col HIGH_VALUE for a10
sec@ora10g> col TABLESPACE_NAME for a15
sec@ora10g> select table_name,partition_name,high_value,tablespace_name from user_tab_partitions where table_name='T_PARTITION_RANGE' order by partition_position;
TABLE_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
-------------------- -------------------- ---------- ---------------
T_PARTITION_RANGE T_RANGE_P1 10 TBS_PART01
T_PARTITION_RANGE T_RANGE_P2 20 TBS_PART02
T_PARTITION_RANGE T_RANGE_P3 30 TBS_PART03
T_PARTITION_RANGE T_RANGE_PMAX MAXVALUE TBS_PART04
6.建立global索引range分割槽
sec@ora10g> create index idx_parti_range_id on t_partition_range(id)
2 global partition by range(id)(
3 partition i_range_p1 values less than (10) tablespace tbs_part01,
4 partition i_range_p2 values less than (40) tablespace tbs_part02,
5 partition i_range_pmax values less than (maxvalue) tablespace tbs_part03);
Index created.
7.查詢user_part_indexes檢視獲得“分割槽的索引”的資訊
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';
INDEX_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID RANGE 3
8.查詢user_ind_partitions檢視獲得“索引的分割槽”資訊
sec@ora10g> select index_name,partition_name,high_value,tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;
INDEX_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID I_RANGE_P1 10 TBS_PART01
IDX_PARTI_RANGE_ID I_RANGE_P2 40 TBS_PART02
IDX_PARTI_RANGE_ID I_RANGE_PMAX MAXVALUE TBS_PART03
9.建立local索引range分割槽
刪除原有的索引
sec@ora10g> drop index idx_parti_range_id;
Index dropped.
建立
sec@ora10g> create index idx_parti_range_id on t_partition_range(id) local;
Index created.
查詢local索引資訊
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';
INDEX_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID RANGE 4
sec@ora10g> select index_name,partition_name, high_value, tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;
INDEX_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID T_RANGE_P1 10 TBS_PART01
IDX_PARTI_RANGE_ID T_RANGE_P2 20 TBS_PART02
IDX_PARTI_RANGE_ID T_RANGE_P3 30 TBS_PART03
IDX_PARTI_RANGE_ID T_RANGE_PMAX MAXVALUE TBS_PART04
結論:local索引的分割槽維護完全依賴於其索引所在表
10.local索引的較高階的玩法--自定義表空間
sec@ora10g> drop index idx_parti_range_id;
Index dropped.
sec@ora10g> create index idx_parti_range_id on t_partition_range(id) local (
2 partition i_range_p1 tablespace tbs_part01,
3 partition i_range_p2 tablespace tbs_part01,
4 partition i_range_p3 tablespace tbs_part02,
5 partition i_range_pmax tablespace tbs_part02
6 );
Index created.
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';
INDEX_NAME PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID RANGE 4
sec@ora10g> select index_name,partition_name, high_value, tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;
INDEX_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID I_RANGE_P1 10 TBS_PART01
IDX_PARTI_RANGE_ID I_RANGE_P2 20 TBS_PART01
IDX_PARTI_RANGE_ID I_RANGE_P3 30 TBS_PART02
IDX_PARTI_RANGE_ID I_RANGE_PMAX MAXVALUE TBS_PART02
比照上面的結果,這裡的表空間已經調整
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-608689/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實驗】【PARTITION】RANGE分割槽建立【轉】
- 【實驗】【PARTITION】RANGE分割槽表合併分割槽
- 【實驗】【PARTITION】RANGE分割槽表增加分割槽
- 【實驗】【PARTITION】RANGE分割槽表刪除分割槽
- 【實驗】【PARTITION】RANGE分割槽表截斷表分割槽(Truncate Partition)
- 【實驗】【PARTITION】RANGE分割槽表移動表分割槽(Move Partition)
- 【實驗】【PARTITION】RANGE分割槽表重新命名錶分割槽(Rename Partition)
- ORACLE 範圍分割槽 partition-range分割槽Oracle
- 深入解析partition-range分割槽
- 【實驗】【PARTITION】RANGE分割槽表未指定maxvalue分割槽將無法插入相關資料
- oracle composite partition組合分割槽_composite partition rangeOracle
- Oracle Interval Partition 自動分割槽表-實驗Oracle
- 分割槽Partition
- 【實驗】【PARTITION】exp匯出分割槽表資料
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- MySQL RANGE分割槽MySql
- 全面學習分割槽表及分割槽索引(6)--建立range-list組合分割槽索引
- 深入學習分割槽表及分割槽索引(5)--建立range-hash組合分割槽(續)索引
- 【實驗】【PARTITION】交換分割槽時分割槽表有主鍵目標表亦需有主鍵
- 分割槽表PARTITION table
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維
- 分割槽partition知識點
- MySQL分割槽(Partition)詳解MySql
- Oracle 分割槽(partition)技術Oracle
- Oracle分割槽表(Partition Table)Oracle
- 分割槽剪除 (partition pruning)
- 分割槽表PARTITION table(轉)
- 融合(merge partition)分割槽
- 合併分割槽(coalesce partition)
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- oracle partition分割槽_分割槽列為空測試(一)Oracle
- Spark學習——分割槽Partition數Spark
- oracle reference partition引用分割槽(一)Oracle