25.11.2020 15:03
Достаточно часто в нищебродских условиях база перезагружается во время работы с данными.
Если это ее до конца не убивает, то иногда появляются рассогласования данных таблиц и индексов.
То есть появляются ошибки 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; 
Извините, форматирование не мое...
Часовой пояс GMT +3, время: 20:44.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.