Как исправить поврежденные блоки индексов в табличном пространстве SYSAUX
У нас произошел сбой питания, который привел к повреждению файлов данных. Он был восстановлен из резервной копии RMAN, включая журналы, и все в порядке, БД работает.. кроме того, что я заметил это:
RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE FILESPERSET=10;
...snip..
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
2 FAILED 0 24312 139056 71820306
File Name: /u02/oradata/ORCL/datafile/o1_mf_sysaux_4kjcn4qg_.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 35222
Index 101 39306
Other 0 40216
Другие файлы данных все в порядке. Теперь вопрос в том, что делать с этими индексами? Я постараюсь (в нерабочее время) сделать 'изменить индекс... перестроить' для всех индексов в SYSAUX, но AFAIK, который не поможет, удаление и воссоздание индексов необходимо... но есть ли источник SQL для их воссоздания? Это Oracle 11.1.0.6 в Linux.
2 ответа
Есть две другие проверки на коррупцию, которые было бы целесообразно выполнить, особенно если проверка RMAN обнаружила проблемы:
а) dbverify
б) АНАЛИЗ ТАБЛИЦА. VALIDATE СТРУКТУРА КАСКАД [ОНЛАЙН]
И да, вам нужно будет воссоздать задействованные индексы, перестройка здесь не работает.
"есть ли источник SQL для их воссоздания" Вы можете использовать DBMS_METADATA.GET_DDL, чтобы получить / восстановить SQL для перестроения индексов. Запрос DBA_SEGMENTS скажет вам, какие индексы существуют в SYSAUX.