问题描述
嗨,团队,
我们有一个分区表,其中使用范围和间隔分区创建了1-1周分区。
定义了第一个分区名称,但其余所有分区都在动态创建 (由于间隔) 并具有系统生成的分区名称。
我想删除最后2周的分区,但在间隔分区的情况下,系统生成的名称没有任何共同点。如何找出要删除的正确分区名称?
此外,我想在一个动态脚本中删除这个分区,这样我只提供一个table_name,它会自动找出该表的最后2周分区并删除它。
无论我提供的表名是什么,脚本都应该删除该表的最后2周分区。
这怎么可能呢?
我们有一个分区表,其中使用范围和间隔分区创建了1-1周分区。
定义了第一个分区名称,但其余所有分区都在动态创建 (由于间隔) 并具有系统生成的分区名称。
我想删除最后2周的分区,但在间隔分区的情况下,系统生成的名称没有任何共同点。如何找出要删除的正确分区名称?
此外,我想在一个动态脚本中删除这个分区,这样我只提供一个table_name,它会自动找出该表的最后2周分区并删除它。
无论我提供的表名是什么,脚本都应该删除该表的最后2周分区。
这怎么可能呢?
专家解答
* _ TAB_PARTITIONS中的PARTITION_POSITION按high_value (从最低到最高) 对分区进行排序。从一开始。
因此,如果要删除最旧的分区,则可以查询此分区以获取分区名称。然后将此传递给一些动态SQL以将其删除。
下面是一个 (非动态的) 例子:
因此,如果要删除最旧的分区,则可以查询此分区以获取分区名称。然后将此传递给一些动态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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




