我刚刚遇到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
答案 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 - 您要确保不丢失数据!