В этом посте поднимался вопрос возможности получения данных и поврежденной таблицы минуя испорченный блок. Здесь рассмотрим возможность получения данных таблицы непосредственно из испорченного блока.
Эта возможность становится реальной, если на все колонки таблицы существует индекс. Точнее – можно получить из индексных сегментов информацию, хранящуюся в них, не смотря на то, что соответствующие блоки таблицы повреждены. далее
В продолжение темы .
Индекс на основе B* - дерева состоит из узловых и листовых блоков. Листовые блоки образуют двусвязный список. То есть блоки индекса последовательно связаны между собой ссылками. Но это совершенно не значит, что в сегменте индекса они размещены упорядочено. Вероятнее всего оракл их кладет туда в произвольном порядке. далее
Появился у меня в базе один битый блок: ORA-01578: Oracle data block corrupted (file ..., block ...). По указанному номеру файла и номеру блока запросом далее
На основном сервере создали еще один файл данных для существующего табличного пространства. Однако как оказалось на standby сервере был установлен параметр инициализации STANDBY_FILE_MANAGEMENT в значение MANUAL. Поэтому на стэндбае файл данных не был создан автоматически. В алерте получили следующее сообщение: далее
Oracle в индексах на основе B* - дерева не содержит неопределенных ключей. То есть если в таблице есть запись у которой по всем ключам индекса стоит NULL, то индекс соответствующей записи не имеет.
Хорошо это или плохо? далее
Как известно из документации, индекс на основе B* - дерева не содержит неопределенных значений. То есть, если таблица содержит записи, у которых все ключи индекса имеют значение NULL, то такие записи в индекс не попадают. Если хотя бы одно значение ключа не является NULL, такая запись попадает в индекс. Найдем простейшее доказательство этого утверждения. далее
Как минимум есть три варианта: SKIP_CORRUPT_BLOCKS, ROWID Range Scans и PL/SQL скрипт. Сейчас понемногу о каждом.
далее
Когда встречается такое повреждение блока данных базы Oracle, первым делом определяемся с именем и типом сегмента, которому принадлежит поврежденный блок. Чаще всего блок может принадлежать либо табличному, либо индексному сегменту. далее
INDEX RANGE SCAN - просмотр диапазона по индексу. Как оракл его выполняет? Для индекса на основе B* - дерева листовые блоки образуют двухсвязный список. Такая организация листовых блоков индекса при поиске позволяет не просматривать каждый раз всю индексную структуру сверху вниз, а достаточно спустившись один раз к необходимому начальному листовому блоку дальше двигаться по порядку только по листовым блокам. далее
Если вы уже решили, что индекс нужно перепаковать, то есть как минимум три варианта как это можно сделать:
alter index table1_index1 coalesce;
alter index table1_index1 rebuild;
alter index table1_iindex1 rebuild online;
Взвесим все ЗА и ПРОТИВ для каждой команды. далее