ITPub博客

首页 > 数据库 > Oracle > 数据库表分区

数据库表分区

Oracle 作者:zhanglei_09 时间:2013-12-20 09:17:04 0 删除 编辑
Create table Employee(
          name varchar2(20), 
 identification number(11), 
 birth_date date,
          salary  number(7,2), 
 location  char(50)) PARTITION BY RANGE(salary) 
 (PARTITION p1 VALUES THAN (500) TABLESPACE ts1, 
 PARTITION p2 VALUES THAN  (800) TABLESPACE ts2, 
 PARTITION p3 VALUES THAN (1000) TABLESPACE ts3 );
 
所插入的数据自动分配到相应分区。
所插数据不得大于LESS THAN中的最大值。
可以使用MAXVALUE。
在分区表中不能包含LONG, LOB和对象类型列。
当分区的最高限制不是MAXVALUE时, 系统设置一个隐含的CHECK约束。
聚集表不能分区。
不指定表空间时,则使用该用户的DEFAULT TABLESPACE。

SQL>Create table Employee(
          name varchar2(20),
          identification number(11),
          birth_date date,
          salary  number(7,2),
          location  char(50))
          PARTITION BY RANGE(salary)
         (PARTITION p1 VALUES THAN (500) TABLESPACE ts1,
          PARTITION p2 VALUES THAN  (800) TABLESPACE ts2,
          PARTITION p3 VALUES THAN (1000) TABLESPACE ts3,
          PARTITION p4 VALUES THAN (MAXVALUE) TABLESPACE ts4
          );  
CREATE TABLE list_customers 
   ( customer_id             NUMBER(6),
     cust_last_name        VARCHAR2(20),
     cust_address            CUST_ADDRESS_TYP,
     nls_territory               VARCHAR2(30))
   PARTITION BY LIST (nls_territory) (//如果插入的字段值为这个设置中list中的一项的时候,就分配到相应的分区
   PARTITION asia VALUES ('CHINA', 'THAILAND'),
   PARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'),
   PARTITION west VALUES ('AMERICA'),
   PARTITION east VALUES ('INDIA'));

--查询时:   
SQL>select * from Employee;
SQL>select * from Employee Partition(p1);
SQL>select * from Employee Partition(p2) ss where ss.salary>600;
SQL>create table part3  as select *  from Employee Partition(p3);   

SQL>Alter Table Employee Add Partition p4 Values Than(1500) Tablespace ts4;--对表新增分区
注:1.分区需加在最后一个分区高值之后。
2.使用MAXVALUE时,该表不可增加分区。  

--删除表分区
SQL>Alter Table Employee Drop Partition p4;
SQL>Alter Table Employee Truncate Partition p4;

--分区的增长方式,下一个为20k大小,最大扩充次数为200,扩充比率为50%,即第一次扩充是20K,第二次扩充是30K(增加50%),第三次扩充是45K
--一般 Maxextents 设为unlimited,Pctincrease 为0,保证每次扩充大小一致的时,不容易产生碎片,效率也会提高。但是oracle 默认的扩充比率是50
SQL>Alter Table Employee Modify Partition P1 Storage(Next 20k Maxextents 200 Pctincrease 50);
SQL>Alter Table Employee Rename Partition P1 to P11;

分区拆分(SPLIT)
将分区在分区范围内拆分为两个分区。
例如:将分区P3在900处分为两个分区。
SQL>Alter Table Employee Split Partition P3  At (900) Into (Partition P3,Partition P4);
 
使用EXCHANGE与表交换数据:
分区表的一个分区与一个基表间双向交换。
注意事项:
首先创建基表。
基表列名、数据类型、宽度与分区相同。
从基表中向分区输入数据时,必须与分区相符
将分区P3数据与表SALES交换:
SQL>Alter Table Employee EXCHANGE Partition P3 With Table SALES; 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22953217/viewspace-1116665/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-12-01