Достаточно часто в нищебродских условиях база перезагружается во время работы с данными.
Если это ее до конца не убивает, то иногда появляются рассогласования данных таблиц и индексов.
То есть появляются ошибки ORA-08102 и ORA-01499
Нижеприведенный скрипт валидирует все таблицы и при любых ошибках валидации инвалидирует все индексы на таблице, их надо будет перестроить потом, либо дописать соответствующую строку в скрипт (я не стал заморачиваться, у меня это делает оптимизатор).
Для ленивых есть вариант с оптимизатором :
https://olegon.ru/showthread.php?p=359405#post359405
Скрипт все же для тех, кто понимает, что делает... В некоторых случаях повреждения таблицы могут быть спасены целым индексом.
SQL код:
begin for c in (
select
owner,
table_name
from
dba_tables
where
(
iot_type != 'IOT_OVERFLOW'
or iot_type is null
)
and temporary = 'N'
and (owner, table_name) not in (
select
owner,
table_name
from
dba_external_tables
)
) loop begin dbms_output.put_line(
'Check : ' || c.owner || '.' || c.table_name
); execute immediate 'analyze table ' || c.owner || '.' || c.table_name || ' validate structure cascade'; exception when others then begin for i in (
select
owner,
index_name
from
dba_indexes
where
owner = c.owner
and table_name = c.table_name
) loop dbms_output.put_line(
'Bad index : ' || i.owner || '.' || i.index_name
); execute immediate 'alter index ' || i.owner || '.' || i.index_name || ' unusable'; end loop; end; end; end loop; end;
Извините, форматирование не мое...