小编Mol*_*yOQ的帖子

如何在定期进行分区清除的大型表上维护全局索引?

问题

我有一个haystack近 3 TB 的巨型表,按月份 ( date) 分区并按client. 我需要创建一个跨越所有客户端的全局索引,以方便按列查询needle。这很简单。

当月底最旧的表分区被删除时,问题就会出现。我无法承担每个月在 3 TB 表上重建全局索引的费用。haystack在任何给定时间,数据库中都只有最近四个月的分区。因此,当删除每月分区时,大约 25% 的表会被删除。

尝试的解决方案

我尝试在列上创建一个索引needle,该索引由 上的哈希进行全局分区needle。但这意味着当从表中删除旧月份分区时必须重建整个全局索引。不好。

date我还尝试在列( 、 )上创建索引needle,该索引按范围进行全局分区,date范围与表的每月分区相匹配。但同样,当从表中删除旧月份分区时,我仍然被迫更新整个全局索引 - 即使我的表和索引的分区相同(表的子分区除外)。

当然,我不能简单地创建本地分区索引。我需要分区是本地的,但没有子分区。据我所知,这是不可能的;对于索引上的本地分区选项来说,这是一个全有或全无的选择。

删除分区

为了完整起见,这里有一些我尝试过的在月底删除旧分区的选项......

alter table HAYSTACK drop partition P_MONTH update global indexes; 这花费的时间太长,因为它试图在删除期间维护全局索引。

alter table HAYSTACK drop partition P_MONTH;如果没有全局索引子句,我的全局索引的所有分区都会被标记为不可用。(这是可以理解的。)

alter index HAYSTACK_IDX drop partition P_MONTH;删除我的索引分区会使高值略高于已删除分区的分区失效。如果我现在继续删除表分区,我仍然需要重建整个全局索引。

我的问题

有没有办法可以清除旧表分区而不使全局索引分区失效或重建?本质上,我能否以某种方式告诉 Oracle 处理这些全局索引分区,就好像它们是本地索引分区一样,但不进行子分区?(遗憾的是,我的研究结果表明并非如此。)

或者...还有另一种(更好的?)方法来解决我的问题吗?

index oracle oracle-11g-r2 partitioning

5
推荐指数
1
解决办法
3358
查看次数

标签 统计

index ×1

oracle ×1

oracle-11g-r2 ×1

partitioning ×1