创建每日Oracle分区

时间:2019-02-22 12:58:57

标签: sql oracle partitioning

每天为表创建oracle分区。

ALTER TABLE TAB_123 ADD PARTITION PART_9999 VALUES LESS THAN  ('0001') TABLESPACE TS_1

在这里我得到了错误,因为值减小为0001作为下边界。

2 个答案:

答案 0 :(得分:2)

您可以让Oracle使用PARTITION BY RANGE选项自动创建分区。

示例DDL,假设分区键为列my_date_column

create table TAB_123 
    (  ... ) 
    partition by range(my_date_column) interval(numtoyminterval(1,'day'))
    ( partition p_first values less than (to_date('2010-01-01', 'yyyy-mm-dd')) tablespace ts_1)
;

完成此设置后,如果需要,Oracle将在将数据插入表中时动态创建一个分区。如上所述,创建默认分区通常也是一个好主意。

答案 1 :(得分:1)

此命名约定(年份的最后一位数字加上日期号)将不支持保存超过十年的数据。也许您认为这无关紧要,但是我知道数据库已经进入了第二个十年。要乐观!

此外,该键对于查询几乎没有用。大多数针对分区表的查询都希望获得消除分区的好处。但这仅适用于查询使用与分区键相同的值的情况。开发人员确实不希望每次在表上编写选择内容时都将日期转换为YDDD格式。

所以。使用实际日期定义分区键,从而定义范围。也可以用来命名分区(如果有那么重要的话)。

ALTER TABLE TAB_123 
ADD PARTITION P20200101 VALUES LESS THAN  (date '2020-01-02') TABLESPACE TS_1
/

请注意,该范围的定义少于第二天。否则,分区名称的日期将与实际分区中记录的日期不一致。