oracle 分区和分区索引

一、个人理解:建表时一般都会指定在一个表空间上,但是可能随着表空间扩大,查询越来越慢,分区表就是将一个表实际存在不同的表空间,oracle存储分为块,断,表空间。新建一个表,会给表分配指定大小的段,段里包含存储块,高水位线就是指段空间被撑大了。

表空间和分区的区别:

(1)表空间是逻辑存储单位,所有的表段放在表空间里。至于表的分区,也可看作一个逻辑段,属于比表空间小一级的逻辑存储单位。

(2)他们根本不是一个概念,表空间是由多个数据文件组成的,可以这么说 
块组成了段,段组成了表空间,表空间组成了数据库

快包括4k,8k,16k,32k
段包括表,表分区上每个分区等等
每个分区又可以存放在多个表空间上,可以放在不同的磁盘,增加吞吐量。

也有人补充:塊組成域,塊也可以是5K,6K……

当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。

二、表分区和分区索引

查询分区:Select *From user_extents WHERE partition_name=‘分区名‘;

1)创建表空间

create tablespace HRPM0

datafile ‘/oradata/misdb/HRPM0.DBF‘ size 5m autoextend on next 10m maxsize unlimited

2)删除表空间(同时把数据文件也删除)

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

如果不想删除数据文件:

Drop tablespace tablespace_name;

3) 修改表空间大小

alter database datafile ‘/path/NADDate05.dbf‘ resize 100M

4)添加数据文件(在建立表空间时,若是约束了表空间的大小,那么一段时间后,这个表空间就会被装满,无法再添加其他对象。则需要给表空间添加数据文件):

Alter tablespace tablespace_name add datafile’ ‘/path/NADDate06.dbf’ size 100M;

4) 备注:

4.1).--.禁止undo tablespace自动增长

alter database datafile ‘full_path\undotbs01.dbf‘ autoextend off;

4.2).-- 创建一个新的小空间的undo tablespace

create undo tablespace undotBS2 datafile ‘full_path\UNDOTBS02.DBF‘ size 100m;

4.3).-- 设置新的表空间为系统undo_tablespace

alter system set undo_tablespace=undotBS2;

4.4).-- Drop 旧的表空间

drop tablespace undotbs1 including contents;

4.5).--查看所有表空间的情况

select * from dba_tablespaces

5)查到一个最好用的表:dict

5.1)select *from dict where table_name like ‘%PART%‘

5.2)ALL_TAB_PARTITIONS:可以查出表所对应的分区内容;

5.3)dab_tab_partitons :与上2);

5.4)dba_ind_partitons:查询分区的索引;

5.5)子分区也是一样的(dba_tab_subpartitons,dba_ind_partitons)

一、使用分区的优点:

1、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

2、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

3、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;

4、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

二、Oracle数据库提供对表或索引的分区方法有几种(收集到四种):

1、范围分区

2、列表分区

3、Hash分区(散列分区)

4、复合分区

三、详描述分区实例:

1)下面将以实例的方式分别对这三种分区方法来说明分区表的使用。为了测试方便,我们先建三个表空间。

create tablespace dinya_space01 datafile ‘C:\表空间\dinya01.dbf‘ size 5M; create tablespace dinya_space02 datafile ‘C:\表空间\dinya02.dbf‘SIZE 5M; create tablespace dinya_space03 datafile ‘C:\表空间\dinya03.dbf‘ SIZE 5M;

select * from user_tablespaces

                   <表空间->三个>

1.1)范围分区

范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据业务记录的创建日期进行分区等。

需求描述:有一个物料交易表,表名:material_transactions。该表将来可能有千万级的数据记录数。要求在建该表的时候使用分区表。这时候我们可以使用序号分区三个区,每个区中预计存储三千万的数据,也可以使用日期分区,如每五年的数据存储在一个分区上。

根据交易记录的序号分区建表:----为了测试需要做以下修改;

create table dinya_test

(

transaction_id number primary key,

item_id number(8) not null,

item_description varchar2(300),

transaction_date date not null

)

partition by range (transaction_id)

(

partition part_01 values less than(2) tablespace dinya_space01,-----2条以下的交易在此分区上:part_01

partition part_02 values less than(3) tablespace dinya_space02,-----等于+大于2而小于3的交易在此分区:part_02

partition part_03 values less than(maxvalue) tablespace dinya_space03----大于3的交易在此分区:part_03

-----------------以上在pl/sql测试成功;

---------------- 以下没有在pl/sql测试!

根据交易日期分区建表:

SQL> create table dinya_test

(

transaction_id number primary key,

item_id number(8) not null,

item_description varchar2(300),

transaction_date date not null

)

partition by range (transaction_date)

(

partition part_01 values less than(to_date(‘2006-01-01‘,‘yyyy-mm-dd‘)) tablespace dinya_space01,

partition part_02 values less than(to_date(‘2010-01-01‘,‘yyyy-mm-dd‘)) tablespace dinya_space02,

partition part_03 values less than(maxvalue) tablespace dinya_space03

);

这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候,系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中。

当然,我们还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date),分区条件中的值也做相应的改变,请读者自行测试。

---------------------------------以上没有在pl/sql测试!

1.2) 范围分区创建成功之后的相关操作测试;

a)向表添加测试数据:

insert into dinya_test values(1,12,‘BOOKS‘,sysdate);

insert into dinya_test values(2,12, ‘BOOKS‘,sysdate+30);

insert into dinya_test values(3,12, ‘BOOKS‘,to_date(‘2006-05-30‘,‘yyyy-mm-dd‘));

insert into dinya_test values(4,12, ‘BOOKS‘,to_date(‘2007-06-23‘,‘yyyy-mm-dd‘));

insert into dinya_test values(5,12, ‘BOOKS‘,to_date(‘2011-02-26‘,‘yyyy-mm-dd‘));

insert into dinya_test values(6,12, ‘BOOKS‘,to_date(‘2011-04-30‘,‘yyyy-mm-dd‘));

b)查询

b.1)如果查询全表数据

select * from dinya_test;如下图:

< 全表数据>

select * from dinya_test partition(part_01);如下图:

<Part_01分区的数据>

select * from dinya_test partition(part_02);如下图:

<Part_02分区的数据>

select * from dinya_test partition(part_03);如下图:

<Part_03分区的数据>

update dinya_test partition(part_01) t set t.item_description=‘DESK‘ where t.transaction_id=1;

select * from dinya_test partition(part_01);BOOKS->DESK(发生变化)

                  

select * from dinya_test(此结果就不用查看了,肯定变了);

---删除part_03分区中transaction_id=4的记录:

delete from dinya_test partition(part_03) t where t.transaction_id=4;

select * from dinya_test partition(part_03)

             少了transaction_id=4的记录(与上图对比)

c)索引的创建:

   c.1)局部索引的创建:

create index dinya_idx_t on dinya_test(item_id)

local

(

partition idx_1 tablespace dinya_space01,---分区名为:idx_1

partition idx_2 tablespace dinya_space02, ---分区名为:idx_2

partition idx_3 tablespace dinya_space03---分区名为:idx_3

);  ---pl/sql测试成功

注:

select *from ALL_TAB_PARTITIONS where table_name =‘DINYA_TEST‘

    select *From dba_ind_partitions where partition_name=‘IDX_1‘

   c.2)全局索引的创建:

全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:

create index dinya_idx_t on dinya_test(item_id)

global partition by range(item_id)

(

partition idx_1 values less than (1000) tablespace dinya_space01,

partition idx_2 values less than (10000) tablespace dinya_space02,

partition idx_3 values less than (maxvalue) tablespace dinya_space03

);----PL/SQL末测试[参照以上local];

整个表创建索引:

   Create index dinya_idx_t on dinya_test(item_id);

备注: select *from all_indexes(dba_indexes、all_ind_columns 、user_ind_columns 、 dba_ind_columns)

1.3) Hash分区(散列分区)

——————————以下没有在机器上测试

散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中:

create table dinya_test

(

transaction_id number primary key,

item_id number(8) not null,

item_description varchar2(300),

transaction_date date

)

partition by hash(transaction_id)

(

partition part_01 tablespace dinya_space01,

partition part_02 tablespace dinya_space02,

partition part_03 tablespace dinya_space03

);

建表成功,此时插入数据,系统将按transaction_id将记录散列地插入三个分区中,这里也就是三个不同的表空间中。

——————————以上没有在机器上测试;

1.4) 列表分区:该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。

示例1:

CREATE TABLE PROBLEM_TICKETS

(

PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,

DESCRIPTION VARCHAR2(2000),

CUSTOMER_ID NUMBER(7) NOT NULL,

DATE_ENTERED DATE NOT NULL,

STATUS VARCHAR2(20)

)

PARTITION BY LIST (STATUS)

(

PARTITION PROB_ACTIVE VALUES (‘ACTIVE‘) TABLESPACE PROB_TS01,

PARTITION PROB_INACTIVE VALUES (‘INACTIVE‘) TABLESPACE PROB_TS02

)

备注:active和inactive是列status的值!谨记与range和hash分区的区别;

1.4.1)测试如下:

insert into PROBLEM_TICKETS values(1,‘BOOKS‘,1,sysdate,‘ACTIVE‘);

insert into PROBLEM_TICKETS values(2,‘son‘,2,sysdate+30,‘INACTIVE‘);

insert into PROBLEM_TICKETS values(3,‘son‘,3,to_date(‘2006-05-30‘,‘yyyy-mm-dd‘),‘INACTIVE‘);

insert into PROBLEM_TICKETS values(4,‘BOOKS‘,4,to_date(‘2007-06-23‘,‘yyyy-mm-dd‘),‘INACTIVE‘);

insert into PROBLEM_TICKETS values(5,‘old‘,5,to_date(‘2011-02-26‘,‘yyyy-mm-dd‘),‘ACTIVE‘);

insert intoPROBLEM_TICKETSvalues(6,‘test‘,6,to_date(‘2011-04-30‘,‘yyyy-mm-dd‘),‘INACTIVE‘);

select * from PROBLEM_TICKETS

<查询全表>

1.4.2)

select * from PROBLEM_TICKETS partition(PROB_ACTIVE)

1.4.2)

select * from PROBLEM_TICKETS partition(PROB_INACTIVE)

在测试中遇到这样的情况。如果表创建了分区,如果要删除数据文件(表空间文件),则要先删除分区,然后才能删除数据文件(但是在删除数据文件时,必须要保留一个分区才能最终删除数据文件>表空间文件,)

当然,也可以直接就删除表也行,刚所有的全删除,但是表空间文件还在!

1.5) 复合分区

有时候我们需要根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区内再使用散列分区的一种分区方法,如将物料交易的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:

create table dinya_test

(

transaction_id number primary key,

item_id number(8) not null,

    item_description varchar2(300),

     transaction_date date

)

partition by range(transaction_date)subpartition by hash(transaction_id)

subpartitions 3 store in (dinya_space07,dinya_space08,dinya_space09)

(

partition part_07 values less than(to_date(‘2006-01-01‘,‘yyyy-mm-dd‘)),

partition part_08 values less than(to_date(‘2010-01-01‘,‘yyyy-mm-dd‘)),

partition part_09 values less than(maxvalue)

);

---测试如下:

select *From user_tab_partitions where table_name=upper(‘dinya_test‘)

selec *From user_tab_subpartitions where table_name=upper(‘dinya_test‘)

《图1》

插入如下数据:

insert into dinya_test values(1,12,‘BOOKS‘,sysdate);

insert into dinya_test values(2,12, ‘BOOKS‘,sysdate+30);

insert into dinya_test values(3,12, ‘BOOKS‘,to_date(‘2006-05-30‘,‘yyyy-mm-dd‘));

insert into dinya_test values(7,12, ‘BOOKS‘,to_date(‘2005-05-30‘,‘yyyy-mm-dd‘));

insert into dinya_test values(4,12, ‘BOOKS‘,to_date(‘2007-06-23‘,‘yyyy-mm-dd‘));

insert into dinya_test values(5,12, ‘BOOKS‘,to_date(‘2011-02-26‘,‘yyyy-mm-dd‘));

insert into dinya_test values(6,12, ‘BOOKS‘,to_date(‘2011-04-30‘,‘yyyy-mm-dd‘));

select *From dinya_test:如下图

select *From dinya_test partition(part_07)如下图:

select *From dinya_test partition(part_09)

参照下图,按所显的子分区名,看能否查出数据:

select*Fromuser_tab_subpartitions where table_name=upper(‘dinya_test‘)

select *From dinya_test subpartition(SYS_SUBP62):如下图:

其它的查询一样。-----测试成功;

备注:该例中,先是根据交易日期进行范围分区,然后根据交易的ID将记录散列地存储在三个表空间中。

 

1.6)复合范围列表分区:这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。

示例1:

Create table sales

(

Product_id varchar2(5),

Sales_date date,

Sales_cost number(10),

Status varchar2(20)

)

Partition by range(Sales_cost)

Subpartition by list(status)

(

Partition p1 values less than (1) tablespace dinya_space01

(

Subpartition p1sub1 values(‘ACTIVE‘) tablespace   dinya_space03,

Subpartition p1sub2 values(‘INACTIVE‘) tablespace dinya_space04

),

Partition p2 values less than (3) tablespace dinya_space02

(

Subpartition p1sub3 values(‘ACTIVE‘) tablespace    dinya_space05,

Subpartition p1sub4 values(‘INACTIVE‘) tablespace dinya_space06

)

)测试如下:

insert into sales values(1,sysdate,0.1,‘ACTIVE‘);

insert into sales values(2,sysdate+30,1,‘INACTIVE‘);

insert into sales

values(3,to_date(‘2006-05-30‘,‘yyyy-mm-dd‘),2,‘INACTIVE‘);

select *From sales:

Select *from sales partition(p2)

SELECT * FROM SALES SUBPARTITION(p1sub4)

SELECT * FROM SALES SUBPARTITION(p1sub3)

没有数据!!

select *From dba_tab_subpartitions where table_name=‘SALES‘

有关表分区的一些维护性操作:

一、添加分区

以下代码给SALES表添加了一个P3分区

ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE(‘2003-06-01‘,‘YYYY-MM-DD‘));

注意:以上添加的分区界限应该高于最后一个分区界限。

以下代码给SALES表的P3分区添加了一个P3SUB1子分区

ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES(‘COMPLETE‘);

二、删除分区

以下代码删除了P3表分区:

ALTER TABLE SALES DROP PARTITION P3;

在测试中遇到这样的情况。如果表创建了分区,如果要删除数据文件(表空间文件),则要先删除分区,然后才能删除数据文件(但是在删除数据文件时,必须要保留一个分区才能最终删除数据文件>表空间文件,)

当然,也可以直接就删除表也行,刚所有的全删除,但是表空间文件还在!

在以下代码删除了P4SUB1子分区:

ALTER TABLE SALES DROP SUBPARTITION P4SUB1;

注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。

三、截断分区

截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。通过以下代码截断分区:

ALTER TABLE SALES TRUNCATE PARTITION P2;

通过以下代码截断子分区:

ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;

四、合并分区

合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了P1 P2分区的合并:

ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;

五、拆分分区

拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。

ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE(‘2003-02-01‘,‘YYYY-MM-DD‘))

INTO (PARTITION P21,PARTITION P22);

六、接合分区(coalesca)

结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。通过以下代码进行接合分区:

ALTER TABLE SALES COALESCA PARTITION;

七、重命名表分区

以下代码将P21更改为P2

ALTER TABLE SALES RENAME PARTITION P21 TO P2;

九、跨分区查询

select sum( *) from (

(select count(*) cn from t_table_SS PARTITION (P200709_1)

union all

select count(*) cn from t_table_SS PARTITION (P200709_2));

十、查询表上有多少分区

SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME=‘tableName‘

--显示数据库所有分区表的信息:

select * from DBA_PART_TABLES where table_name=upper(‘dinya_test‘)

--显示当前用户可访问的所有分区表信息:

select * from ALL_PART_TABLES

同上图

--显示当前用户所有分区表的信息:

select * from USER_PART_TABLES

同上图

--显示表分区信息 显示数据库所有分区表的详细分区信息:

select * from DBA_TAB_PARTITIONS

--显示当前用户可访问的所有分区表的详细分区信息:

select * from ALL_TAB_PARTITIONS

--显示当前用户所有分区表的详细分区信息:

select * from USER_TAB_PARTITIONS

--显示子分区信息 显示数据库所有组合分区表的子分区信息:

select * from DBA_TAB_SUBPARTITIONS

--显示当前用户可访问的所有组合分区表的子分区信息:

select * from ALL_TAB_SUBPARTITIONS

--显示当前用户所有组合分区表的子分区信息:

select * from USER_TAB_SUBPARTITIONS

--显示分区列 显示数据库所有分区表的分区列信息:

select * from DBA_PART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的分区列信息:

select * from ALL_PART_KEY_COLUMNS

--显示当前用户所有分区表的分区列信息:

select * from USER_PART_KEY_COLUMNS

--显示子分区列 显示数据库所有分区表的子分区列信息:

select * from DBA_SUBPART_KEY_COLUMNS

--显示当前用户可访问的所有分区表的子分区列信息:

select * from ALL_SUBPART_KEY_COLUMNS

--显示当前用户所有分区表的子分区列信息:

select * from USER_SUBPART_KEY_COLUMNS

--怎样查询出oracle数据库中所有的的分区表

select * from user_tables a where a.partitioned=‘YES‘

--删除一个表的数据是

truncate table table_name;

--删除分区表一个分区的数据是

alter table table_name truncate partition p5;

注:分区根据具体情况选择。

表分区有以下优点:

1、数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高。

2、数据修剪:保存历史数据非常的理想。

3、备份:将大表的数据分成多个文件,方便备份和恢复。

4、并行性:可以同时向表中进行DML操作,并行性性能提高。

================================================

索引:

1、一般索引:

create index index_name on table(col_name);

2、Oracle 分区索引详解

语法:Table Index

CREATE [UNIQUE|BITMAP] INDEX [schema.]index_name

ON [schema.]table_name [tbl_alias]

(col [ASC | DESC]) index_clause index_attribs

index_clauses:

分以下两种情况

1. Local Index

就是索引信息的存放位置依赖于父表的Partition信息,换句话说创建这样的索引必须保证父表是Partition

1.1 索引信息存放在父表的分区所在的表空间。但是仅可以创建在父表为HashTable或者composite分区表的。

LOCAL STORE IN (tablespace)

1.2 仅可以创建在父表为HashTable或者composite分区表的。并且指定的分区数目要与父表的分区数目要一致

LOCAL STORE IN (tablespace) (PARTITION [partition [LOGGING|NOLOGGING] [TABLESPACE {tablespace|DEFAULT}] [PCTFREE int] [PCTUSED int] [INITRANS int] [MAXTRANS int] [STORAGE storage_clause] [STORE IN {tablespace_name|DEFAULT] [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

1.3 索引信息存放在父表的分区所在的表空间,这种语法最简单,也是最常用的分区索引创建方式。

Local

1.4 并且指定的Partition 数目要与父表的Partition要一致

LOCAL (PARTITION [partition

[LOGGING|NOLOGGING]

[TABLESPACE {tablespace|DEFAULT}]

[PCTFREE int]

[PCTUSED int]

[INITRANS int]

[MAXTRANS int]

[STORAGE storage_clause]

[STORE IN {tablespace_name|DEFAULT]

[SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

Global Index

索引信息的存放位置与父表的Partition信息完全不相干。甚至父表是不是分区表都无所谓的。语法如下:

GLOBAL PARTITION BY RANGE (col_list)

( PARTITION partition VALUES LESS THAN (value_list)

[LOGGING|NOLOGGING]

[TABLESPACE {tablespace|DEFAULT}]

[PCTFREE int]

[PCTUSED int]

[INITRANS int]

[MAXTRANS int]

[STORAGE storage_clause] )

但是在这种情况下,如果父表是分区表,要删除父表的一个分区都必须要更新Global Index ,否则索引信息不正确

ALTER TABLE TableName DROP PARTITION PartitionName Update Global Indexes

--查询索引

select object_name,object_type,tablespace_name,sum(value)

from v$segment_statistics

where statistic_name IN (‘physical reads‘,‘physical write‘,‘logical reads‘)and object_type=‘INDEX‘

group by object_name,object_type,tablespace_name

order by 4 desc

oracle 分区和分区索引,布布扣,bubuko.com

时间: 2024-09-28 23:12:29

oracle 分区和分区索引的相关文章

oracle分区表和分区索引概述

㈠ 分区表技术概述            ⑴ Range 分区            ① 例子                  create table t         (...列定义...)         partition by range (week_num)         (partition p1 values less than (4)tablespace data0,           partition p2 values less than (5)tablespac

深入学习Oracle分区表及分区索引

关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Range(范围)分区 •       Hash(哈希)分区 •       List(列表)分区 •       以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定compress属性),只不过分区依赖列不能是lob,long之类数据类型,每个表的分区

【三思笔记】 全面学习Oracle分区表及分区索引

[三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可以分成几类: v  Range(范围)分区 v  Hash(哈希)分区 v  List(列表)分区 v  以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定 compress 属性),只不过分区依赖列不能是

转:深入学习Oracle分区表及分区索引

转自:http://database.ctocio.com.cn/tips/286/8104286.shtml 关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: Range(范围)分区 Hash(哈希)分区 List(列表)分区 以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定compress属性),只不过分区依赖列

ORACLE 范围分区 partition-range分区

范围分区的用法说明 Range partitioning maps data to partitions based on ranges of partition key values that   you establish for each partition. It is the most common type of partitioning and is often used with dates. For example, you might want to partition sa

Timestamp 与 Date 变量绑定与Oracle的自动分区

好久没有更新博客了,其实是工作中遇到的很多问题在Google上都能找到答案,也就没有记录下来的必要了.今天主要想聊一下在实际的系统中遇到的Oracle数据库的问题,希望对大家有一点点帮助就好. 我首先描述一下我所遇到的场景:我们的数据库用的是Oracle 11g,我想大家立马就对它的自动分区(Interval)有了基本的认识了,这是一个非常棒的功能,免除了在建表时弄一大堆建Range分区的代码,也免除了以后对数据库进行分区扩充的麻烦.当然利用JOB也是可以完成分区扩展的,但是既然Oracle提供

关于分区技术的索引 index

分区系列篇: 关于oracle分区技术--初了解  http://blog.csdn.net/wanghui5767260/article/details/39158873 关于分区技术的索引:           http://blog.csdn.net/wanghui5767260/article/details/39181027 关于分区技术---索引 Index 一.   分区索引分类: 本地前缀分区索引(local prefixedpartitioned index) 全局分区索引(g

oracle 11g 新增分区

oracle 11g新增了间隔分区.虚拟列分区和引用分区.详细的介绍请查看官方文件: Creating Partitions 1. 间隔分区 间隔分区是范围分区的一种扩展.在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值的增长可用分区会逐渐减少直到没有可使用的分区为止.而间隔分区就是为了解决插入表中的数据超过了所有范围分区时而不能自动创建分区的问题.必须至少创建一个范围分区,范围分区的键值确定范围分区的上限值,超过该上限值数据库服务器自动创建特定间隔的分区.主要用在可预知的添

ORACLE有关表分区的一些维护性操作

有关表分区的一些维护性操作: 一.添加分区 以下代码给SALES表添加了一个P3分区 ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01′,'YYYY-MM-DD')); 注意:以上添加的分区界限应该高于最后一个分区界限. 以下代码给SALES表的P3分区添加了一个P3SUB1子分区 ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1