Контакты Поиск
15.02.2022 17:28
OlegON
 
В общем, если налетели на ORA-600 [25027], то это, скорее всего, рассогласование таблицы с индексом.
Первый аргумент после 25027 - это название табличного пространства, второй - RDBA. Можете искать, можете просто посмотреть в трейс и увидеть там запрос, на который ругается база. Соответственно табличке, на которую ругается, надо сделать проверку структуры, например
SQL код:
analyze table supermag.ffmaprep_ validate structure cascade
если не промахнулись, то сделайте все ее индексы сначала UNUSABLE, потом их перестройте. Никаких там REBULD до того, пока не скажете, что индекс дохлый.
В 12 версии и старше могут быть fake indexes, если запрос
SQL код:
select do.owner,do.object_name, do.object_type,sysind.flags
     from dba_objects 
do, sys.indsysind
     where 
do.object_id sysind.obj#
     
and bitand(sysind.flags,4096)=4096
что-то возвращает, то надо грохнуть связанные объекты, они и есть причина ошибки.
17.02.2022 12:15
Occul
 
Если analyze table работает слишком долго, можно воспользоваться следующим скриптом для проверки рассогласования каждого индекса

SQL код:
set autotrace on explain
set feedback 1


select 
/*+ full(t1) parallel */ sum(ora_hash(rowid))
from  <TABLE NAMEt1
where 
<INDEXED COLUMNis not null
minus
select 
/*+ index_ffs(t <INDEX NAME>) parallel */ sum(ora_hash(rowid))
from <TABLE NAMEt
where 
<INDEXED COLUMNis not null
SQL код:
create or replace procedure analyze_quick(owner_table varchar2name_table varchar2name_index varchar2 default null)
is
  s varchar2
(30000);
  
num_indexes number := 0;
  
sum_hash number;
begin
  
for i in (select a.ownera.index_nameb.column_name
               from dba_indexes a
dba_ind_columns b
               where a
.table_owner upper(owner_table)
                 and 
a.table_name  upper(name_table)
                 and (
a.index_name upper(name_index) or name_index is null)
                 and 
a.index_type not in (&#039;IOT - TOP'
                                       
,&#039;LOB'
                                       
,&#039;FUNCTION-BASED NORMAL'
                                       
,&#039;FUNCTION-BASED DOMAIN'
                                       
,&#039;CLUSTER')
                 
and a.owner b.index_owner
                 
and a.index_name b.index_name
                 
and a.table_name b.table_name
                 
and b.column_position 1loop
    num_indexes 
:= num_indexes+1;

 
    
:= &#039;select /*+ full(t1) parallel */ sum(ora_hash(rowid)) from ';
    
:= || owner_table || &#039;.' || name_table || ' t1 where ' || i.column_name ||' is not null MINUS ';
    
:= || &#039;select /*+ index_ffs(t '|| i.index_name||') */ sum(ora_hash(rowid)) from ';
    
:= || owner_table || &#039;.' || name_table || ' t where ' || i.column_name ||' is not null';

    
begin
      execute immediate s into sum_hash
;
      if 
sum_hash 0 then
         raise_application_error
(-20220,&#039;TABLE/INDEX MISMATCH detected!! Table: '
                                 
||upper(owner_table)||&#039;.'||upper(name_table)
                                 
||&#039; Index: '
                                 
||upper(i.index_name));
      
end if;
    
exception
      when no_data_found then null
;  -- no_data_found means that there is not inconsistency
    end
;
  
end loop;
  if 
num_indexes and name_index is not null then
     raise_application_error
(-20221,&#039;Check was not executed. Index '||upper(name_index)||' does not exist for table '||upper(name_table)|| ' or table does not exist');
  
elsif num_indexes 0 then
     raise_application_error
(-20222,&#039;Check was not executed. No INDEXES with index_type=NORMAL found for table '||upper(name_table)|| ' or table does not exist');
  
end if;

end;

SQL код:
execute analyze_quick(&#039;&TABLE_OWNER','&TABLE_NAME'); 
17.02.2022 19:02
OlegON
 
Сейчас налетел
ORA-00600: internal error code, arguments: [25027], [8], [2060990264], [], [], [], [], [], [], [], [], []
Причем, третий аргумент все время плавает от 0 до каких-то произвольных на первый взгляд цифр... Убился. На основной базе все работает, на склонированной падает на
SQL код:
ANALYZE TABLE supermag.FFMapRep_ ESTIMATE STATISTICS SAMPLE 5 PERCENT
сколько раз просил убрать старье это... Таблица на 130млн. записей, секционированная и обвешаная bitmap индексами (не мной).
Базу переливал - не помогает. Индексы перестраивал, пересоздавал, в том числе и в не-bitmap, не помогает... validate structure cascade не удается выполнить за разумное время... Файловую систему проверял, все параметры базы перебрал...
В первый раз настолько уперся.
18.02.2022 13:29
OlegON
 
В общем, уперся, ANALYZE ... COMPUTE STATISTICS работает нормально, dbms_stats.gather_table_stats('SUPERMAG','FFMAPREP_',estimate_percent =>5); работает без проблем, падает только на ESTIMATE. Дождался таки validate structure cascade (5 часов), без ошибок... Ошибок нет нигде, только в ESTIMATE. Видимо, все же пора уже analyze закапывать для сбора статистики по таблицам и индексам...

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