Oracle分区表(partitioned table)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle分区表(partitioned table)管理分区表和索引
一、什么是分区表
现在的数据库,单个表的数据量可能很大,达到几百个G和几T的程度,这时侯,你需要使
用分区表和分区索引来管理数据,它将一个大的多分为块,称为分区(patitions),甚至子分
区(subpartition)。每一个分区都保存在自已的段中,可以单独的管理。分区可以结合并行
执行和合理的数据分布来提高系统的可用性和性能。
●减少数据中断的可能性
●可以单独备份或恢复每一个分区
●控制分区的分布(平衡I/O负荷)
●提高可管理性,可用性和性能
二、表分区的方法
1. range 使用表的字段的值的范围来进行分区,它特别适用于数据有逻辑范围的表。如一年中的月。
当数据在范围内均匀分布时性能最好。
create table salse ( invoice_no number, sale year int not null, sale month int not null, sale_day int not null) partion by range(sale yea,sale_month,sale_day) (partition sale_q1 value less than (1999,04,01) tablespace tsa partition sale_q2 value less than (2000,04,01) tablespace tsb partition sale_q2 value less than (maxvalue) tablespace tsc);--最大值maxvalue 可以指定 enable row movement来设置当分区列的值被修改时,将行移动到不同的分区。
2. hash 当数据不容易使用range分区,但你又需要使用分区来提高性能和可管理性,hash分区方法,
根据分区值(partitioning key)的hash值来确定分区。
create table scubagear( id number, name varchar2(60)) partition by hash (id) partitions 4 store in (gear1,gear2,gear3,gear4);
3. list 当你需要控制行怎么映射至分区时,使用list分区方法,你可以将分区列的值指定到分区中。
create table q1_sale_by_region (dept_no number, dept_name varchar2(20), quarterly_sales number(10,2), state varchar2(2)) partition by list(state) (partition q1_northwest value ('OR','WA'), (partition q1_southwest value ('AZ','UT')); 可以用值DEFAULT来指定除已经明确指定的值以外其他的值,NULL来指定空值。
create table scubagear (equipno number,equipname varchar(32),price number) partition by range (equipno) subpartition by hash(equipname) subpartition 8 store in (ts1,ts2,ts3,ts4) (partition p1 values less than (1000), partition p1 values less than (2000), partition p1 values less than (3000));
5. rang-list create table quarterly_regional_sales (deptno number,item_no varchar2(20),txn_date date ,txn_amount number,state varchar2(2)) tablespace ts4 partition by range(txn_date) (partition q1_1999 value less than (to_date('19990401','yyyymmdd')) (subpartition q1_1999_northwest values ('OR','WA') subpartition q1_1999_southwest values ('AZ','UT') ), (partition q2_2000 value less than (to_date('20000401','yyyymmdd')) (subpartition q1_1999_northwest values ('OR','WA') subpartition q1_1999_southwest values ('AZ','UT') ) );
6. 子分区模版
当使用range-hash或rang-list分区方式时,如果子分区一致,则可以设置子分区模版来简
化建表语句:
create table emp_sub_template (deptno number, empname varchar2(32),grade number) partition by range(deptno) subpartition by hash(empname) subpartition template (subpartition a tablespace ts1, subpartition b tablespace ts2 ) (partition p1 value less than (1000), partition p2 value less than (2000), partition p3 value less than (MAXVALUE) );
三、修改分区表
1. 增加分区
i. 在range-partitioned表中增加分区
range-partitioned表只能在最后(即partition key大于现存的最大值)增加分区,如果
要在中间或开始,则必须使用split partition alter table sales add partition jan96 values less than (’01-FEB-1999’) tablespace tsx; ii. 在hash-partitioned表中增加分区