Как исправить несоответствие количества строк таблицы / индекса оракула - PullRequest
1 голос
/ 19 мая 2009

У меня только что произошел сбой базы данных 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 ]

4 голосов
/ 19 мая 2009

Ошибка говорит о том, что ваши индексы (возможно, не те, о которых вы думали) все еще плохие.

По вашей ссылке, если вы выполните запрос через 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 голос
/ 19 мая 2009

Если честно, с такой ошибкой я бы порекомендовал открыть SR с Oracle - вы хотите убедиться, что не потеряете свои данные!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...