Oracle19c 普通表转分区表

1 单表转分区表说明

在Oracle 10g的官方手册里有提到,当单表的大小超过2G的时候,就建议使用分区表。 当然这个数字在在之后版本的官方文档中删除了。


在10g 和 11g中,单表转分区表,我们有四种方法:

  1. Export/import method(导入导出)
  2. Insert with a subquery method(插入子查询的方法)
  3. Partition exchange method(交换分区法)
  4. DBMS_REDEFINITION(在线重定义)

在Oracle 12.2 版本之后,Oracle 支持直接通过ALTER TABLE .. MODIFY转换非分区表为分区表。

关于Oracle 12 架构的版本区别和特性,可以参考我之前的博客:

从生命周期的角度来谈谈Oracle 软件的版本(12c/18c/19c/20c/21c)问题
https://www.cndba.cn/dave/article/107944

Oracle 12.2 家族的补丁 RU 和 RUR 说明
https://www.cndba.cn/dave/article/4063

《Oracle 18c 必须掌握的新特性》
https://www.cndba.cn/dave/article/3453


官网对VLDB的说明可以参考:

https://docs.oracle.com/en/database/oracle/oracle-database/19/vldbg/index.html

当然,在Oracle 12.2 家族的架构下,还是支持在线重定义的,只是补充了在直接MODIFY 的方法, 关于这两种方法的说明,可以参考官网:

4.6.1 Using Online Redefinition to Partition Collection Tables
https://docs.oracle.com/en/database/oracle/oracle-database/19/vldbg/evolve-nopartition-table.html#GUID-5C0F8D12-DDDF-42AB-B644-1880156832BC
4.6.2 Converting a Non-Partitioned Table to a Partitioned Table
https://docs.oracle.com/en/database/oracle/oracle-database/19/vldbg/evolve-nopartition-table.html#GUID-5FDB7D59-DD05-40E4-8AB4-AF82EA0D0FE5

2 操作示例

我们先看官网的示例demo:

ALTER TABLE employees_convert MODIFY PARTITION BY RANGE (employee_id) INTERVAL (100) ( PARTITION P1 VALUES LESS THAN (100), PARTITION P2 VALUES LESS THAN (500) ) ONLINE UPDATE INDEXES ( IDX1_SALARY LOCAL, IDX2_EMP_ID GLOBAL PARTITION BY RANGE (employee_id) ( PARTITION IP1 VALUES LESS THAN (MAXVALUE)) );