代码之家  ›  专栏  ›  技术社区  ›  Kevin Babcock

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

  •  2
  • Kevin Babcock  · 技术社区  · 15 年前

    我发现在特定表上使用的分区会损害查询性能,并希望从表中删除这些分区。有简单的方法吗?有问题的表有64个分区。根据初步调查,我提出了以下选择。有更好的方法吗?

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

    思想?

    1 回复  |  直到 15 年前
        1
  •  3
  •   APC    15 年前

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

    1. 创建新表作为select*from 旧桌子
    2. 在新表上生成索引 (*)
    3. 将旧表重命名为 不同的
    4. 将新表重命名为旧表名
    5. 从中切换任何外键约束 旧桌子到新桌子。同时转让任何赠款、同义词等。
    6. 慢慢放下旧桌子

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

    这种方法的优点是它可以最小化停机时间(基本上是步骤3、4和5)。