12c在线调整表为分区表
在以前的版本中,如果需要将一个非分区表变成分区表,一般是通过以下几种方式
- EXCHANGE PARTITION
- DBMS_REDEFINITION
- DATAPUMP
其中前两种属于在线的方式,操作起来相对繁琐,步骤也比较多。而到了12.2版本中,提供了一种更方便的办法,只需要一个命令即可在线完成这个操作。
新建一张非分区表
1 | drop table t1 purge; |
将t1表变更为分区表,通过ALTER TABLE XXX MODIFY
命令,默认是OFFLINE,如果指定ONLINE,则在modify的过程中表是可以允许DML操作的。
默认的offline
1 | sys@ORA12C> alter table t1 modify |
加上online在线并同时更新索引
1 | alter table t1 modify |
检查新生成的分区以及分区索引
1 | col table_name for a30 |
当使用UPDATE INDEXES
时,要注意以下信息
- 这个子句可以用来更改需要变更索引的分区状态和存储信息
- UPDATE INDEXES子句是可选项,无论是ONLINE还是OFFLINE都会对转换的索引进行维护
- 不能更改定义原始索引列表的列
- 如果所有索引都未指定表空间,则会默认应用以下表空间
- 转换后的本地索引与分区一样
- 转换后的全局索引与转换之前的非分区表全局索引表空间一样
- 如果没有指定
INDEX
子句,或者INDEX
子句未包含原非分区表中所有的索引,则转换后的未指定索引遵循以下原则全局分区索引保持不变,保持原始分区形态
无前缀的索引变成全局非分区索引
前缀表示分区字段包含在索引内,但是组成索引的字段并非分区键一个
位图索引变成本地分区索引,而不管它们是否有前缀
位图索引必须一直是本地分区索引
- 这个转换不适用含有域索引的表
12c在线调整表为分区表
https://www.xbdba.com/2019/03/13/12c-convert-nopartition-to-partition-table-online/