暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle将一个普通表改造成分区表有哪几种方法

刘旭 2020-03-04
3012

1、通过 Export/import 方法

这种方法的实现是先 export 一个非分区表,创建一个新的分区表,然后 import 数据到新创建的分区表中。

2、通过 Insert with a subquery 方法

  1. 创建一个分区表:
  2. 将原来非分区表中的数据通过子查询 insert 到新创建的分区表中:
  3. 如果您想让新建的分区表与原表名相同,那么 drop 掉原来的非分区表然后重命名新表:

3、通过 Partition Exchange 方法

ALTER TABLE EXCHANGE PARTITION 可以通过交换数据和索引 segment 来将一个分区(或子分区)转换成一个非分区表,也可以将一个非分区表转换成一个分区表的分区(或子分区)。 除了需要更新索引以外,ALTER TABLE … EXCHANGE PARTITION 命令是一个字典操作不需要数据移动。更多关于此方法的信息参见 Oracle 联机文档(比如 11.2)和 Note 198120.1。
此方法简要步骤如下:

  1. 根据所需的分区来创建新的分区表
  2. 保持需要交换的非分区表与分区表的分区有相同的结构,并且确保您需要交换的非分区表具有您想要交换的内容
  3. 执行:Alter table exchange partition partition_name with table exchange table

注意在交换过程中,所有交换的数据必须满足分区表的分区定义,否则如下错误将抛出:ORA-14099: all rows in table do not qualify for specified partition.
这是因为默认情况下分区交换是有校验的。

4、通过 DBMS_REDEFINITION 方法(在线重定义)

详情参见:

Note 472449.1 How To Partition Existing Table Using DBMS_Redefinition
Note 1481558.1 DBMS_REDEFINITION: Case Study for a Large Non-Partition Table to a Partition Table with Online Transactions occuring
Note 177407.1 How to Re-Organize a Table Online

5、MODIFY clause added to the ALTER TABLE SQL Statement. (From 12.2)

从 12.2开始,可以使用 Alter Table <table_name> MODIFY 把非分区表转换成分区表。更多详情请参考
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/vldbg/evolve-nopartition-table.html#GUID-5FDB7D59-DD05-40E4-8AB4-AF82EA0D0FE5

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论