设为首页收藏本站language 语言切换
查看: 1601|回复: 0
收起左侧

嘉为Oracle OCP 培训--Oracle11g分区新特性—引用分区(嘉为原创)

[复制链接]
发表于 2012-2-16 10:22:07 | 显示全部楼层 |阅读模式
嘉为Oracle OCP 培训--Oracle11g分区新特性—引用分区(嘉为原创)
到嘉为Canway主页了解更多
Oracle11g分区新特性—引用分区
    Oracle 11g分区有了好多新的特性,个人认为有革命意义的当数引用分区。
下面是设计分区方案过程中的一个典型问题:并非所有表都具有您需要根据其进行分区的列。假设您要创建一个销售系统,该系统包括两个简单的表(sales 和 customers):
create tablecustomers
(
cust_id number primarykey,
cust_namevarchar2(200),
rating varchar2(1)not null
)
partition by list(rating)
(
partition pAvalues ('A'),
partition pBvalues ('B')
);
sales 表的创建如下所示。它是customers 表的一个子表。
create table sales
(
sales_id numberprimary key,
cust_id number notnull,
sales_amt number,
constraintfk_sales_01
foreign key(cust_id)
referencescustomers
);
理想情况下,您希望用相同的方式对 sales 表和 customers 表分区:根据 rating 列进行列表分区。但有一个严重问题:sales 表没有名为 rating 的列!那么如何根据一个不存在的列进行分区呢?
在 Oracle 数据库 11g 中,您可以使用一个称为引用分区的新特性。下面的示例显示了如何将该特性应用于 sales 表:
create table sales
(
sales_id numberprimary key,
cust_id number notnull,
sales_amt number,
constraintfk_sales_01
foreign key(cust_id)
referencescustomers
)
partition byreference (fk_sales_01);
这段代码创建了与父表 customers 中相同的分区。注意,虽然没有名为 rating 的列,但仍根据该列对表进行了分区。partition by reference (fk_sales_01) 子句包括了分区定义中的外键名。该语句指示Oracle数据库 11g 确认通过父表(在该示例中为 customers)中使用的方案进行了分区。注意 cust_id 列的NOT NULL 约束;这是引用分区所必需的。
如果您检查 sales 表中分区的分区边界:
SQL> selectpartition_name, high_value
from user_tab_partitions
where table_name = 'SALES';
PARTITION_NAMEHIGH_VALUE
----------------------------------------------
PA
PB
高值为空,这意味着此处的边界派生自父表。分区的名称与父表中的名称相同。您可以通过查询
user_part_tables 视图来检查分区的类型。一个名为 ref_ptn_constraint_name 的特殊列显示了外键约束名称。
SQL> selecttable_name, partitioning_type, ref_ptn_constraint_name
from user_part_tables
where table_name in ('CUSTOMERS','SALES');
TABLE_NAME  PARTITION   REF_PTN_CONSTRAINT_NAME
--------------------------------------- --------------------------
CUSTOMERS   LIST
SALES        REFERENCE   FK_SALES_01
如果您希望按照父表分区的方式对子表进行分区,但没有相同的列,您又不想仅仅为了分区而引入这些列,此时引用分区将非常方便。而且,您不必针对每个子表显式声明一个很长的分区子句。

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

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-29 02:36 , Processed in 0.083564 second(s), 27 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

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