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

Oracle 动态删除最旧间隔分区

ASKTOM 2019-08-12
533

问题描述

嗨,团队,

我们有一个分区表,其中使用范围和间隔分区创建了1-1周分区。
定义了第一个分区名称,但其余所有分区都在动态创建 (由于间隔) 并具有系统生成的分区名称。


我想删除最后2周的分区,但在间隔分区的情况下,系统生成的名称没有任何共同点。如何找出要删除的正确分区名称?


此外,我想在一个动态脚本中删除这个分区,这样我只提供一个table_name,它会自动找出该表的最后2周分区并删除它。

无论我提供的表名是什么,脚本都应该删除该表的最后2周分区。

这怎么可能呢?



专家解答

* _ TAB_PARTITIONS中的PARTITION_POSITION按high_value (从最低到最高) 对分区进行排序。从一开始。

因此,如果要删除最旧的分区,则可以查询此分区以获取分区名称。然后将此传递给一些动态SQL以将其删除。

下面是一个 (非动态的) 例子:

create table t (
  c1 
) partition by range ( c1 ) 
  interval ( 2 ) (
    partition p0 values less than ( 1 ) 
  )
as
  select level c1 from dual
  connect by level <= 10;
  
select partition_name, high_value  
from   user_tab_partitions
where  table_name = 'T'
and    partition_position = 1;

PARTITION_NAME    HIGH_VALUE   
P0                1 

alter table t
  drop partition p0;
  
select partition_name, high_value 
from   user_tab_partitions
where  table_name = 'T'
and    partition_position = 1;

PARTITION_NAME    HIGH_VALUE   
SYS_P571          3    

alter table t
  drop partition SYS_P571;
  
select partition_name, high_value
from   user_tab_partitions
where  table_name = 'T'
and    partition_position = 1;

PARTITION_NAME    HIGH_VALUE   
SYS_P572          5  

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

评论