当分区范围低于基分区oracle时,截断分区不会抛出错误

ubbxdtey  于 2023-05-06  发布在  Oracle
关注(0)|答案(1)|浏览(155)

我有一个基于年和月分区的表(例如:202001)。假设最旧的可用数据是分区201304,最新的可用数据是202001。我观察到的是,当我们尝试截断分区202103时,我得到了分区不存在错误,这是预期的
ORA-02149:指定的分区不存在
但是当我尝试截断一个比最旧的分区更旧的分区时,比如201010,它不会抛出任何错误。Oracle只是简单地提到Partition truncated,即使分区不存在。为什么会这样?

k10s72fa

k10s72fa1#

你必须意识到Oracle range 分区是在条件less than上定义的,而不是在一个固定的模式上定义的。* 数据月份 *。
所以第一个分区 * 没有下限 *,因此您可以观察到下面示例中所示的预期行为(假设您的分区模式,但不建议以这种方式进行-〉使用DATE列和 interval 分区将是首选)

create table tab (
id int,
yyyymm varchar2(6)
)
PARTITION BY RANGE (yyyymm)
(
partition p201304 VALUES LESS THAN ('201305'),
partition p201305 VALUES LESS THAN ('201306'),
partition p201306 VALUES LESS THAN ('201307')
);


alter table tab drop partition for ('201309');
-- ORA-14702: The partition number is invalid or out-of-range

alter table tab drop partition for ('201305');
-- Table TAB altered. p201305 was dropped

alter table tab drop partition for ('201001');
-- Table TAB altered. partition P201304 was dropped

相关问题