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

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5198|回复: 0
打印 上一主题 下一主题

11g新特性之system partition

[复制链接]
跳转到指定楼层
楼主
发表于 2012-8-27 16:22:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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.

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-20 21:27 , Processed in 0.085547 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表