我有现有的表,有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数据的正确语法是什么。
答案 0 :(得分:2)
如果你的桌子没有分区,你有两个选择:
另外,如果您希望每月新分区,请阅读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')));
答案 1 :(得分:2)
如果您使用的是Oracle 12c Release 2
,则可以使用单ALTER
将非分区表转换为分区表(这是单行程):
CREATE TABLE my_tab ( a NUMBER(38,0), b NUMBER(38,0));
ALTER TABLE MY_TAB MODIFY PARTITION BY RANGE (a) INTERVAL (1000) (
PARTITION p1 VALUES LESS THAN (1000)) ONLINE;
您也可以转换索引,添加:
update indexes (index_name [local/global]);