zoukankan      html  css  js  c++  java
  • Oracle子分区(sub partition)操作

    要重新定义大量分区表。

    首先看 SQL Reference 大致了解了 Oracle 的分区修改操作。Alter table 语句的alter_table_partitioning 子句可以分为以下几类:

    全局:modify_table_default_attrs
    分区:Modify, Move, Add, Coalesce, Drop, Rename, Truncate, Split, Merge, Exchange
    子分区:Set Template, Modify, Move, Drop, Rename, Truncate, Split, Merge, Exchange

        Move: 将分区、子分区移动到新的表空间。
        Coalesce: 只适用于 hash 分区的表。作用是减少一个 hash 分区;方法是将最后一个分区的数据分布到前面的分区中,再删除此分区。
        Merge: 将两个分区、子分区合并为一个新分区,并删除两个旧分区。Merge 可以合并 List 和相邻的 Range 分区,只能合并属于同一分区的 List 子分区。
        Exchange: 交换表分区。

    我要做的是添加 List 分区、List 子分区、修改子分区模板。

    1. 添加 List 分区

    如果表使用 List 分区,且创建了 Default 分区,则此表上无法执行 Add 分区操作,必须 Split 此表的 Default 分区。Alter table 语句提供了 split_table_partition 子句。此子句的功能是创建两个新分区(新建 Segment,可以指定新的物理属性),移动 partition 指定的分区的数据,满足 values 条件的放入 into 的第一个分区,其余的放入第二个分区,之后原分区。Oracle 将自动 Split Local Index,因此需要重建索引。

    下面的语句为表 A_CHECKBILL_MONTH 添加了一个分区 P_6230000,将原有 P_OTHERS 分区中 COMPANY_ID = 6230000 的数据存储到新分区 P_6230000 ,剩余数据存储到 P_OTHERS。

    alter table A_CHECKBILL_MONTH
    split partition P_OTHERS values (6230000) into (
    partition P_6230000,
    partition P_OTHERS
    )
    update indexes;


    2. 添加 List 子分区:

    Oracle 没有提供子分区 Add 操作,因此添加子分区必须使用 Split 操作。Alter table 语句提供了 split_table_subpartition 子句,此子句的功能是将一个 List 子分区 Split 为两个。原理跟 List 分区类似。

    下面的语句为表 A_BATCH_TURNDAYS 添加了一个子分区 P_6230000,将原有 P_OTHERS 分区中 COMPANY_ID = 6230000 的数据存储到新分区 P_6230000 ,剩余数据存储到 P_OTHERS。

    alter table A_BATCH_TURNDAYS
    split subpartition P_200401_SP_OTHERS values (6230000) into (
    subpartition P_200401_SP_6230000,
    subpartition P_200401_SP_OTHERS
    )
    update indexes;


    3. 修改子分区模板:

    Alter table 语句的 set_subpartition_template 子句,作用是重新定义(或新建、清除)复合分区表的 list 或 hash 子分区模板。执行 set_subpartition_template 操作后,表中已创建的子分区不受影响,本地、全局索引也不受影响。在此之后的分区操作(例如 add、merge 操作)将使用新的模板。

    以下语句更新表 A_CHECKBILL_DAY 的子分区模板

    alter table A_CHECKBILL_DAY
    set subpartition template (
    subpartition SP_2000000 values (2000000),
    subpartition SP_6280000 values (6280000),
    subpartition SP_6010000 values (6010000),
    subpartition SP_6020500 values (6020500),
    subpartition SP_6050000 values (6050000),
    subpartition SP_6070000 values (6070000),
    subpartition SP_6080400 values (6080400),
    subpartition SP_6090000 values (6090000),
    subpartition SP_6110000 values (6110000),
    subpartition SP_6170000 values (6170000),
    subpartition SP_6200000 values (6200000),
    subpartition SP_6300000 values (6300000),
    subpartition SP_6250000 values (6250000),
    subpartition SP_6130000 values (6130000),
    subpartition SP_6140000 values (6140000),
    subpartition SP_6160000 values (6160000),
    subpartition SP_6180000 values (6180000),
    subpartition SP_6230000 values (6230000),
    subpartition SP_OTHERS values (default)
    );
    



  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/pekkle/p/6568769.html
Copyright © 2011-2022 走看看