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

问题描述 投票:0回答:2

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

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

想法?

oracle oracle10g partitioning
2个回答
5
投票

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

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

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

ALTER INDEX ... RENAME TO ...
语法。

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


0
投票

对表进行分区可能会损害查询性能,但也可以提高性能...... 这取决于您的技术解决方案的设计,使用正确的索引、提示等...

如果您想从表中删除分区而不需要停机并使正在使用表的其他对象失效,您可以使用

dbms_redefinition
,它将在您配置命令时分析和移动索引。

© www.soinside.com 2019 - 2024. All rights reserved.