2.2 增加表分区
增加分区的分区范围必须比当前分区的最后一个分区更高
TYGER@ORA11G>alter table sales add partitionsales01 values less than ('01-Feb-2004') tablespace sales_ts01;
alter table sales add partition sales01 values lessthan ('01-Feb-2004') tablespace sales_ts01
*
ERROR at line 1:
ORA-14074: partition bound mustcollate higher than that of the last partition
TYGER@ORA11G>alter table sales add partitionsales01
2 values less than ('01-Aug-2004') tablespacesales_ts01;
Table altered.
TYGER@ORA11G>selecttable_name,partition_name,tablespace_name
2 from user_tab_partitions;
TABLE_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- --------------------------------------------------
SALES SALES02 SALES_TS02
SALES SALES03 SALES_TS03
SALES SALES04 SALES_TS04
SALES SALES05 SALES_TS05
SALES SALES06 SALES_TS06
SALES SALES01 SALES_TS01
2.3 合并分区
必须是相邻的范围分区
继承最大的范围边界
TYGER@ORA11G>alter table sales 2 merge partitions sales06,sales01 intopartition sales07; Table altered. TYGER@ORA11G>select table_name,partition_name,tablespace_name 2 from user_tab_partitions; TABLE_NAME PARTITION_NAME TABLESPACE_NAME -------------------- -------------------------------------------------- SALES SALES07 USERS SALES SALES02 SALES_TS02 SALES SALES03 SALES_TS03 SALES SALES04 SALES_TS04 SALES SALES05 SALES_TS05
2.4 移动表分区
移动分区数据到另一个表空间
重新整理数据减少碎片
改变物理属性
TYGER@ORA11G>alter table sales move partitionsales01 2 tablespace sales_ts_move;
2.5 拆分表分区
拆分表分区———一个分区变的太大,导致备份,恢复和分区性能操作花费时间太长,重新分配I/O负载。
TYGER@ORA11G>alter table sales split partition sales07
2 at ('01-Jul-2004') // 按哪个时间点拆分
3 into (partition sales01 tablespacesales_ts01,
4 partition sales06 tablespacesales_ts06);
Table altered.
TYGER@ORA11G>selecttable_name,partition_name,tablespace_name
2 from user_tab_partitions;
TABLE_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- --------------------------------------------------
SALES SALES02 SALES_TS02
SALES SALES03 SALES_TS03
SALES SALES04 SALES_TS04
SALES SALES05 SALES_TS05
SALES SALES06 SALES_TS06
SALES SALES01 SALES_TS01
6 rows selected.
三、 11g新特性
分区增强功能
·间隔分区
·基于虚拟列的分区
·引用分区
·组合分区增强功能
·分区顾问
3.1间隔分区
间隔分区是范围分区的一种扩展
·当插入的数据超过了所有范围分区时,将自动创建指定间隔的分区。
·必须至少创建一个范围分区
·间隔分区可以自动创建范围分区
CREATE TABLE sales (order_date DATE, ...)
PARTITON BY RANGE (order_date)
INTERVAL(NUMTOYMINTERVAL(1,'month')
(PARTITION p_first VALUES LESS THAN('01-JAN-2006');
numtoyminterval函数——数字转换函数
语法:NUMTOYMINTERVAL ( n , 'char_expr' )
char_expr:日期描述,可以是YEAR和MONTH;
作用:可以将数字转换成相应的日期单位时间
比如:NUMTOYMINTERVAL ( 1, 'MONTH' ) 表示一个月
NUMTOYMINTERVAL ( 1, 'YEAR' ) 表示一年
3.2基于虚拟列的分区
虚拟列值是通过计算函数或表达式得到的。
可以在 create 或 alter 表操作中定义虚拟列。
虚拟列值实际上并未存储在磁盘上的表行中,而是根据需要进行计算
像其他表列类型一样,可以对虚拟列进行索引,可以在查询、DML 和 DDL 语句中使用它们。
可在虚拟列上对表和索引进行分区,甚至可以收集它们的统计信息。