25.11.2020 15:03
OlegON
 
Достаточно часто в нищебродских условиях база перезагружается во время работы с данными.
Если это ее до конца не убивает, то иногда появляются рассогласования данных таблиц и индексов.
То есть появляются ошибки 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 (ownertable_namenot 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 loopendendend loopend
Извините, форматирование не мое...

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