分区维护操作:
移动分区:
通常是移动到不同的表空间。Move
Alter table sales_hash move partition p2 tablespace users;
(单独移动表也可以,达到整理碎片的效果Alter table tname move tablespace users;)
添加分区:
Alter table tname add partition p3 values less than……
只能在已经分区表的最后一个分区之后添加,并且最后一个分区使用特定健值定义,不能是maxvalue.
如果想在中间或开始部分,或者maxvalue后,添加分区,使用split 分裂已有分区。
拆分分区:
ALTER TABLE SALES_RANGE SPLIT PARTITION sales_2000
at (TO_DATE('01/05/2001','DD/MM/YYYY'))
INTO ( PARTITION sales_2000_1, PARTITION sales_2000_2);
相当于:PARTITION sales_2000_1 values less than(TO_DATE('01/05/2001','DD/MM/YYYY'))
删除分区:
Alter table tname drop partition p3;
Alter table tname truncate partition p3;
结合分区:
只是对于hash partition, 用来合并并减少一个partition
set line 150
Select segment_name,partition_name from dba_segments where segment_name=upper(’sales_hash’);
alter table sales_hash coalesce partition;
合并分区:
合并相邻的分区
ALTER TABLE four_seasons MERGE PARTITIONS quarter_one, quarter_two INTO PARTITION quarter_two;
交换表分区:
CREATE TABLE sales_range_temp
(salesman_id NUMBER(5),
salesman_name VARCHAR2(30),
sales_amount NUMBER(10),
sales_date DATE);
insert into sales_range_temp values(11,11,11,sysdate);
select * from sales_range partition(sales_2000_2);
alter table sales_range exchange partition sales_2000 withtable sales_range_temp;
分区索引:
分为global, local index
local partitioned index:
每个local index对应一个分区。增加和删除分区自动的增加和删除了local index。
Local index可以是全表unique的,条件是partition key必须是index columns的一部分?
CREATE INDEX employees_local_idx ON employees (employee_id) LOCAL;
分区上的位图索引只能建立为local partitioned index,不能是global
Global partitioned index:
索引也分区,但是分几个区,按照什么样的partition key分区跟表没有关系。不能增加分区,可以使用ALTER INDEX SPLIT PARTITION;删除:ALTER INDEX DROP PARTITION;这些操作会使的索引失效,所以建议:
ALTER TABLE DROP PARTITION P1 UPDATE GLOBAL INDEXES
这样保证索引仍然有效,online,不需重建。
CREATE INDEX employees_global_part_idx ON employees(employee_id)
GLOBAL PARTITION BY RANGE(employee_id)
(PARTITION p1 VALUES LESS THAN(5000),
PARTITION p2 VALUES LESS THAN(MAXVALUE));
Global Nonpartitioned Indexes:
怎样提高性能:
Partition Pruning
根据SQL自动选择应该访问哪些必要的分区,partition pruning可以跳过不必要的索引或者表分区或子分区。但是如果SQL对partition columns作了function( to_date除外),则不会删除分区。
参考: http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/partiti.htm#11985