如何将分区表与数据和索引一起更改为oracle中的非分区表?

时间:2017-09-18 10:41:37

标签: database oracle

我是通过以下方式完成的:

  1. 带有选项PARTITION_OPTIONS=merge的Oracle数据泵(expdp / impdp)实用程序的帮助。
  2. ALTER TABLE t1 MERGE PARTITIONS p01 TO p04 INTO p0;这里我合并成功,但所有存储在一个我不想要的分区。)
  3. 创建表的临时副本以及数据,删除原始表并将临时表名重命名为原始表。 (这种方法可能不适合大数据
  4. 但是这里我只想知道,有没有办法从SQL>使用oneliner命令/语句提示实现这一点?因此,数据可以存储在表/表空间中而不需要任何分区。

1 个答案:

答案 0 :(得分:0)

第一个解决方案:

进行分区交换,假设你有以下分区表:

create table tpart (
  x int,
 y int
) partition by range (x) (
  partition p0 values less than (10),
 partition p1 values less than (20)
);

创建一个具有相同列的新非分区表:

create table new_table(
  x int,
 y int
);

然后用新表交换分区:

alter table tpart exchange partition p0 with table new_table including indexes update indexes;
alter table tpart exchange partition p1 with table new_table including indexes update indexes;

第二个解决方案:

在目标模式中预先创建表,而不使用datapump进行分区和导入数据:table_exists_action = append