数据库LDY用户下,状态非VALID的索引有2种,一种是状态为N/A,一种状态为UNUSABLE。
select owner,index_name,table_name,status,partitioned from dba_indexes where owner='LDY' and status not in 'VALID';
OWNER INDEX_NAME TABLE_NAME STATUS PARTITIONED
----- ----------------------------- ---------------------- ---------- ------------
LDY T_MON_IND T_MON_PART N/A YES
LDY SKEW_ID_IND ZHSY_TEST_SKEW N/A YES
LDY PAR_PEPO_IND PAR_PEPO N/A YES
LDY INX_PRODUCT_OFFER_INSTANCE_1 PRODUCT_OFFER_INSTANCE UNUSABLE NO
状态为UNUSABLE表示索引无效。
状态为N/A表示这个索引是一个分区索引。
可以通过DBA_IND_PARTITIONS数据字典视图查到该索引的分区内容,例如查看索引SKEW_ID_IND:
select PARTITION_NAME,STATUS from DBA_IND_PARTITIONS where INDEX_NAME='SKEW_ID_IND';
PARTITION_NAME STATUS
-------------- --------
P123 USABLE
P2 USABLE
P414 USABLE
P501 USABLE
P_OTHER USABLE
对于对存在UNUSABLE状态的索引的表进行分析时,会有如下错误,这是由于上面的索引无效导致的。
SQL> begin
2 dbms_stats.GATHER_TABLE_STATS(
3 ownname=>'LDY',
4 tabname=>'PRODUCT_OFFER_INSTANCE',
5 estimate_percent=>10,
6 cascade=>true
7 );
8 end;
9 /
begin
*
第 1 行出现错误:
ORA-20000: index "LDY"."INX_PRODUCT_OFFER_INSTANCE_1"
or partition of such index is in unusable state
ORA-06512: 在 "SYS.DBMS_STATS", line 13056
ORA-06512: 在 "SYS.DBMS_STATS", line 13076
ORA-06512: 在 line 2
rebuild索引之后,再次分析,就没有问题了。
SQL> ALTER INDEX LDY.INX_PRODUCT_OFFER_INSTANCE_1 REBUILD;
索引已更改。
SQL> begin
2 dbms_stats.GATHER_TABLE_STATS(
3 ownname=>'LDY',
4 tabname=>'PRODUCT_OFFER_INSTANCE',
5 estimate_percent=>10,
6 cascade=>true
7 );
8 end;
9 /
PL/SQL 过程已成功完成。
阅读(9953) | 评论(0) | 转发(0) |