重庆思庄Oracle、Redhat认证学习论坛

标题: 11g新特性之system partition [打印本页]

作者: 郑全    时间: 2012-8-27 16:22
标题: 11g新特性之system partition

11g新特性之system partition

 

从Oracle11g开始,开发人员和dba在选择使用分区表时更加灵活。因为在11g中,新引入了诸如reference partition, interval partition, partition virtual column,system partiton以及extended composite partition等分区类型,管理和维护方面也更加方便。

下面就来对system partition分区的使用和维护进行简单的探讨。

Oracle10g提供range,hash,list类型的分区。但有时选择分区表的时候,可能会有这样的尴尬–某些大表很难根据某个列进行分区,比如下面的例子。

SQL> desc sales
Name Null? Type
————————— ——– ———–
SALES_ID NUMBER
PRODUCT_CODE NUMBER
STATE_CODE NUMBER

这张sales表没有合适的列进行range、list分区,hash分区又不能决定数据行存放的表分区。Oracle11g中引入的system partition可以很好的解决这个问题,我们使用下面的语句重新创建sales表。

create table sales
( sales_id number,
product_code number,
state_code number)
partition by system
( partition p1,
partition p2
);

Table created.

新创建的sales表中,没有分区键值也没有设定范围。表从物理结构上分成了两个独立的段,但逻辑上仍然是一个完整的表。

SQL> select partition_name from user_segments where segment_name=’SALES’;

PARTITION_NAME
———————–
P1
P2

而在这张表上创建本地索引,同普通的分区表一样,也会创建相应的本地索引。

SQL> create index in_sales_state on sales(state_code) local;

Index created.

SQL> select partition_name from user_segments where segment_name=’IN_SALES_STATE’;

PARTITION_NAME
———————–
P1
P2

通过视图user_part_tables和user_tab_partitions,可以看出system partition既没有分区键值,没有设定范围。

SQL> select partitioning_type from user_part_tables where table_name=’SALES’;

PARTITION
————–
SYSTEM

SQL> select partition_name, high_value from user_tab_partitions where table_name=’SALES’;

PARTITION_NAME HIGH_VALUE
————– ———————
P1
P2

而尝试往该类表中插入数据时,需要显示的指定插入的分区,否则会发生ORA-14701错误。

SQL> insert into sales values (1,100,2);
insert into sales values (1,100,2)
*
ERROR at line 1:
ORA-14701: partition-extended name or bind variable must be used for DML’s on tables partitioned by the System method

SQL> insert into sales partition (p1) values (1,100,2);

1 row created.

而在删除数据时,既可以指定表分区,也可以不指定。当然,如果没有指定分区则进行全表的扫描,指定分区则只扫描指定的表分区。

SQL> delete sales where state_code = 2;

SQL> delete sales partition (p1) where state_code = 2;

1 row deleted.






欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2