暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 用时间戳列按范围划分

ASKTOM 2019-11-13
338

问题描述

嗨,汤姆,

有以下用例。


DROP TABLE gaga1;

CREATE TABLE gaga1 (abc TIMESTAMP)
PARTITION BY RANGE (abc)INTERVAL ( NUMTODSINTERVAL (1, 'DAY') )( PARTITION OLD_DATA VALUES LESS THAN (TIMESTAMP '2015-01-01 00:00:00.000000'));


INSERT INTO gaga1 select to_timestamp('31/12/9999 23:59:59.000000','DD/MM/YYYY HH24:MI:SS.FF') from dual ;


并得到错误

ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions


因此,甲骨文似乎试图创建所有分区,直到宇宙结束。
有什么想法如何防止这种情况吗?

因此,在许多情况下,“31/12/9999 23:59:59.000000” 被标记为当前的valid_unt。
谢谢
亨德里克


专家解答

我希望宇宙能持续一个bit超过另外8000年;)

在间隔分区表中插入新的分区键值时,数据库需要为从该值到当前较低值的所有分区 “腾出空间”。

在这种情况下,这是:

select date'9999-12-31' - date'2015-01-01' days
from   dual;

DAYS      
  2,916,460 


近300万个分区。分区数上限的三倍左右 (2 ** 20 ~ 100万)!

一些解决方法:

Move the lower or upper bounds

我猜你不能比2015年1月1日更早移动下限。所以你需要把你的 “宇宙的尽头” 移得更近,到4,000年左右!

无论如何,请注意,您不能将9999年12月31日的值用于 “结束”。

因为如果这样做,数据库需要将最后一个分区的上限设置为1月1日10,000。Oracle数据库中不可能的日期!

Change the granularity

而不是每日分区,你使用每周 (7天) 你有足够的空间来存储所有你想要的日期:

CREATE TABLE gaga1 (abc TIMESTAMP)
  PARTITION BY RANGE (abc) 
  INTERVAL ( NUMTODSINTERVAL (7, 'DAY') ) ( 
    PARTITION OLD_DATA VALUES LESS THAN (TIMESTAMP '2015-01-01 00:00:00.000000')
  );

INSERT INTO gaga1 select to_timestamp('29/12/9999 23:59:59.000000','DD/MM/YYYY HH24:MI:SS.FF') from dual;

SELECT COUNT(*) FROM gaga1;

COUNT(*)   
          1 


不过请注意,这里的最大值移回9999年12月29日。

Change the granularity & subpartition

如果你must有每日分区,你可以按月/周/...然后按天分区。

当前不支持间隔子分区。相反,您可以:

-添加一个虚拟列,从日期中提取日期编号
-这个VC的次分区
-定义一个子分区模板,该模板为顶层粒度的每一天创建一个子分区

例如:

CREATE TABLE gaga1 (
  abc TIMESTAMP,
  abc_day INT as (extract (day from abc) )
) PARTITION BY RANGE (abc) 
  INTERVAL ( INTERVAL '1' MONTH )
  SUBPARTITION BY LIST ( abc_day ) 
  SUBPARTITION TEMPLATE (
    subpartition sp1 values ( 1 ),
    subpartition sp2 values ( 2 )
    -- etc.
  )  ( 
    PARTITION OLD_DATA VALUES LESS THAN (TIMESTAMP '2015-01-01 00:00:00.000000')
  );

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论