关于oracle分区技术--初了解(二)

2014-11-24 09:08:38 · 作者: · 浏览: 1
YGER@ORA11G>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 增加表分区

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

TYGER@ORA11G>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

TYGER@ORA11G>alter table sales add partitionsales01

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

Table altered.

TYGER@ORA11G>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 合并分区

必须是相邻的范围分区

继承最大的范围边界

TYGER@ORA11G>alter table sales

2 merge partitions sales06,sales01 intopartition sales07;

Table altered.

TYGER@ORA11G>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 移动表分区

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

重新整理数据减少碎片

改变物理属性

TYGER@ORA11G>alter table sales move partitionsales01

2 tablespace sales_ts_move;

2.5 拆分表分区

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

TYGER@ORA11G>alter table sales split partition sales07

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

3 into (partition sales01 tablespacesales_ts01,

4 partition sales06 tablespacesales_ts06);

Table altered.

TYGER@ORA11G>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 语句中使用它们。

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