我有现有的表有10年的数据(我已经采取转储).
我想在表中的一个日期键列上对现有表进行Range分区.
我看到的大多数示例都是使用CREATE TABLE..PARTITION BY RANGE …添加新分区.但我的桌子是现有的桌子.
我假设我需要一些ALTER语句.
ALTER TABLE TABLE_NAME PARTITION BY RANGE(CREATED_DATE) PARTITION JAN16 VALUES LESS THAN (01-02-2016),PARTITION FEB16 VALUES LESS THAN (01-03-2016) AND GREATER THAN(31-01-2016),//OR? PARTITION MAR16 VALUES BETWEEN (01-03-2016) AND (31-03-2016),//OR?
两个问题..
>我是否需要Alter语句来添加分区机制或需要使用create语句?
>保持每个分区只有一个MONTH数据的正确语法是什么.
解决方法
因为你的表没有分区你有两个选择:
>导出数据,删除表,创建新的patitioned表,导入数据.
>使用split然后交换分区方法. https://oracle-base.com/articles/misc/partitioning-an-existing-table-using-exchange-partition
此外,如果您希望每月新分区,请阅读SET INTERVAL.例如:
CREATE TABLE tst (col_date DATE) PARTITION BY RANGE (col_date) INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) (PARTITION col_date_min VALUES LESS THAN (TO_DATE('2010-01-01','YYYY-MM-DD')));