如何更改PARTITIONS BY范围Oracle中的RANGE值

时间:2015-09-22 16:03:23

标签: oracle oracle11g partitioning

我在下一个脚本中有一个现有的表:

Log.v()

我需要的是更改分区范围以添加如下间隔:

create table sales6
        (
           sales_id    number,
           sales_dt    date
        )
        partition by range (sales_dt)

        (
           partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
        );

我知道正确的方法是在创建表时,但表已经存在且存储了大量记录。

有没有办法在Oracle 11g中实现这一目标?我试图改变表格,但由于00940而没有工作.00000 - "无效的ALTER命令"

希望你能帮助我。

PS:我已经在这两个链接中阅读了Oracle的整个文档而没有运气: https://docs.oracle.com/cd/E17952_01/refman-5.5-en/alter-table-partition-operations.html https://docs.oracle.com/cd/E17952_01/refman-5.1-en/partitioning-management-range-list.html

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令将范围分区表更改为区间分区表:

ALTER TABLE X SET INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'));

您可以使用以下命令更改回范围分区表:

ALTER TABLE X SET INTERVAL();

如果您的分区始终均匀创建(在相同的时间段内),则间隔分区始终是范围分区的更好选择。

命令不是资源密集型的,因为您不操作段和数据,如果表中插入的新数据不适合任何现有分区中的分区键,您只需告诉Oracle开始或停止创建新分区