2009-12-02 63 views
2

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

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

想法?

回答

2

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

  1. 创建新表的SELECT * FROM 旧表
  2. 新表 (*)
  3. 重命名旧表不同的东西
  4. 建立索引
  5. 重命名新表,旧表名
  6. 将旧表的所有外键约束从 切换到新表。另外传输任何补助,同义词等
  7. 删除旧表慢时

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

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

+0

工作很好。感谢您的建议! – 2009-12-04 14:12:06