【问题标题】:Partition existing table using interval partitioning in Oracle在 Oracle 中使用间隔分区对现有表进行分区
【发布时间】:2019-01-10 12:12:04
【问题描述】:

我想使用间隔分区和列出子分区对 oracle 12 中的现有表进行分区。 我找到了一些关于如何在范围内进行后续分区的信息,但不使用间隔分区。 我想告诉数据库第一个分区及其具有的值(日期),他将为表中的所有数据集自动创建其余部分。

ALTER TABLE TEST_TABLE MODIFY
 PARTITION BY RANGE(TESTDATE) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) 
 SUBPARTITION BY LIST(COMPANY_NR) (
 PARTITION p1 VALUES LESS THAN (TO_DATE('01.01.2018 00:00:00', 'DD.MM.YYYY HH24:MI:SS'))
 (
    SUBPARTITION P_1 VALUES(1),
    SUBPARTITION P_2 VALUES(2)
  )
 );

这样可以自动创建间隔分区吗?我在任何地方都找不到任何信息。如果是的话,我在这里做错了什么?它说我缺少子分区关键字。

【问题讨论】:

    标签: database oracle partitioning


    【解决方案1】:

    您必须像这样使用 SUBPARTITION TEMPLATE:

    CREATE TABLE TEST_TABLE (...)
        PARTITION BY RANGE (TESTDATE) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) 
        SUBPARTITION BY LIST (COMPANY_NR)
        SUBPARTITION TEMPLATE 
        (
            SUBPARTITION P_1 VALUES (1),
            SUBPARTITION P_2 VALUES (2)
            SUBPARTITION P_others VALUES (DEFAULT)
        )
        (
            PARTITION p1 VALUES LESS THAN (DATE '2018-01-01')
        );
    

    您可以更改现有表上的子分区模板,请参阅Modifying a Subpartition Template

    但是,如果您想更改分区,则必须使用 DBMS_REDEFINITION 包。

    【讨论】:

    • 谢谢!你拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多