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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

11g新特性之reference partition

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

11g新特性之reference partition

 

引用分区允许表基于其参照约束进行分区,分区键值通过现有的父子关系进行解析。这意味着,有引用关系的表能够继承父表的分区键值,而不需要重复的键。这种逻辑依存也能够自动进行分区维护,使得应用开发更加容易,且不易出错。

SQL> CREATE TABLE orders
( order_id NUMBER(12),
order_date DATE,
order_mode VARCHAR2(8),
customer_id NUMBER(6),
CONSTRAINT orders_pk PRIMARY KEY(order_id)
)
PARTITION BY RANGE(order_date)
(PARTITION Q1_2005 VALUES LESS THAN
(TO_DATE(’2005-4-1′,’yyyy-mm-dd’)),
PARTITION Q2_2005 VALUES LESS THAN
(TO_DATE(’2005-7-1′,’yyyy-mm-dd’)),
PARTITION Q3_2005 VALUES LESS THAN
(TO_DATE(’2005-10-1′,’yyyy-mm-dd’)),
PARTITION Q4_2005 VALUES LESS THAN
(TO_DATE(’2006-1-1′,’yyyy-mm-dd’)))
;

Table created.

SQL> CREATE TABLE order_items
( order_id NUMBER(12) NOT NULL,
line_item_id NUMBER(3) NOT NULL,
product_id NUMBER(6) NOT NULL,
unit_price NUMBER(8,2),
quantity NUMBER(8),
CONSTRAINT order_items_fk
FOREIGN KEY(order_id) REFERENCES orders(order_id)
)
PARTITION BY REFERENCE(order_items_fk);

Table created.

上面的例子创建了一张orders表,在order_date列上进行范围分区,分别命名为Q1_2005、Q2_2005、Q3_2005、Q4_2005。接下来再创建一张引用分区表,以orders的主键order_id为外键。

SQL> select PARTITION_NAME from dba_tab_partitions
2 where table_name=’ORDERS’;

PARTITION_NAME
——————————
Q1_2005
Q2_2005
Q3_2005
Q4_2005

SQL> select PARTITION_NAME from dba_tab_partitions
2 where table_name=’ORDER_ITEMS’;

PARTITION_NAME
——————————
Q1_2005
Q2_2005
Q3_2005
Q4_2005

从上面的查询可以看出,order_itmes表自动创建了和父表相对应的分区。不能指定引用分区的上下限,但可以给分区命名,如果没有显示的给各个分区命名,将自动继承父表的分区名称。一旦父表的分区发生变化,子表分区也会自动适应,而单独修改子表分区则不被允许

SQL> alter table orders drop partition q1_2005;

Table altered.

SQL> select PARTITION_NAME from dba_tab_partitions where table_name=’ORDERS’;

PARTITION_NAME
——————————
Q2_2005
Q3_2005
Q4_2005

SQL> select PARTITION_NAME from dba_tab_partitions where table_name=’ORDER_ITEMS’;

PARTITION_NAME
——————————
Q2_2005
Q3_2005
Q4_2005
SQL> alter table order_items drop partition q2_2005;
alter table order_items drop partition q2_2005
*
ERROR at line 1:
ORA-14255: table is not partitioned by Range, List, Composite Range or
Composite List method

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

使用道具 举报

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

本版积分规则

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

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

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

© 2001-2020

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