代码之家  ›  专栏  ›  技术社区  ›  Nathan Feger

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

  •  0
  • Nathan Feger  · 技术社区  · 15 年前

    我刚刚遇到oracle9数据库崩溃,留下了几个.trc文件。其中一些指定了不正常的索引,我删除并读取了这些索引。

    ANALYZE TABLE TABLESPACE.TABLE VALIDATE STRUCTURE CASCADE;
    

    这将创建一个.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 回复  |  直到 15 年前
        1
  •  4
  •   Thomas Jones-Low    15 年前

    错误表明您的索引(可能不是您认为的索引)仍然不好。

    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#>
    

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

        2
  •  1
  •   Stephen ODonnell    15 年前