在 Oracle 中使用间隔分区对现有 table 进行分区
Partition existing table using interval partitioning in Oracle
我想使用间隔分区和列表子分区对 oracle 12 中现有的 table 进行分区。
我找到了一些关于如何在范围内进行后续分区的信息,但没有使用间隔分区。
我想告诉数据库第一个分区及其具有的值(日期),他将为 table.
中的所有数据集自动创建其余部分
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)
)
);
这样可以自动创建间隔分区吗?我无法在任何地方找到任何信息。如果是,我在这里做错了什么?它说我缺少子分区关键字。
您必须像这样使用 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')
);
您可以更改现有 table 上的子分区模板,请参阅 Modifying a Subpartition Template
但是,如果您想更改分区,则必须使用 DBMS_REDEFINITION 包。
我想使用间隔分区和列表子分区对 oracle 12 中现有的 table 进行分区。 我找到了一些关于如何在范围内进行后续分区的信息,但没有使用间隔分区。 我想告诉数据库第一个分区及其具有的值(日期),他将为 table.
中的所有数据集自动创建其余部分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)
)
);
这样可以自动创建间隔分区吗?我无法在任何地方找到任何信息。如果是,我在这里做错了什么?它说我缺少子分区关键字。
您必须像这样使用 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')
);
您可以更改现有 table 上的子分区模板,请参阅 Modifying a Subpartition Template
但是,如果您想更改分区,则必须使用 DBMS_REDEFINITION 包。