如何修复oracle表/索引行计数不匹配

时间:2009-05-19 16:01:50

标签: oracle

我刚刚遇到oracle9数据库崩溃,它给我留下了几个.trc文件。他们中的一些指定了不合格的索引,我放弃并读取这些索引。

然而,当我跑步时:

ANALYZE TABLE TABLESPACE.TABLE VALIDATE STRUCTURE CASCADE;

我仍然收到错误:ora_00900,sqlstate:4200

这将创建一个.trc文件:

Table/Index row count mismatch
table 1172 : index 1250, 0
Index root = tsn: 9 rdba: 0x0240390b

我该如何处理这些信息?

我找到了这个链接,但是我不确定如何使用它: http://www.freelists.org/post/oracle-l/Table-index-mismatch-trace-file,1

2 个答案:

答案 0 :(得分:4)

错误说您的索引(可能不是您认为的索引)仍然很糟糕。

从您的链接,如果您通过SQL * PLUS运行查询,它将要求输入rdba数字。输入错误消息“0x0240390b”中的值(无引号)。这将返回文件编号和块编号。

SELECT dbms_utility.data_block_address_file(
         to_number(trim(leading '0' from
replace('&&rdba','0x','')),'XXXXXXXX')
       ) AS rfile#,
       dbms_utility.data_block_address_block(
         to_number(trim(leading '0' from
replace('&&rdba','0x','')),'XXXXXXXX')
       ) AS block#
FROM dual;

接下来运行以下查询:

select owner, segment_name, segment_type 
from  dba_segments 
where header_file = <rfile#>
  and header_block = <block#>

这将为您提供要删除和重新创建的违规索引。

答案 1 :(得分:1)

老实说,如果出现这样的错误,我建议您使用Oracle打开SR - 您要确保不丢失数据!