关于oracle分区技术--初了解

一、  分区类型

1. 范围分区(Range Partitioning)

适用于  连续/按时间排序的数据

2. 散列分区(Hash Partitioning)

适用于  不连续/数据记录固定的数据

3. 组合分区 Range-Hash

Range-List

4. 列表分区 List Partitioning

适用于对不连续域的数据分区

更准确的控制数据的分区存储

适用于 位置类数据

二、  分区表的维护

准备工作

[email protected]>create tablespace sales_ts01

2  datafile‘/u01/app/oracle/oradata/ORA11G/sales_ts01_01.dbf‘ size 10m;

Tablespace created.

[email protected]>create tablespace sales_ts02

2  datafile‘/u01/app/oracle/oradata/ORA11G/sales_ts02_01.dbf‘ size 10m;

Tablespace created.

[email protected]>create tablespace sales_ts03

2  datafile‘/u01/app/oracle/oradata/ORA11G/sales_ts03_01.dbf‘ size 10m;

Tablespace created.

[email protected]>create tablespace sales_ts04

2  datafile‘/u01/app/oracle/oradata/ORA11G/sales_ts04_01.dbf‘ size 10m;

Tablespace created.

[email protected]>create tablespace sales_ts05

2  datafile‘/u01/app/oracle/oradata/ORA11G/sales_ts05_01.dbf‘ size 10m;

Tablespace created.

[email protected]>create tablespace sales_ts06

2  datafile‘/u01/app/oracle/oradata/ORA11G/sales_ts06_01.dbf‘ size 10m;

Tablespace created.

[email protected]>

[email protected]>

[email protected]>

[email protected]>conn tyger/tyger

Connected.

[email protected]>

[email protected]>

[email protected]>CREATE TABLE SALES

(PROD_ID NUMBER,

CUST_ID NUMBER,

TIME_ID DATE,

CHANNEL_ID NUMBER,

PROMO_ID NUMBER,

QUANTITY_SOLD NUMBER(10,2),

AMOUNT_SOLD NUMBER(10,2)

)

PARTITION BY RANGE(TIME_ID)

(PARTITION sales01 values less than (‘01-Feb-2004‘)TABLESPACE SALES_TS01,

PARTITION sales02 values less than (‘01-Mar-2004‘)TABLESPACE SALES_TS02,

PARTITION sales03 values less than (‘01-Apr-2004‘)TABLESPACE SALES_TS03,

PARTITION sales04 values less than (‘01-May-2004‘)TABLESPACE SALES_TS04,

PARTITION sales05 values less than (‘01-Jun-2004‘)TABLESPACE SALES_TS05,

PARTITION sales06 values less than (‘01-Jul-2004‘)TABLESPACE SALES_TS06

);  2    3   4    5    6   7    8    9  10   11   12  13   14   15  16   17

Table created.

[email protected]>selectTABLE_NAME,PARTITIONING_TYPE,SUBPARTITIONING_TYPE,STATUS

2  from user_part_tables;

TABLE_NAME                     PARTITION SUBPARTIT STATUS

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

SALES                          RANGE     NONE     VALID

[email protected]>col table_name for a20

[email protected]>col tablespace_name for a20

[email protected]>l

1  selectTABLE_NAME,PARTITION_NAME,TABLESPACE_NAME

2* fromuser_tab_partitions

[email protected]>/

TABLE_NAME          PARTITION_NAME                TABLESPACE_NAME

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

SALES               SALES01                       SALES_TS01

SALES               SALES02                       SALES_TS02

SALES               SALES03                       SALES_TS03

SALES               SALES04                       SALES_TS04

SALES               SALES05                        SALES_TS05

SALES               SALES06                       SALES_TS06

6 rows selected.

语法:

ALTERTABLE                        ALTER INDEX

? ? ADD PARTITION                  -DROP PARTITION

? ? COALESCE PARTITION             - MODIFY PARTITION

? ? DROP PARTITION                 - MODIFY DEFAULT ATTRIBUTES

? ? EXCHANGE PARTITION             - MODIFY PARTITION COALESCE

? ? MERGE PARTITIONS               - REBUILD PARTITION

? ? MODIFY PARTITION               - RENAME PARTITION

? ? MODIFY DEFAULT                 -SPLIT PARTITION

ATTRIBUTES                         - UNUSABLE

? ? MOVE PARTITION

? ? RENAME PARTITION

? ? SPLIT PARTITION

2.1 删除表分区

Alter table sales droppartition sales01;

[email protected]>alter table sales drop partitionsales01;

Table altered.

[email protected]>selectTABLE_NAME,PARTITION_NAME,TABLESPACE_NAME

2  from user_tab_partitions;

TABLE_NAME          PARTITION_NAME                TABLESPACE_NAME

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

SALES               SALES02                       SALES_TS02

SALES               SALES03                        SALES_TS03

SALES               SALES04                       SALES_TS04

SALES               SALES05                       SALES_TS05

SALES               SALES06                       SALES_TS06

2.2 增加表分区

增加分区的分区范围必须比当前分区的最后一个分区更高

[email protected]>alter table sales add partitionsales01 values less than (‘01-Feb-2004‘) tablespace sales_ts01;

alter table sales add partition sales01 values lessthan (‘01-Feb-2004‘) tablespace sales_ts01

*

ERROR at line 1:

ORA-14074: partition bound mustcollate higher than that of the last partition

[email protected]>alter table sales add partitionsales01

2  values less than (‘01-Aug-2004‘) tablespacesales_ts01;

Table altered.

[email protected]>selecttable_name,partition_name,tablespace_name

2  from user_tab_partitions;

TABLE_NAME          PARTITION_NAME                TABLESPACE_NAME

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

SALES               SALES02                        SALES_TS02

SALES               SALES03                       SALES_TS03

SALES               SALES04                       SALES_TS04

SALES               SALES05                       SALES_TS05

SALES               SALES06                        SALES_TS06

SALES               SALES01                       SALES_TS01

2.3 合并分区

· 必须是相邻的范围分区

·  继承最大的范围边界

[email protected]>alter table sales

2  merge partitions sales06,sales01 intopartition sales07;

Table altered.

[email protected]>select table_name,partition_name,tablespace_name

2  from user_tab_partitions;

TABLE_NAME          PARTITION_NAME                TABLESPACE_NAME

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

SALES               SALES07                        USERS

SALES               SALES02                       SALES_TS02

SALES               SALES03                       SALES_TS03

SALES               SALES04                       SALES_TS04

SALES               SALES05                        SALES_TS05

2.4 移动表分区

·  移动分区数据到另一个表空间

·  重新整理数据减少碎片

·  改变物理属性

[email protected]>alter table sales move partitionsales01

2  tablespace sales_ts_move;

2.5 拆分表分区

拆分表分区———一个分区变的太大,导致备份,恢复和分区性能操作花费时间太长,重新分配I/O负载。

[email protected]>alter table sales split partition sales07

2  at (‘01-Jul-2004‘)         
// 按哪个时间点拆分

3  into (partition sales01 tablespacesales_ts01,

4        partition sales06 tablespacesales_ts06);

Table altered.

[email protected]>selecttable_name,partition_name,tablespace_name

2  from user_tab_partitions;

TABLE_NAME          PARTITION_NAME                TABLESPACE_NAME

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

SALES               SALES02                       SALES_TS02

SALES               SALES03                        SALES_TS03

SALES               SALES04                       SALES_TS04

SALES               SALES05                       SALES_TS05

SALES               SALES06                       SALES_TS06

SALES               SALES01                        SALES_TS01

6 rows selected.

三、 11g新特性

分区增强功能

·间隔分区

·基于虚拟列的分区

·引用分区

·组合分区增强功能

·分区顾问

3.1间隔分区

· 间隔分区是范围分区的一种扩展

·当插入的数据超过了所有范围分区时,将自动创建指定间隔的分区。

·必须至少创建一个范围分区

·间隔分区可以自动创建范围分区

CREATE TABLE sales (order_date DATE, ...)

PARTITON BY RANGE (order_date)

INTERVAL(NUMTOYMINTERVAL(1,‘month‘)

(PARTITION p_first VALUES LESS THAN(‘01-JAN-2006‘);

numtoyminterval函数——数字转换函数

语法:NUMTOYMINTERVAL ( n , ‘char_expr‘ )

char_expr:日期描述,可以是YEAR和MONTH;

作用:可以将数字转换成相应的日期单位时间

比如:NUMTOYMINTERVAL ( 1, ‘MONTH‘ ) 表示一个月

NUMTOYMINTERVAL ( 1, ‘YEAR‘ ) 表示一年

3.2基于虚拟列的分区

· 虚拟列值是通过计算函数或表达式得到的。

·  可以在 create 或 alter 表操作中定义虚拟列。

·  虚拟列值实际上并未存储在磁盘上的表行中,而是根据需要进行计算

·  像其他表列类型一样,可以对虚拟列进行索引,可以在查询、DML 和 DDL 语句中使用它们。

·  可在虚拟列上对表和索引进行分区,甚至可以收集它们的统计信息。

CREATE TABLE accounts

(acc_no number(10) not null,

acc_name varchar2(50) not null, ...

acc_branch number(2) generated always as

(to_number(substr(to_char(acc_no),1,2)))

partition by list (acc_branch) ...

3.3引用分区

通过采用引用分区技术,首先我们不用在子表专门设计分区时间字段,直接根据外键关系,就可以对子表进行与主表相同的分区。而且,主表和子表在分区管理上也是一体的。主表增加一个分区,子表自动增加一个分区,删除主表的一个分区,子表也自动删除一个分区。

? 现在,可以根据表的引用约束条件中引用的此表的分区方法对

表进行分区。

? 分区键是通过现有的父/子关系解析的。

? 分区键是由活动的主键和外键约束条件强制实施的。

? 包含父/子关系的表可以通过从父表继承分区键进行均匀分区,

而无需复制键列。

? 分区是自动维护的。

3.4新的复合分区

Range-range

List-list

List-hash

List-range

时间: 2024-10-12 09:33:07

关于oracle分区技术--初了解的相关文章

柯南君 :Oracle 分区技术 之 如何支撑大数据操作?

前段时间,看了罗女士( 资深技术顾问 - Oracle 中国 顾问咨询部)关于<大批量数据处理技术的演讲>视频,感觉受益良多,结合多年的知识积累,柯南君给大家分享一下: 交流内容: 一.Oracle的分区技术 (一)分区技术内容 1. 什么是分区? 分区就是将一个非常大的table或者index 按照某一列的值,分解为更小的,易于管理的逻辑片段---分区.将表或者索引分区不会影响SQL语句以及DML(见备注)语句,就和使用非分区表一样,每个分区拥有自己的segment(见备注),因为,DDL(

我对oracle分区技术的学习

分区技术纷繁复杂,从11g以后有更多的分区方式,但是在考虑使用分区之前要想好是否需要历史数据清理. 比如罗敏的<品悟性能优化>书中P138那个案例.如果使用命名方式分区,那么以后清理历史数据无法根据分区特性进行清理,原因在于可能同一个名字的分区中包含好几年的数据. Oracle 分区表简单而言就是将一张大表按一定规则分为物理上的很多小表,而逻辑上仍然维持为一张大表.对应用是透明的. 分区索引分为以下几种情况 ·        表和索引都不分区 ·        表分区,索引没分区 ·     

oracle分区技术提高查询效率

概述: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表. 下面介绍如何使用分区增加查询效率 range分区:就是区域分区 CREATE TABLE SALE ( PRODUCT_ID VARCHAR2(5), SALE_COUNT NUMBER(10,2) ) PARTITION BY RANGE (SALE

关于分区技术的索引 index

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

Oracle分区表技术 (Partitioned Tables)

自Oracle 8(1997年左右)就引入了分区表&分区索引(Partitioned Tables & Indexes)的概念来调整大表和大索引,提升性能,提升运维管理的能力.分区表和分区索引机制是海量数据库管理(Very Large Databases ,即VLDB) 中一个重要的提升性能的机制. Oracle分区技术的历史 Oracle 8引入了分区的概念,后续的每个版本都有对分区机制优化和改进. 使用分区表/索引的好处 性能提升: Select语句只检索本分区的记录,减少了记录总数,

Mysql分区技术 --创建分区表

分区的作用:数据库性能的提升和简化数据管理 在扫描操作中,mysql优化器只扫描保护数据的那个分区以减少扫描范围获得性能的提高.分区技术使得数据管理变得简单,删除某个分区不会对另外的分区造成影响,分区有系统直接管理不用手工干预. 查询当前的mysql数据库版本是否支持分区show variables like '%partition%'; 分区类型[RANGE 分区]:基于属于一个给定连续区间的列值,把多行分配给分区. [LIST 分区]:类似于按RANGE分区,区别在于LIST分区是基于列值匹

oracle分区提高篇

  一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中.查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询. When to Partition a Table什么时候需要分区表,官网的2个建议如下: (1)Ta

深入oracle 12c数据库备份与恢复(优化RMAN性能、Oracle flashback技术)

课程讲师:小流老师 课程分类:Oracle 适合人群:高级 课时数量:15课时 更新程度:完成 服务类型:C类(普通服务类课程) 用到技术:oracle 涉及项目:oracle 12c数据库备份与恢复 需要更多相关资料可以联系 Q2748165793 课程提纲 第一讲:介绍备份和恢复相关操作 备份和恢复的目标 备份和恢复的解决方案 Oracle flashback技术 第二讲:开始RMAN操作和RMAN体系架构 RMAN的环境 RMAN Channels RMAN Repository RMAN

数据库 Oracle分区介绍

一.简介:Oracle 分区功能可以提高许多应用程序的可管理性.性能与可用性.通过分区功能,可以将表.索引和索引组织表进一步细分为段,从而能够更精确地管理和访问这些数据库对象.Oracle 提供了种类繁多的分区方案以满足每种业务要求.而且,因为在 SQL 语句中分区是完全透明的,所以该功能几乎可应用于任何应用程序. 分区功能的优势:分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此 外,分区还可以极大简化常见的管理任