据我所知,索引可以是VALID、INVALID、UNASABLE和N/A状态。对于子分区索引,我看到的状态是USABLE而不是VALID。我在任何地方都找不到这种状态的原因。请让我了解这种状态背后的原因。我创建了一个子分区表。创建了本地索引。已查看所有ind表中的索引状态。都有N/A。只有all_ind_subpartitions表具有USABLE状态。
4smxwvx51#
这只是术语上的差异。USABLE = VALID。出于某种疯狂的原因,在分区段级别使用了与索引级别不同的术语。N/A意味着索引是分区的,因此它不能表示更高全局级别的状态,因为它可能是可用和不可用的混合。因此,您必须查看段级别(对于复合分区索引,可以是dba_ind_partitions和/或dba_ind_subpartitions)视图,以查看实际状态。以下是这些状态在Oracle视图定义中的来源:
USABLE
VALID
N/A
dba_ind_partitions
dba_ind_subpartitions
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_subpartitions或dba_ind_partitions(如果不是复合分区),并查找任何具有不可用状态的行。重建任何无法使用的段,以将索引恢复为可用状态。
INVALID
UNUSABLE
1条答案
按热度按时间4smxwvx51#
这只是术语上的差异。
USABLE
=VALID
。出于某种疯狂的原因,在分区段级别使用了与索引级别不同的术语。N/A
意味着索引是分区的,因此它不能表示更高全局级别的状态,因为它可能是可用和不可用的混合。因此,您必须查看段级别(对于复合分区索引,可以是dba_ind_partitions
和/或dba_ind_subpartitions
)视图,以查看实际状态。以下是这些状态在Oracle视图定义中的来源:
DBA_INDEXES:
DBA_IND_PARTITIONS:
DBA_IND_SUBPARTITONS:
正如我们所看到的,
VALID
只是USABLE
的同义词。任何地方都没有INVALID
状态。VALID
的翻转是UNUSABLE
。如果索引的 any 子分区不可用,则索引将不会被使用,除非查询被分区修剪。人们希望这可以反映在指数层面,但不幸的是甲骨文选择不这样做。因此,如果您试图找出索引未被使用的原因,请确保检查
dba_ind_subpartitions
或dba_ind_partitions
(如果不是复合分区),并查找任何具有不可用状态的行。重建任何无法使用的段,以将索引恢复为可用状态。