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)
);




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM