【问题标题】:Creating a daily Oracle partition创建每日 Oracle 分区
【发布时间】:2019-02-22 12:58:57
【问题描述】:

为每天的表创建oracle分区。

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

在这里我收到错误,因为值减少为 0001 作为下限。

【问题讨论】:

  • 为什么不用INTERVAL分区,那么每天都会自动创建分区。

标签: sql oracle sql-insert partitioning date-arithmetic


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    所以。使用实际日期来定义分区键和范围。如果它很重要,也可以用于命名分区。

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2019-10-31
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多