我在下一个脚本中有一个现有的表:
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
答案 0 :(得分:1)
您可以使用以下命令将范围分区表更改为区间分区表:
ALTER TABLE X SET INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'));
您可以使用以下命令更改回范围分区表:
ALTER TABLE X SET INTERVAL();
如果您的分区始终均匀创建(在相同的时间段内),则间隔分区始终是范围分区的更好选择。
命令不是资源密集型的,因为您不操作段和数据,如果表中插入的新数据不适合任何现有分区中的分区键,您只需告诉Oracle开始或停止创建新分区