oracle 子分区索引状态为可用

ghg1uchk  于 2023-05-22  发布在  Oracle
关注(0)|答案(1)|浏览(243)

据我所知,索引可以是VALID、INVALID、UNASABLE和N/A状态。对于子分区索引,我看到的状态是USABLE而不是VALID。我在任何地方都找不到这种状态的原因。请让我了解这种状态背后的原因。
我创建了一个子分区表。创建了本地索引。已查看所有ind表中的索引状态。都有N/A。只有all_ind_subpartitions表具有USABLE状态。

4smxwvx5

4smxwvx51#

这只是术语上的差异。USABLE = VALID。出于某种疯狂的原因,在分区段级别使用了与索引级别不同的术语。N/A意味着索引是分区的,因此它不能表示更高全局级别的状态,因为它可能是可用和不可用的混合。因此,您必须查看段级别(对于复合分区索引,可以是dba_ind_partitions和/或dba_ind_subpartitions)视图,以查看实际状态。
以下是这些状态在Oracle视图定义中的来源:

DBA_INDEXES:

decode(bitand(i.property, 2), 2,
               decode(i.type#, 9, decode(bitand(i.flags, 8),
                                    8, 'INPROGRS', 'VALID'), 'N/A'),
                 decode(bitand(i.flags, 1), 1, 'UNUSABLE',
                        decode(bitand(i.flags, 8), 8, 'INPROGRS',
                                                        'VALID'))),

DBA_IND_PARTITIONS:

decode(bitand(ip.flags, 1), 1, 'UNUSABLE', 'USABLE'), ts.name,

DBA_IND_SUBPARTITONS:

decode(bitand(isp.flags, 1), 1, 'UNUSABLE', 'USABLE'), ts.name,

正如我们所看到的,VALID只是USABLE的同义词。任何地方都没有INVALID状态。VALID的翻转是UNUSABLE
如果索引的 any 子分区不可用,则索引将不会被使用,除非查询被分区修剪。人们希望这可以反映在指数层面,但不幸的是甲骨文选择不这样做。因此,如果您试图找出索引未被使用的原因,请确保检查dba_ind_subpartitionsdba_ind_partitions(如果不是复合分区),并查找任何具有不可用状态的行。重建任何无法使用的段,以将索引恢复为可用状态。

相关问题