代码之家  ›  专栏  ›  技术社区  ›  Giffyguy

在Oracle中从头开始重新分区表

  •  0
  • Giffyguy  · 技术社区  · 4 年前

    如何在Oracle DB中重新划分现有表?

    例如,在MySQL中,您可以简单地使用 ALTER TABLE 要从头重新定义分区,请执行以下操作:

    /* MySQL code, not Oracle DB */
    ALTER TABLE t1
        PARTITION BY HASH(id)
        PARTITIONS 8;
    

    我在google上搜索了一段时间,但在Oracle中找不到提供此功能的任何东西。

    但它必须以某种方式成为可能,因为它是持续分区管理的基本功能。

    在我的例子中,我正在构建一个历史快照表,按快照日期范围进行分区。
    每天,我都需要为新的一天添加一个分区,但也需要合并旧的快照分区,因为我们只保留以前季度/年的每月快照。
    从头重新定义整个分区配置可以使这一点非常直接,而且我认为这样的功能在任何顶级数据库产品中都是可用的。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Kirill Leontev    4 年前

    这里有两个独立的任务:

    1. 更改现有表的分区(非分区-gt;哈希分区,哈希分区-gt;范围分区等),这就是您的 alter table 声明正在执行。不知道它是如何在MySQL的框架下实现的,但是在Oracle中,无论好坏,使用一个 更改表 . 相反,您有两个选项:a)无聊,创建一个新的分区表,在那里复制数据,并交换表,b)使用 DBMS_REDEFINITION 包,实质上是Oracle试图在单个调用中包装(a)。
    2. 正在进行的分区管理,即添加、移动、重命名、拆分和合并 已经 以某种方式分割。这是完全支持 更改表 . 查看ALTER表 reference (在合并示例中向下滚动)。