如何从 Oracle 表中删除表分区?

Kev*_*ock 3 oracle partitioning oracle10g

我发现特定表上使用的分区会损害查询性能,并且希望从表中删除这些分区。是否有捷径可寻?该表有 64 个分区。根据一些初步调查,我提出了以下选项。有没有更好的办法?

  1. 将数据复制到另一个表中,删除所有分区,然后将数据复制回原始表中
  2. 将数据复制到另一个表中,删除原始表,然后重命名新表并重建索引
  3. 使用 MERGE PARTITION 将所有分区合并为一个分区

想法?

APC*_*APC 5

我个人认为选项 2 的变体听起来是最好的方法。

  1. 创建新表作为 select * from old table
  2. 在新表上建立索引(*)
  3. 将旧表重命名为不同的名称
  4. 将新表重命名为旧表名
  5. 将任何外键约束从旧表切换到新表。还可以转让任何赠款、同义词等。
  6. 缓慢删除旧表

(*) 非分区表可能需要与分区表不同的索引。如果您特别重视索引名称,则可以ALTER INDEX ... RENAME TO ...在步骤 6 之后使用语法。

这种方法的优点是可以最大限度地减少停机时间(基本上是步骤 3、4 和 5)。