Oracle19c 普通表转分区表
1 单表转分区表说明
在Oracle 10g的官方手册里有提到,当单表的大小超过2G的时候,就建议使用分区表。 当然这个数字在在之后版本的官方文档中删除了。
在10g 和 11g中,单表转分区表,我们有四种方法:
- Export/import method(导入导出)
- Insert with a subquery method(插入子查询的方法)
- Partition exchange method(交换分区法)
- DBMS_REDEFINITION(在线重定义)
在Oracle 12.2 版本之后,Oracle 支持直接通过ALTER TABLE .. MODIFY
转换非分区表为分区表。
关于Oracle 12 架构的版本区别和特性,可以参考我之前的博客:
从生命周期的角度来谈谈Oracle 软件的版本(12c/18c/19c/20c/21c)问题
https://www.cndba.cn/dave/article/107944Oracle 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))
);