1. 说明
1-1. 分区可以存储于不同表空间
1-2. 如果分区键更新使得记录发生分区移动, 则会产生行迁移, 记录的 rowid 会改变. 如果表没开行移动功能会报错
1-3. 行迁移会更新这个表上的索引, 删除旧条目, 插入薪条目
1-4. 尽管行迁移内部是 delete 和 insert 的操作, 但去不会触发 delete 和 insert 的触发器, 会触发 update 触发器. 另外由于外键约束而不允许 delete 的子表也不会触发 delete 触发器
2. 分区类型
2-1. 列表分区 (list partitioning)
create table t (a number(1))
partition by list (a) (partition p1 values (1),partition p2 values (2));
2-2. 区间分区 (range partitioning)
create table t (a number)
partition by range (a) (partition p1 values less than (5),partition p2 values less than (maxvalue));
2-3. 散列分区 (hash partitioning), 分区个数应使用 2 的幂 (2,4,8,16...)
create table t (a number)
partition by hash (a) (partition p1 tablespace tbs01,partition p2 tablespace tbs02);
2-4. 组合分区 (区间-列表组合分区, 区间-散列组合分区)
# 可以指定分区个数 subpartition by list (col) subpartitions 2, 子分区的个数可以不同
# 在组合分区表中, 表和分区并没有分配段空间, 只有子分区才分配段空间, 创建组合分区表时要考虑子分区的存储
# 子分区若指定表空间, 则以子分区所指定表空间为准
# 子分区若未指定表空间, 则以其所在分区表空间为准
# 若其所在分区也未指定表空间, 则以该分区所在表指定的表空间为准
# 若表也未指定表空间, 则以该表所在用户默认表空间为准
2-4-1. 非模板模式
create table sales
(
dt date,
status varchar2(20)
)
partition by range(dt)
subpartition by list (status)
(
partition p1 values less than (to_date('2003-01-01','yyyy-mm-dd')) tablespace p1_ts
(
subpartition p11 values ('active') tablespace p1_ts1,
subpartition p12 values ('inactive') tablespace p1_ts2
),
partition p2 values less than (to_date('2003-03-01','yyyy-mm-dd')) tablespace p2_ts
(
subpartition p21 values ('active') tablespace p2_ts1,
subpartition p22 values ('inactive') tablespace p2_ts2
)
);
2-4-2. 模板模式
create or replace table sales
(
dt date,
status varchar2(20)
)
partition by range(dt)
subpartition by list (status)
subpartition template
(
subpartition sub1 values ('active') tablespace sub1_ts,
subpartition sub2 values ('inactive') tablespace sub2_ts
)
(
partition p1 values less than (to_date('2003-01-01','yyyy-mm-dd')) tablespace p1_ts,
partition p2 values less than (to_date('2003-03-01','yyyy-mm-dd')) tablespace p2_ts
)
0 件のコメント:
コメントを投稿