ORACLE分区表、分区索引

合集下载

Oracle 分区的概念

Oracle  分区的概念

Oracle 分区的概念分区是指将巨型的表或索引分割成相对较小的、可独立管理的部分,这些独立的部分称为原来表或索引的分区。

分区后的表与未分区的表在执行查询语句或其他DML语句时没有任何区别,一旦进行分区之后,还可以使用DDL语句对每个单独的分区进行操作。

因此,对巨型表或者索引进行分区后,能够简化对它们的管理和维护操作,而且分区对于最终用户和应用程序是完全透明的。

在对表进行分区后,每一个分区都具有相同的逻辑属性。

例如,各个分区都具有相同的字段名、数据类型和约束等。

但是各个分区的物理属性可以不同,例如,各个分区可以具有不同的存储参数,或者位于不同的表空间中。

如果对表进行了分区,表中的每一条记录都必须明确地属于某一个分区。

记录应当属于哪一个分区是记录中分区字段的值决定的。

分区字段可以是表中的一个字段或多个字段的组合,这时在在创建分区表时确定。

在对分区表执行插入、删除或更新等操作时,Oracle会自动根据分区字段的值来选择所操用的分区。

分区字段由1~16个字段以某种顺序组成,但不能包含ROWID等伪列,也不能包含全为NULL值的字段。

图10-1显示了一个典型的分区表。

通常在对表进行分区时也会将地对应的索引进行分区,但是未分区的表可以具有分区的索引,而分区的表也可以具有未分区的索引。

索引索引索引索引5月6月7月未分区的表(分区的索引)分区的表(分区的索引)图10-1 分区表与分区索引一个表可以被分割成任意数目的分区,但如果在表中包含有LONG或LONG RAW类型的字段,则不能对表分区。

对于索引组织表而言,虽然也可以分区,但是有如下一些限制:●索引组织表仅支持范围和散列分区,不能以列表或复合方式对索引组织表进行分区。

●分区字段必须是主键字段的一个子集。

●如果在索引组织表中使用了OVERFLOW子句,溢出存储段将随表的分区进行相同的分割。

下面给出了应当考虑对表进行分区的一些常见情况:●如果一个表的大小超过了2GB,通常会对它进行分区。

Oracle-创建索引分区

Oracle-创建索引分区

Oracle-创建索引分区对⼤数据量索引进⾏分区同样能够优化应⽤系统的性能。

⼀般来说,如果索引所对应的表的数据量⾮常⼤,⽐如⼏百万甚⾄上千万条数据,则索引也会占⽤很⼤的空间,这时,建议对索引进⾏分区。

Oracle索引分区分为本地索引分区和全局索引分区两种:全局索引不反映基础表的结构,因此,若要分区就只能进⾏范围分区;⽽局部索引反映基础表的结构。

本地索引分区 本地索引分区就是使⽤和分区表同样的分区键进⾏分区的索引,也就是说,索引分区所采⽤的列与该表的分区所采⽤的列是相同的,本地索引有以下优点:如果只有⼀个分区需要维护,则只有⼀个本地索引受影响⽀持分区独⽴性只有本地索引能够⽀持单⼀分区的装⼊和卸载表分区和各⾃的本地索引可以同时恢复本地索引可以单独重复位图索引仅由本地索引⽀持如:创建⼀个表分区,然后根据这个表分区创建本地索引区1.⾸先创建3个表空间,分别存放到3不同磁盘分区中,分别为ts_1,ts_2,ts_32.创建⼀个存储学⽣成绩的分区表studentgrade,该表共有3个分区,分别位于表空间 ts_1,ts_2,ts_3create table studentgrade(id number primary key,name varchar2(10),subject varchar2(10),grade number)partition by range(grade)(partition par_nopass values less than(60) tablespace ts_1,partition par_pass values less than(70) tablespace ts_2,partition par_good values less than(maxvalue) tablespace ts_3)/3.根据表分区创建本地索引分区,与表分区⼀样,索引分区也是3个分区(p1,p2,p3)create index grade_index on studentgrade(grade)local(partition p1 tablespace ts_1,partition p2 tablespace ts_2,partition p3 tablespace ts_3)/4.最后,⽤户可以通过查询dba_ind_partitions视图来查看索引分区信息select partition_name,tablespace_name from dba_ind_partitions where index_name='GRADE_INDEX';全局索引区 全局索引就是没有与分区表相同分区键的分区索引。

oracle重建分区索引语句

oracle重建分区索引语句

oracle重建分区索引语句摘要:1.Oracle 分区索引简介2.重建分区索引的原因3.重建分区索引的步骤4.示例:使用SQL 语句重建分区索引正文:一、Oracle 分区索引简介Oracle 分区索引是一种在分区表上的索引,它可以提高查询效率。

分区索引与普通索引类似,但它是基于分区表的,因此具有更高的查询性能。

当数据量较大时,分区索引能够有效地减少查询数据的范围,提高查询速度。

二、重建分区索引的原因重建分区索引通常有以下原因:1.索引损坏:当分区索引损坏时,需要进行重建。

2.数据表分区改变:当数据表的分区发生变化时,需要重建分区索引以适应新的分区结构。

3.优化查询性能:在某些情况下,重建分区索引可以提高查询性能。

三、重建分区索引的步骤1.备份数据:在进行分区索引重建之前,需要备份数据以防止数据丢失。

2.使用ALTER INDEX 命令:使用ALTER INDEX 命令可以重建分区索引。

需要指定要重建的索引名称以及分区信息。

3.检查重建结果:重建完成后,需要检查重建结果以确保索引正确无误。

四、示例:使用SQL 语句重建分区索引以下是一个使用SQL 语句重建分区索引的示例:```sqlALTER INDEX index_nameREBUILD PARTITION p_number;```其中,`index_name`是要重建的分区索引名称,`p_number`是要重建的分区编号。

可以根据实际情况修改相应的参数值。

通过以上步骤和示例,可以完成Oracle 分区索引的重建工作。

在进行分区索引重建时,需要谨慎操作,确保数据安全。

Oracle分区表详细讲解

Oracle分区表详细讲解

简写:
CREATE TABLE emp ( empno NUMBER (4), ename VARCHAR2 (30), sal NUMBER ) PARTITION BY HASH (empno) PARTITIONS 8 STORE IN (emp1,emp2,emp3,emp4,emp5,emp 6,emp7,emp8);
) PARTITION BY RANGE (grade) (
PARTITION part1 VALUES LESS THEN (1000) TABLESPACE Part1_tb,
PARTITION part2 VALUES LESS THEN (MAXV ALUE) TABLESPACE Part2_tb );
范围分区的特点
• 最早、最经典的分区方法 • Range分区通过对分区字段值的范围进行分区 • Range分区特别适合于按时间周期进行数据的存储:日、周、月、年
等 • 数据管理能力强
– 数据迁移 – 数据备份 – 数据交换 • 范围分区的数据可能不均匀 • 范围分区与记录值有关,实施难度和可维护性相对较差
PARTITION BY LIST(sales_state) (
PARTITION sales_west VALUES('California', 'Hawaii'), PARTITION sales_east VALUES ('New York', 'Virginia', 'Florida'), PARTITION sales_central VALUES('Texas', 'Illinois'), PARTITION sales_other VALUES(DEFAULT));

oracle大表改造分区表的步骤

oracle大表改造分区表的步骤

oracle大表改造分区表的步骤将Oracle大表改造为分区表的步骤如下:1. 数据预处理:首先,对大表进行数据分析,确定适合的分区列(分区键),例如日期、地域等。

然后,对数据进行预处理,确保数据符合分区键要求,如格式统一、排序等。

2. 创建分区表:使用CREATE TABLE语句创建分区表,指定分区键和分区策略。

分区策略可以是范围分区、列表分区或哈希分区等。

同时,也可以定义分区索引和本地分区索引。

3. 迁移数据:将大表中的数据迁移到分区表中,可以使用INSERT INTO SELECT语句或者数据泵工具(如expdp和impdp命令)进行数据迁移。

确保迁移的数据符合分区键和分区策略要求。

4. 索引重建:根据分区表的分区信息,重新创建分区索引和本地分区索引。

可以使用ALTER TABLE语句添加分区索引,也可以使用CREATE INDEX语句重新创建索引。

5. 测试验证:对分区表进行测试和验证,包括数据查询、插入、更新和删除等操作,确保分区表的性能和功能正常。

6. 调优优化:根据实际需求和性能要求,进行分区表的调优和优化。

可以使用Oracle提供的分区相关功能,如局部分区索引、分区裁剪、分区交换等,以提升查询和维护效率。

7. 应用升级:在应用层面进行相应的升级,确保应用程序能够正确地操作和利用分区表,如修改SQL语句、更新存储过程等。

8. 监控维护:在生产环境中,对分区表进行监控和维护,包括定期备份、压缩分区、重新构建索引等,以保证分区表的稳定性和性能。

总结:将Oracle大表改造为分区表的步骤主要包括数据预处理、创建分区表、迁移数据、索引重建、测试验证、调优优化、应用升级和监控维护等。

这些步骤可以根据实际情况进行调整和扩展,以满足具体的业务需求和性能要求。

Oracle表分区的分类及实例

Oracle表分区的分类及实例

Oracle表分区的分类及实例Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。

通常,分区可以使某些查询以及维护操作的性能大大提高。

此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。

每个分区有自己的名称,还可以选择自己的存储特性。

从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。

但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。

比较能理解的是以下几个几种表分区:1 范围分区每个分区都由一个分区键值范围指定create table RangeTable(id int primary key,name varchar(10),grade int)partition by rang(grade)(partition part1 values less then(1000) tablespace Part1_tb,--将grade的值小于1000的记录放在part1分区里partition part2 values less then(MAXVALUE) tablespace Part2_tb);2 列表分区create table ListTable(id int primary key,name varchar(20),area varchar(10))partition by list(area)(partition part1 values('guangdong','beijing') tablespace Part1_tb, partition part2 values('shanghai','nanjing') tablespace Part2_tb );3 散列分区create table HashTable(id int primary key,name varchar(20),grade int)partition by hash(grade)partitions 10store in(Part1_tb,Part2_tb,Part3_tb)partition by rang(grade)(partition part1 tablespace Part1_tb,partition part2 tablespace Part2_tb);4 索引分区create index IndexTable_indexon IndexTable(name)local(partition part1 tablespace Part1_tb,partition part2 tablespace Part2_tb)--local 告诉oracle表 IndexTable的每一个分区建立一个独立的索引create index IndexTable_indexon IndexTable(name)global;--global为全局索引全局索引可以包含多个分区的值局部索引比全局索引容易管理,而全局索引比较快注意:不能为散列分区或者子分区创建全局索引。

Oracle 分区索引和全局索引

Oracle  分区索引和全局索引

Oracle 分区索引和全局索引对于分区表而言,每个表分区对应一个分区段。

当在分区表上建立索引时,即可以建立全局索引,也可以建立分区索引。

对于合局索引,其索引数据会存放在一个索引段中;而对于分区索引,则索引数据都会被存放到几个索引分区段中。

对索引进行分区的目的与对表进行分区是一样的,都是为了更加易于管理和维护巨型对象。

在Oracle中,一共可以为分区表建立三种类型的索引,下面分别介绍它们的特点和适用情况。

1.本地分区索引本地分区索引是为分区表中的各个分区单独地建立分区,各个索引分区之间是相互独立的。

本地分区索引相对比较简单,也比较容易管理。

图10-4显示了本地分区索引和分区表之间的对应关系:分区索引分区表图10-4 本地分区索引与分区表在为分区表创建本地索引后,Oracle会自动对表的分区和索引的分区进行同步处理。

如果为分区表添加新的分区后,Oracle会自动为新分区建立新的索引。

与此相反,如果表的分区依然存在,则用户将不能删除它所对应用的索引分区。

在删除表的分区时,系统会自动删除所对应的索引分区。

例如,下面的语句为范围分区表SALES_RANGE创建本地分区索引:SQL> create index sales_local_idx2 on sales_range(customer_id) local;索引已创建。

2.全局分区索引全局分区索引是对整个分区表建立的索引,然后再由Oracle对索引进行分区。

全局分区索引的各个分区之间不是相互独立的,索引分区与分区表之间也不是简单的一对一关系。

图10-5显示了全局分区索引与分区表的对应关系。

分区索引分区表图10-5 全局分区索引与分区表例如,下面的语句为分区表SALES_LIST创建全局分区索引:SQL> create index sales_global_part_idx2 on sales_list(customer_id)3 global partition by range(customer_id)4 (5 partition part1 values less than(300) tablespace space01,6 partition part2 values less than(maxvalue) tablespace space027 );索引已创建。

Oracle分区表删除分区引发错误ORA-01502:索引或这类索引的分区处于不可用状态

Oracle分区表删除分区引发错误ORA-01502:索引或这类索引的分区处于不可用状态

Oracle分区表删除分区引发错误ORA-01502:索引或这类索引的分区处于不可⽤状态(⼀)问题:最近在做Oracle数据清理,在对分区表进⾏数据清理时,采⽤的⽅法是drop partition,删除的过程中,没有遇到任何问题,⼤概过了10分钟,开发⼈员反馈部分分区表上的业务失败。

具体错误为:ORA-01502错误:索引或这类索引的分区处于不可⽤状态(英⽂:ora-01502:index 'schema.index_name' or partition of such index is in unusable state)。

(⼆)原因分析查看出现问题的分区表,均有⼀个共同点:表上以“pk_”开头的索引为unusable状态,以“pk_”开头的索引是随创建主键约束⽽创建的。

当⽤户在创建主键约束或唯⼀性约束的时候,会在相应的列上创建唯⼀性索引经过查证,发现是在删除分区的时候,导致分区表上的唯⼀性全局索引为不可⽤状态,导致新的数据⽆法正常插⼊,从⽽引发了该错误。

是不是索引不可⽤会导致DML操作失败呢?经过验证,发现以下特点:1.对于⾮唯⼀性索引,如果索引不可⽤,是不会影响到到DML操作的;2.对于唯⼀性索引,如果索引不可⽤,在进⾏DML操作时,会触发ORA-01502错误;这⾥记录⼀下哪些操作会导致索引失效:图1.索引失效原因总结(三)解决⽅案(3.1)了解唯⼀性索引在解决问题之前,我们来分析⼀下,哪些⾏为会创建唯⼀性索引(3种):--直接创建唯⼀性索引。

语法为:CREATE UNIQUE INDEX index_name on table_name(col1,col2,…);--创建主键约束时⾃动创建唯⼀性索引。

语法为:ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY(col1,col2,..);--创建唯⼀性约束时⾃动创建唯⼀性索引。

ORACLE分区表、分区索引详解

ORACLE分区表、分区索引详解

ORACLE分区表、分区索引详解ORACLE分区表、分区索引ORACLE对于分区表⽅式其实就是将表分段存储,⼀般普通表格是⼀个段存储,⽽分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在那个分区或那⼏个内部,然后在分区内部去查找数据,⼀个分区⼀般保证四⼗多万条数据就⽐较正常了,但是分区表并⾮乱建⽴,⽽其维护性也相对较为复杂⼀点,⽽索引的创建也是有点讲究的,这些以下尽量阐述详细即可。

1、类型说明:range分区⽅式,也算是最常⽤的分区⽅式,其通过某字段或⼏个字段的组合的值,从⼩到⼤,按照指定的范围说明进⾏分区,我们在INSERT数据的时候就会存储到指定的分区中。

List分区⽅式,⼀般是在range基础上做的⼆级分区较多,是⼀种列举⽅式进⾏分区,⼀般讲某些地区、状态或指定规则的编码等进⾏划分。

Hash分区⽅式,它没有固定的规则,由ORACLE管理,只需要将值INSERT进去,ORACLE会⾃动去根据⼀套HASH算法去划分分区,只需要告诉ORACLE要分⼏个区即可。

分区可以进⾏两两组合,ORACLE 11G以前两两组合都必须以range作为⼀级分区的开头,ORACLE⽬前最多⽀持2级别分区,但这个级别已经够我们使⽤了。

我这只以最简单的分区⽅式创建分区来说明问题,就拿range分区来说明问题吧(基本创建语句如下):CREATE [url=]TABLE[/url] TABLE_PARTITION(COL1 NUMBER,COL2 VARCHAR2(10))partition by range(COL1)(partition TAB_PARTOTION_01 values less than (450000),partition TAB_PARTOTION_02 values less than (900000),partition TAB_PARTOTION_03 values less than (1350000),partition TAB_PARTOTION_04 values less than (1800000),partition TAB_PARTOTION_OTHER values less THAN (MAXVALUE));这个分区表创建了四个定长分区,理想情况下,存储450000条数据,扩展分区是超过这个数额的分区,当发现扩展分区有数据的时候,可以进⾏将扩展分区做SPLIT操作,这个后⾯说明,这⾥先说⼀下⼀些常⽤的分区表查询功能,我们先插⼊⼀些数据进去。

Oracle分区表中索引失效

Oracle分区表中索引失效

Oracle分区表中索引失效当对分区表进⾏⼀些操作时,会造成索引失效。

当有truncate/drop/exchange 操作分区时全局索引会失效。

exchange 的临时表没有索引,或者有索引,没有⽤including indexes的关键字,会导致局部的索引失效,就是某个分区失效重建局部索引只能⽤alter index local_idx rebuild partition p1这样的⽅式分区表SPLIT的时候,如果MAX区中已经有记录了,这个时候SPLIT就会导致有记录的新增分区的局部索引失效!查寻某个分区表中各个分区索引状态 USABLE/UNUSABLEselect index_name, partition_name, statusfrom user_ind_partitionswhere index_name ='indexName';--重建索引--local索引重建select b.table_name,a.INDEX_NAME,a.PARTITION_NAME,a.STATUS,'alter index '|| a.index_name ||' rebuild partition '||partition_name ||';'重建列from USER_IND_PARTITIONS a, user_part_indexes bwhere a.index_name = b.index_nameand b.TABLE_NAME IN ('PART_TAB_SPLIT')and STATUS ='UNUSABLE'ORDER BY b.table_name, a.INDEX_NAME, a.PARTITION_NAME;--全局索引重建alter index idx_part_split_col3 rebuild;在针对truncate等操作时直接更新 index 也可以搞定。

Oracle的临时表、分区表、分区索引

Oracle的临时表、分区表、分区索引

Oracle的临时表一、表的种类1:永久表:非私有数据,需要DML锁。

2:临时表:临时表的定义对所有会话都是可见的,处理事务或会话期存在的私有数据,不需要DML锁,对于临时表的DML语句不生成重做日志,临时表占用临时表空间,临时表的数据是自动删除的,在临时表上建的索引也是临时的。

二、临时表的种类1:事物型临时表:在事务期间数据存在,事务结束后数据被自动删除。

2:会话型临时表:在会话期间数据存在,会话结束后数据被自动删除。

三、临时表的限制1:不能分区,不能是索引组织表或簇。

2:不能指定关于临时表的外键约束。

3:不支持并行DML或并行查询。

4:不支持分布式事务处理。

5:不能指定段存储语句、嵌套表存储语句或并行语句四、建立临时表的语法1:建立关系表2:建立对象表3:并行语句Oracle的分区表一、什么是分区表Oracle可以将大表或索引分成若干个更小更方便管理的部分,每一部分称为一个分区,这样的表称为分区表。

SQL语句使用分区表比全表或全表索引能提供更好的访问和处理数据。

下图是按周所建分区表示例。

二、使用分区表的限制1:不能分割是簇一部分的表。

2:不能分割含有LONG或LONG RAW列的表。

3:索引组织表IOT不能进行范围分区。

**采用基于规则的优化器时,有会从分区表中受益!三、分区方法1:范围分区(更适合历史数据库)—Oracle8从惟一可用的分区类型按照列的列表的范围分割表;如果是索引组织表,则列的列表就必须是索引组织表主键的子集。

分区关键列的限制:列列表中的列可以是任何一种内置的数据类型,ROWID、LONG、LOB或者TIMESTAMP WITH TIME ZONE除外。

关键字MAXVALUE比任何值都高(含NULL)。

2:散列分区--Oracle8i可用的分区类型指定这个表是按哈希算法分区的,分区的数目应为2的幂。

1)单独散列分区(individual_hash_partitions)及其限制使用子名按照名字指定单个分区,分区名可以匆略。

Oracle学习笔记(十)分区索引失效的思考

Oracle学习笔记(十)分区索引失效的思考

Oracle学习笔记(⼗)分区索引失效的思考此处只说索引失效的场景(只会影响全局索引):结论:全局索引truncate 分区和交换分区都会导致索引失效果局部索引truncate分区不会导致索引失效。

drop table part_tab_trunc purge;create table part_tab_trunc (id int,col2 int,col3 int,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p3 values less than (maxvalue));insert into part_tab_trunc select rownum ,rownum+1,rownum+2, rpad('*',400,'*') from dual connect by rownum <=50000;commit;create index idx_part_trunc_col2 on part_tab_trunc(col2) local;create index idx_part_trunc_col3 on part_tab_trunc(col3) ;---分区truncate前select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_TRUNC_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------IDX_PART_TRUNC_COL2 P1 USABLEIDX_PART_TRUNC_COL2 P2 USABLEIDX_PART_TRUNC_COL2 P3 USABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_TRUNC_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_TRUNC_COL3 VALIDalter table part_tab_trunc truncate partition p1 ;---分区truncate后select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_TRUNC_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------IDX_PART_TRUNC_COL2 P1 USABLEIDX_PART_TRUNC_COL2 P2 USABLEIDX_PART_TRUNC_COL2 P3 USABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_TRUNC_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_TRUNC_COL3 UNUSABLE此处只说索引失效的场景(也是只影响全局索引):--试验1(未加Update GLOBAL indexes关键字)drop table part_tab_drop purge;create table part_tab_drop (id int,col2 int ,col3 int,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p3 values less than (maxvalue));insert into part_tab_drop select rownum ,rownum+1,rownum+2,rpad('*',400,'*') from dual connect by rownum <=50000;commit;create index idx_part_drop_col2 on part_tab_drop(col2) local;create index idx_part_drop_col3 on part_tab_drop(col3) ;--未drop分区之前select index_name,status from user_indexes where index_name='IDX_PART_DROP_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 VALIDalter table part_tab_drop drop partition p1 ;--已drop分区之后select index_name,status from user_indexes where index_name='IDX_PART_DROP_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 UNUSABLE--试验2(加Update GLOBAL indexes关键字)drop table part_tab_drop purge;create table part_tab_drop (id int,col2 int ,col3 int,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p3 values less than (maxvalue));insert into part_tab_drop select rownum ,rownum+1,rownum+2,rpad('*',400,'*') from dual connect by rownum <=50000;commit;create index idx_part_drop_col2 on part_tab_drop(col2) local;create index idx_part_drop_col3 on part_tab_drop(col3) ;--未drop分区之前INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 VALIDalter table part_tab_drop drop partition p1 Update GLOBAL indexes;--已drop分区之后select index_name,status from user_indexes where index_name='IDX_PART_DROP_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 VALID--此处只说索引失效的场景:--分区表SPLIT的时候,如果MAX区中已经有记录了,这个时候SPLIT就会导致有记录的新增分区的局部索引失效! drop table part_tab_split purge;create table part_tab_split (id int,col2 int ,col3 int ,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p_max values less than (maxvalue));insert into part_tab_split select rownum ,rownum+1,rownum+2,rpad('*',400,'*') from dual connect by rownum <=90000;commit;create index idx_part_split_col2 on part_tab_split (col2) local;create index idx_part_split_col3 on part_tab_split (col3) ;---分区split前select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_SPLIT_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ -------IDX_PART_SPLIT_COL2 P1 USABLEIDX_PART_SPLIT_COL2 P2 USABLEIDX_PART_SPLIT_COL2 P_MAX USABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_SPLIT_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_SPLIT_COL3 VALIDalter table part_tab_split SPLIT PARTITION P_MAX at (30000) into (PARTITION p3,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (40000) into (PARTITION p4,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (50000) into (PARTITION p5,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (60000) into (PARTITION p6,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (70000) into (PARTITION p7,PARTITION P_MAX);---分区split后select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_SPLIT_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------IDX_PART_SPLIT_COL2 P1 USABLEIDX_PART_SPLIT_COL2 P2 USABLEIDX_PART_SPLIT_COL2 P3 UNUSABLEIDX_PART_SPLIT_COL2 P4 UNUSABLEIDX_PART_SPLIT_COL2 P5 UNUSABLEIDX_PART_SPLIT_COL2 P6 UNUSABLEIDX_PART_SPLIT_COL2 P7 UNUSABLEIDX_PART_SPLIT_COL2 P_MAX UNUSABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_SPLIT_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_SPLIT_COL3 UNUSABLE--结论是:split会导致全局索引失效,也会导致局部索引失效。

oracle大表分区方案

oracle大表分区方案

oracle大表分区方案
Oracle数据库是一款强大的关系型数据库管理系统,针对大规模数据的存储和查询需求,它提供了表分区的功能。

表分区可以将一个大表分割成多个小分区,以便于管理和查询。

在设计大表分区方案时,需要考虑以下几个方面:
1. 分区键的选择:分区键是用来划分分区的依据,选取合适的分区键可以提高查询效率。

常用的分区键有时间、地理位置和产品类型等。

需要注意的是,分区键必须是一个稳定的值,不会经常变动。

2. 分区类型的选择:Oracle提供了多种分区方式,包括范围分区、列表分区、哈希分区和复合分区等。

不同的分区方式适用于不同的场景,需要根据实际情况进行选择。

3. 分区维护的方法:分区表的维护需要考虑到数据的移动、备份和恢复等问题。

可以使用Oracle提供的分区维护工具或自定义的脚本来处理这些任务。

4. 分区索引的设计:分区表的索引也需要进行优化,可以使用局部索引或全局索引来提高查询效率。

5. 数据迁移的方案:当需要将一个大表分区时,需要考虑数据的迁移问题。

可以使用Oracle提供的数据迁移工具或自定义的脚本来完成这些任务。

综上所述,设计一个合理的大表分区方案需要考虑到多个方面,需要根据实际情况进行选择和优化。

在实际应用中,可以不断进行调整和改进,以满足不同的需求。

Oracle分区表 (Partition Table) 的创建及管理

Oracle分区表 (Partition Table) 的创建及管理

Oracle分区表 (Partition Table) 的创建及管理一、创建分区表分区表分为四类:1、范围分区表2、列表分区表3、哈希分区表4、组合分区表下面分别创建四类分区表。

1、范围分区表2、列表分区表3、哈希分区表4、组合分区表--注subpartitions 2 并不是指定subpartition的个数一定为2,实际上每个分区的子分区个数可以不同。

subpartitions 关键字的作用到底是什么?如果不指定subpartition的具体明细,则系统按照subpartitions 的值指定subpartition的个数生成子分区,名称由系统定义。

二、增加分区注:hash partitioned table 新增partition时,现有表的中所有data都有重新计算hash值,然后重新分配到分区中。

所以被重新分配的分区的indexes需要rebuild 。

三、删除分区You can drop partitions from range, list, or composite range-list partitioned tables.For hash-partitioned tables, or hash subpartitions of range-hash partitioned tables, you must perform. a coalesce operation instead.四、分区合并1. 合并父分区如果省略update indexes子句的话,必须重建受影响的分区的index 。

ALTER TABLErange_example MODIFY PARTITION part02 REBUILD UNUSABLE LOCAL INDEXES;2. 合并子分区五、分割分区hash partitions or subpartitions不能分割。

如果指定的分割分区包含任何的数据时,对应的indexes可以被标识为UNUSABLE 。

ORACLE分区表的概念及操作

ORACLE分区表的概念及操作

ORACLE分区表的概念及操作此文从以下几个方面来整理关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点4.表分区的几种类型及操作方法5.对表分区的维护性操作. (1.) 表空间及分区表的概念表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定此文从以下几个方面来整理关于分区表的概念及操作:1.表空间及分区表的概念2.表分区的具体作用3.表分区的优缺点4.表分区的几种类型及操作方法5.对表分区的维护性操作.(1.) 表空间及分区表的概念表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称作表空间。

分区表:当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。

表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。

( 2).表分区的具体作用Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。

通常,分区可以使某些查询以及维护操作的性能大大提高。

此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。

每个分区有自己的名称,还可以选择自己的存储特性。

从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。

但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用SQL DML 命令访问分区后的表时,无需任何修改。

什么时候使用分区表:1、表的大小超过2GB。

2、表中包含历史数据,新的数据被增加都新的分区中。

(3).表分区的优缺点表分区有以下优点:1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

oracle 快速查询二级分区表数据的方法

oracle 快速查询二级分区表数据的方法

oracle 快速查询二级分区表数据的方法### Oracle 快速查询二级分区表数据的方法在Oracle数据库中,为了应对大数据量带来的性能挑战,我们常常采用分区表的设计。

分区表能够将数据分布在不同的区域,从而提高查询的效率。

特别是对于二级分区表,即先按一个字段进行一级分区,再在一级分区内按另一个字段进行二级分区的情况,合理的查询策略可以极大地提升数据处理的速度。

以下将介绍几种快速查询二级分区表数据的方法。

#### 1.利用分区裁剪(Partition Pruning)分区裁剪是Oracle优化查询性能的重要手段,通过指定分区键的值来限制查询只访问必要的分区。

```sqlSELECT *FROM your_tableWHERE partition_key1 = "value1"AND partition_key2 = "value2";```在这个例子中,通过指定`partition_key1`和`partition_key2`的值,查询优化器会只查询包含这些值的分区。

#### 2.使用分区索引为二级分区创建索引可以加速查询,尤其是在分区键上的查询。

```sqlCREATE INDEX idx_your_table ON your_table(partition_key2);```这将提高基于`partition_key2`字段的查询速度。

#### 3.选择合适的分区策略根据数据的访问模式,选择合适的分区策略(如RANGE、HASH或LIST),有助于优化查询性能。

- **RANGE分区**:如果查询通常基于某个范围的值,RANGE分区能够快速定位数据。

- **HASH分区**:当需要均匀分布数据时,HASH分区可以提供高效的查询性能。

- **LIST分区**:如果数据可以根据明确的值列表进行分类,LIST分区能够提供快速的查询。

#### 4.使用并行查询对于一些复杂的查询,可以启用并行查询来提高效率。

oracle重建分区索引语句

oracle重建分区索引语句

oracle重建分区索引语句摘要:1.引言2.Oracle 数据库分区索引的概念3.重建分区索引的方法4.重建分区索引的示例5.总结正文:1.引言在Oracle 数据库中,分区索引是一种提高查询性能的有效方法。

分区索引可以根据数据表中的某个或多个列对数据进行分区,从而使数据库能够更高效地管理和查询数据。

然而,随着时间的推移,分区索引可能会变得碎片化,导致查询性能下降。

在这种情况下,重建分区索引是一种有效的解决方案。

2.Oracle 数据库分区索引的概念在Oracle 数据库中,分区索引是根据数据表中的某个或多个列对数据进行分区的索引。

分区索引将数据表分成多个分区,每个分区包含具有相同列值的数据行。

这使得数据库能够更高效地管理和查询数据,尤其是在大型表中。

3.重建分区索引的方法要重建分区索引,可以使用以下步骤:a.分析分区索引的性能:使用Oracle 提供的性能分析工具,如AWR 报告、ADDM 报告等,分析分区索引的性能,确定是否需要重建。

b.备份数据:在重建分区索引之前,请确保备份数据,以防止数据丢失。

c.删除现有的分区索引:使用DROP INDEX 语句删除现有的分区索引。

d.重建分区索引:使用CREATE INDEX 语句重建分区索引。

在创建分区索引时,需要指定分区列、分区数量、每个分区的范围等参数。

e.验证分区索引的性能:在重建分区索引后,使用性能分析工具验证分区索引的性能,确保重建后的分区索引能够提高查询性能。

4.重建分区索引的示例假设我们有一个名为“sales_data”的数据表,其中包含以下列:product_id、sale_date、store_id、quantity 和amount。

我们希望通过product_id 列对数据进行分区。

首先,我们备份数据:```BACKUP TABLE sales_data TABLESPACE sales_data_ts;```然后,我们删除现有的分区索引:```DROP INDEX sales_data_pidx;```接下来,我们重建分区索引:```CREATE INDEX sales_data_pidxON sales_data (product_id)TABLESPACE sales_data_tsPARTITION BY RANGE (sale_date)(PARTITION sales_data_p1 VALUES LESS THAN (TO_DATE("2021-01-01", "YYYY-MM-DD")) TABLESPACE sales_data_ts,PARTITION sales_data_p2 VALUES LESS THAN (TO_DATE("2021-01-02", "YYYY-MM-DD")) TABLESPACE sales_data_ts,PARTITION sales_data_p3 VALUES LESS THAN (TO_DATE("2021-01-03", "YYYY-MM-DD")) TABLESPACE sales_data_ts);```最后,我们验证分区索引的性能:```SELECT * FROM sales_data WHERE product_id = 100;```5.总结在Oracle 数据库中,分区索引是一种提高查询性能的有效方法。

Oracle 建立分区表

Oracle  建立分区表

Oracle 建立分区表在Oracle 11g数据库中,根据对表或索引的分区方法可以创建五种类型的分区表:范围分区、散列分区、列表分区、组合范围散列分区和组合范围列表分区。

每种分区表都有自己的特点,在创建分区表时,应当根据表应用情况选择合理的分区类型。

1.范围分区表范围分区就是根据分区字段的取值范围进行分区,将数据存储在不同的分区段中。

如果表的数据可以按照逻辑范围进行划分,并在不同范围内分布比较均衡,那么可以使用范围分区。

例如,根据日期值进行分区,将不同日期的数据存储在不同的分区上。

如图10-2所示,假设有一个销售表SALES,该表的数据总量达到1000G,每个季度平均250G。

如果使用普通表存储数据,那么1000G数据会存放到一个表段SALES中,那么在统计一季度销售数据时需要扫描1000G数据;如果使用分区表,则可以将一、二、三、四季度数据分别存放到不同分区段中,此时统计一季度销售数据时只需要扫描250G的数据。

显而易见,使用范围分区可以大大降低I/O次数,从而提高了磁盘I/O性能。

普通表分区表一季度销售数据二季度销售数据三季度销售数据四季度销售数据图10-2 分区表与普通表例如,下面的示例建立一个范围分区表,将每个季度的销售数据部署到不同的表分区段。

建立范围分区时,必须指定分区方法RANGE,分区列以及每个分区列值的具体范围。

示例如下:SQL> create table sales_range(2 customer_id number(3),3 sales_amount number(10,2),4 sales_date date not null5 )partition by range(sales_date)(6 partition part_01 values less than(to_date('2008-04-01','yyyy-mm-dd')) tablespace space01,7 partition part_02 values less than(to_date('2008-07-01','yyyy-mm-dd')) tablespace space02,8 partition part_03 values less than(to_date('2008-10-01','yyyy-mm-dd')) tablespace space03,9 partition part_o4 values less than(maxvalue) tablespace space0410 );表已创建。

oracle创建分区表技巧

oracle创建分区表技巧

oracle创建分区表技巧
创建分区表是Oracle数据库中常见的操作,它可以帮助我们更有效地管理数据。

下面是一些创建分区表的技巧:
1.选择合适的分区键,分区键是根据其值对表中的数据进行分区的依据。

在选择分区键时,应该考虑到数据的访问模式、查询需求以及数据的增长趋势。

通常情况下,选择一个经常被用来查询或者过滤数据的列作为分区键是一个不错的选择。

2.合理划分分区,在创建分区表时,需要根据实际情况合理划分分区。

可以根据时间范围、地理位置或者业务类型等因素来进行分区。

合理的分区设计可以提高查询性能,减少维护成本。

3.使用局部索引,在分区表中,可以选择在每个分区上创建局部索引,这样可以提高查询性能。

局部索引只包含特定分区中的数据,可以减少索引的大小,提高查询效率。

4.考虑分区交换加载,分区表在数据加载时可以使用分区交换加载的技术,这样可以大大减少数据加载的时间。

通过分区交换加载,可以将数据加载到临时表中,然后通过交换分区的方式快速将
数据加载到分区表中。

5.定期维护分区,创建分区表后,需要定期进行分区的维护工作,包括分区的合并、拆分、刷新等操作,以保证分区表的性能和
可用性。

总的来说,创建分区表需要根据实际情况选择合适的分区键,
合理划分分区,使用局部索引,考虑分区交换加载,并定期维护分区。

这些技巧可以帮助我们更好地利用Oracle数据库的分区表功能。

ORACLE执行计划

ORACLE执行计划

ORACLE执行计划Oracle执行计划是Oracle数据库用于优化和执行SQL语句的步骤和顺序的一个计划。

在执行SQL语句之前,Oracle会分析SQL语句并生成一个执行计划,然后根据执行计划来执行SQL语句。

执行计划可以帮助开发人员和数据库管理员了解SQL语句的执行过程,找出性能瓶颈,并进行优化调整。

执行计划由一系列步骤和操作符组成,每个操作符表示一个SQL语句执行的特定步骤或操作。

Oracle数据库使用一个优化器来生成执行计划,优化器会考虑多个因素,如表的大小、索引的选择、连接类型等,以选择最佳的执行计划。

执行计划中的操作符可以分为以下几类:1. 表扫描操作符(Table Scan Operator):表示从表中逐行读取数据。

这是最基本和最常见的操作符之一、它可以是全表扫描(Full Table Scan)或索引扫描(Index Scan)。

2. 连接操作符(Join Operator):表示连接两个或多个表的操作。

连接操作是查询复杂性的一个重要组成部分,通过选择最合适的连接类型,可以极大地提高查询的性能。

3. 过滤操作符(Filter Operator):表示对查询结果进行筛选,只返回符合特定条件的数据。

过滤操作可以利用索引或表达式进行优化。

4. 排序操作符(Sort Operator):表示对查询结果进行排序,以按特定的顺序返回数据。

排序操作可以使用内存排序(In-Memory Sort)或磁盘排序(Disk Sort)。

5. 分组操作符(Group By Operator):表示将查询结果按照指定的列进行分组。

分组操作常用于聚合查询,如求和、计数等。

6. 聚合操作符(Aggregation Operator):表示对分组后的数据进行聚合计算。

聚合操作包括求和、计数、平均值等。

7. 索引操作符(Index Operator):表示使用索引来加速查询。

索引操作包括索引扫描、索引唯一扫描等。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深入学习Oracle分区表及分区索引关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类:•Range(范围)分区•Hash(哈希)分区•List(列表)分区•以及组合分区:Range-Hash,Range-List。

对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定compress属性),只不过分区依赖列不能是lob,long之类数据类型,每个表的分区或子分区数的总数不能超过1023个。

对于索引组织表,只能够支持普通分区方式,不支持组合分区,常规表的限制对于索引组织表同样有效,除此之外呢,还有一些其实的限制,比如要求索引组织表的分区依赖列必须是主键才可以等。

注:本篇所有示例仅针对常规表,即堆组织表!对于索引,需要区分创建的是全局索引,或本地索引:l 全局索引(global index):即可以分区,也可以不分区。

即可以建range分区,也可以建hash分区,即可建于分区表,又可创建于非分区表上,就是说,全局索引是完全独立的,因此它也需要我们更多的维护操作。

l 本地索引(local index):其分区形式与表的分区完全相同,依赖列相同,存储属性也相同。

对于本地索引,其索引分区的维护自动进行,就是说你add/drop/split/truncate表的分区时,本地索引会自动维护其索引分区。

Oracle建议如果单个表超过2G就最好对其进行分区,对于大表创建分区的好处是显而易见的,这里不多论述why,而将重点放在when以及how。

ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在那个分区或那几个内部,然后在分区内部去查找数据,一个分区一般保证四十多万条数据就比较正常了,但是分区表并非乱建立,而其维护性也相对较为复杂一点,而索引的创建也是有点讲究的,这些以下尽量阐述详细即可。

range分区方式,也算是最常用的分区方式,其通过某字段或几个字段的组合的值,从小到大,按照指定的范围说明进行分区,我们在INSERT数据的时候就会存储到指定的分区中。

List分区方式,一般是在range基础上做的二级分区较多,是一种列举方式进行分区,一般讲某些地区、状态或指定规则的编码等进行划分。

Hash分区方式,它没有固定的规则,由ORACLE管理,只需要将值INSERT进去,ORACLE 会自动去根据一套HASH算法去划分分区,只需要告诉ORACLE要分几个区即可。

WHEN一、When使用Range分区Range分区呢是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中,比如按照时间划分,2008年1季度的数据放到a分区,08年2季度的数据放到b分区,因此在创建的时候呢,需要你指定基于的列,以及分区的范围值,如果某些记录暂无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在分区中,并且支持指定多列做为依赖列,后面在讲how的时候会详细谈到。

二、When使用Hash分区通常呢,对于那些无法有效划分范围的表,可以使用hash分区,这样对于提高性能还是会有一定的帮助。

hash分区会将表中的数据平均分配到你指定的几个分区中,列所在分区是依据分区列的hash值自动分配,因此你并不能控制也不知道哪条记录会被放到哪个分区中,hash分区也可以支持多个依赖列。

三、When使用List分区List分区与range分区和hash分区都有类似之处,该分区与range分区类似的是也需要你指定列的值,但这又不同与range分区的范围式列值---其分区值必须明确指定,也不同与hash分区---通过明确指定分区值,你能控制记录存储在哪个分区。

它的分区列只能有一个,而不能像range或者hash分区那样同时指定多个列做为分区依赖列,不过呢,它的单个分区对应值可以是多个。

你在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区存储那些不在指定范围内的记录,类似range分区中的maxvalue分区。

四、When使用组合分区如果某表按照某列分区之后,仍然较大,或者是一些其它的需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。

组合分区呢在10g中有两种:range-hash,range-list。

注意顺序哟,根分区只能是range 分区,子分区可以是hash分区或list分区。

提示:11g在组合分区功能这块有所增强,又推出了range-range,list-range,list-list,list-hash,这就相当于除hash外三种分区方式的笛卡尔形式都有了。

为什么会没有hash做为根分区的组合分区形式呢,再仔细回味一下第二点,你一定能够想明白~~。

深入学习Oracle分区表及分区索引(2)一、如何创建如果想对某个表做分区,必须在创建表时就指定分区,我们可以对一个包含分区的表中的分区做修改,但不能直接将一个未分区的表修改成分区表(起码在10g是不行的,当然你可能会说,可以通过在线重定义的方式,但是这不是直接哟,这也是借助临时表间接实现的)。

创建表或索引的语法就不说了,大家肯定比我还熟悉,而想在建表(索引)同时指定分区也非常容易,只需要把创建分区的子句放到";"前就行啦,同时需要注意表的row movement 属性,它用来控制是否允许修改列值所造成的记录移动至其它分区存储,有enable|disable 两种状态,默认是disable row movement,当disable时,如果记录要被更新至其它分区,则更新语句会报错。

下面分别演示不同分区方式的表和索引的创建:1、创建range分区语法如下,需要我们指定的有:l column:分区依赖列(如果是多个,以逗号分隔);l partition:分区名称;l values less than:后跟分区范围值(如果依赖列有多个,范围对应值也应是多个,中间以逗号分隔);l tablespace_clause:分区的存储属性,例如所在表空间等属性(可为空),默认继承基表所在表空间的属性。

①创建一个标准的range分区表:JSSWEB> create table t_partition_range (id number,name varchar2(50))partition by range(id)(partition t_range_p1 values less than (10) tablespace tbspart01,partition t_range_p2 values less than (20) tablespace tbspart02,partition t_range_p3 values less than (30) tablespace tbspart03,partition t_range_pmax values less than (maxvalue) tablespace tbspart04);表已创建。

要查询创建分区的信息,可以通过查询user_part_tables,user_tab_partitions两个数据字典(索引分区、组织分区等信息也有对应的数据字典,后续示例会逐步提及)。

user_part_tables:记录分区的表的信息;user_tab_partitions:记录表的分区的信息。

例如:JSSWEB> select table_name,partitioning_type,partition_countFrom user_part_tables where table_name='T_PARTITION_RANGE';JSSWEB> select partition_name,high_value,tablespace_namefrom user_tab_partitions where table_name='T_PARTITION_RANGE'order by partition_position;②创建global索引range分区:JSSWEB> create index idx_parti_range_id on t_partition_range(id)2 global partition by range(id)(3 partition i_range_p1 values less than (10) tablespace tbspart01,4 partition i_range_p2 values less than (40) tablespace tbspart02,5 partition i_range_pmax values less than (maxvalue) tablespace tbspart03);索引已创建。

由上例可以看出,创建global索引的分区与创建表的分区语句格式完全相同,而且其分区形式与索引所在表的分区形式没有关联关系。

注意:我们这里借助上面的表t_partition_range来演示创建range分区的global索引,并不表示range分区的表,只能创建range分区的global索引,只要你想,也可以为其创建hash分区的global索引。

查询索引的分区信息可以通过user_part_indexes、user_ind_partitions两个数据字典:JSSWEB> select index_name, partitioning_type, partition_count2 From user_part_indexes3 where index_name = 'IDX_PARTI_RANGE_ID';③Local分区索引的创建最简单,例如:仍然借助t_partition_range表来创建索引--首先删除之前创建的global索引JSSWEB> drop index IDX_PARTI_RANGE_ID;索引已删除。

JSSWEB> create index IDX_PARTI_RANGE_ID on T_PARTITION_RANGE(id) local;索引已创建。

查询相关数据字典:JSSWEB> select index_name, partitioning_type, partition_count2 From user_part_indexes3 where index_name = 'IDX_PARTI_RANGE_ID';JSSWEB> select partition_name, high_value, tablespace_name2 from user_ind_partitions3 where index_name = 'IDX_PARTI_RANGE_ID'4 order by partition_position;可以看出,local索引的分区完全继承表的分区的属性,包括分区类型,分区的范围值即不需指定也不能更改,这就是前面说的:local索引的分区维护完全依赖于其索引所在表。

相关文档
最新文档