`
勒布朗
  • 浏览: 71228 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

oracle 表分区的相关操作

 
阅读更多

分区的优点:

1、 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;

2、 减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,矿能比整个大表修复花的时间更少;

3、 维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;

4、 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;

5、 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快,在数据仓库的TP查询特别有用。

6、 分区对用户透明,最终用户感觉不到分区的存在。


create tablespace dw1

datafile 'D:\oracle\oradata\ora9\dw11.ora' size 50M

 

create tablespace dw2

datafile 'D:\oracle\oradata\ora9\dw21.ora' size 50M

 

一、按范围分区:固名思义就是按一定range来分区,看下面的例子:

SQL> set linesize 1000

SQL> create table niegc_part

2 (

3 part_id integer primary key,

4 part_date date,

5 part_dec varchar2(100)

6 )

7 partition by range(part_date)

8 (

9 partition part_01 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dw1,

10 partition part_02 values less than(to_date('2011-01-01','yyyy-mm-dd')) tablespace dw2,

11 partition part_03 values less than(maxvalue) tablespace dw1

12 );

 

表已创建。

 

SQL>

SQL> insert into niegc_part values(1,to_date('2009-12-30','yyyy-mm-dd'),'less 20

10-01-01');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> insert into niegc_part values(2,to_date('2010-01-01','yyyy-mm-dd'),'equal 2

011-01-01');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> insert into niegc_part values(3,sysdate,'sysdate');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL>

SQL>

SQL> select * from niegc_part partition(part_01);

 

   PART_ID PART_DATE PART_DEC

---------- ---------- ----------------------------------------------------------

------------------------------------------

         1 30-07月-12 less 2010-01-01


SQL>

 

相信只要对oracle 有点熟,都能知道上面的range分区的意思了.

 

两个字段以上的range分区大同小异,请看下面的例子:

create table niegc_part
(
part_id integer primary key,
part_date date,
part_dec varchar2(100)
)
partition by range(part_id,part_date)
(
partition part_01 values less than(1,to_date('2010-01-01','yyyy-mm-dd')) tablespace dw,
partition part_02 values less than(10,to_date('2011-01-01','yyyy-mm-dd')) tablespace dw,
partition part_03 values less than(maxvalue,maxvalue) tablespace dw
);

二、Hash分区(散列分区)。 散列分区通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使行这些分区大小一致。如将part_id的数据根据自身的情况散列地存放在指定的三个表空间中:

create table niegc_part

(

part_id integer primary key,

part_date date,

part_dec varchar2(100)

)

partition by hash(part_id)

(

partition part_01 tablespace dw1,

partition part_02 tablespace dw2

);

 

系统将按part_id将记录散列地插入三个分区中,这里也就是二个不同的表空间中。

 

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

 

create table niegc_part

(

part_id integer primary key,

part_date date,

part_dec varchar2(100)

)

partition by range(part_date) subpartition by hash(part_id)

subpartitions 2 store in(dw1,dw2)

(

partition part_01 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dw1,

partition part_02 values less than(to_date('2011-01-01','yyyy-mm-dd')) tablespace dw2,

partition part_03 values less than(maxvalue) tablespace dw1

);


先根据part_date进行范围分区,然后根据交易的ID将记录散列地存储在二个表空间中。

 

四、索引分区:

注意: 对某个字段已做了分区了,是不允许再建立索引分区的。这一点要非常注意。

 

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

create index idx_part_id on niegc_part(part_dec)

global partition by range(part_dec)

(

partition idx_1 values less than('1000') tablespace dw,

partition idx_2 values less than(maxvalue) tablespace dw

)

 

局部索引分区的建立:(注意:表必须存在分区,此分区的个数必须和分区表的分区个数一样,不然是建立不起来的)

create index idx_part_id on niegc_part(part_dec)

local

(

partition idx_1 tablespace dw1,

partition idx_2 tablespace dw2

)


五、分区维护:(只对范围分区)

(1)、增加一个分区:分区范围只能往上增,不能增加一个少于原有的分区:

alter table niegc_part add partition part_03 values less than(maxvalue)

(2)、合并分区:(合并后的分区必须指下最后一个大value的分区)

alter table niegc_part merge partitions part_02,part_03 into partition part_03

(3)、删除一个分区:

alter table niegc_part drop partition part_01

分享到:
评论

相关推荐

    Oracle表分区详解(优缺点)

    本文将详细介绍Oracle表分区的概念、作用、优缺点,以及各种类型的分区和操作方法。 首先,理解表空间和分区表的概念至关重要。表空间是Oracle数据库中存储数据的基本单位,它由一个或多个数据文件组成,容纳了...

    oracle表分区详解

    - 对于只涉及部分分区的查询,Oracle可以直接定位到相关的分区,避免扫描整个表,从而显著提高查询速度。 - 分区还可以并行处理,进一步加速查询。 ##### 2. 简化管理和维护 - 当表中的数据需要修改或删除时,只...

    Oracle表分区详解

    Oracle数据库中的表分区是数据库管理的一种高级技术,它允许我们将大型表分解成更小、更易管理和查询的部分,从而提高数据存储和检索的效率。在本文中,我们将深入探讨Oracle表分区的各个方面,包括其重要性、类型、...

    oracle分区表之hash分区表的使用及扩展

    Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...

    Oracle数据库分区表操作方法

    Oracle数据库分区表操作方法 Oracle数据库中的分区表是将大型数据表分割成多个小表,以提高应用系统的性能和方便数据管理。在本文中,我们将详细介绍分区表的使用方法和优点。 分区表的优点 使用分区表可以带来...

    Oracle分区表详解

    #### 四、Oracle 表分区操作 下面是一些常用的表分区操作示例: - **查看分区是否启用**: ```sql SELECT * FROM v$option ORDER BY s.PARAMETER DESC; ``` - **创建表空间**: ```sql CREATE TABLESPACE ...

    oracle表分区详细讲解

    ### Oracle表分区详解 #### 一、表空间与分区表概念 **表空间**:在Oracle数据库中,表空间是一个或多个数据文件的集合。所有数据对象(如表、索引等)都存放在特定的表空间中。由于主要存放的是表,因此被称为...

    oracle数据库表分区实例

    本文档提供了一个关于Oracle数据库表分区操作的具体实例,适用于学习如何对表进行分区。 #### 二、表分区的优点 1. **提高查询性能**:通过使用分区消除(partition elimination)和并行操作(parallel operations),...

    ORACLE表自动按月分区步骤

    需要注意的是,分区的起始时间(例如`2014-01-01`)应该选择为现有表中最早的日期月份或更早的日期,以便于后续的分区操作能够正确执行。 ```sql CREATE TABLE USER_ORDER PARTITION BY RANGE (CREATE_TIME) ...

    ORACLE表分区例子

    在下载的“oracle表分区”压缩包中,可能包含了演示如何在Oracle环境中创建、操作和管理分区表的SQL脚本和文档。通过学习和实践这些示例,你可以深入理解并掌握Oracle表分区技术,从而更好地应对大数据量的挑战。

    oracle普通表转化为分区表的方法

    Oracle数据库中的分区表是一种高级的表组织形式,它将大表分成多个较小的部分,每个部分称为一个分区,以提高查询性能和管理效率。当表的大小超过2GB时,官方推荐使用分区表,因为它们在处理大量数据时具有显著优势...

    ORACLE分区表操作大全

    Oracle分区表是Oracle数据库中一种优化大数据处理的高级特性,它通过将一个大表分成多个逻辑部分,即分区,来提高查询性能、简化管理和增强可用性。分区技术在处理海量数据时尤其有用,因为它们允许数据库仅扫描与...

    Oracle大表分区的技术

    2. **避免跨分区操作**:设计应用程序时,尽量避免全表扫描和跨分区的JOIN操作。 3. **考虑分区边界**:合理设置分区边界,确保新数据能自动落入正确分区。 4. **利用分区修剪**:通过编写明智的SQL语句,让数据库...

    Oracle 分区表 分区索引

    Oracle分区技术提供了强大的工具来管理和优化大型表和索引。通过合理选择分区策略和正确使用分区管理功能,可以显著提高数据库性能并降低管理复杂性。在实际应用中,应根据具体的业务需求和技术环境灵活运用这些分区...

    oracle表分区详解【转】

    2. 维护效率:删除、更新和插入操作只影响相关分区,而不是整个表,降低I/O开销。 3. 分区级别的操作:如交换分区、合并分区等,使得数据库管理更为灵活。 4. 易于备份和恢复:可以针对单个分区进行备份和恢复,而...

    oracle分区表分区索引.docx

    需要注意的是,Oracle 不会自动维护全局分区索引,当我们在对表的分区做修改之后(如对分区作 move,truncate,drop),如果对分区进行维护操作时不加上 update global indexes,通常会导致全局索引的INVALDED,必须在...

Global site tag (gtag.js) - Google Analytics