В 19 версии обнаружилось пока не разгаданное и не очень понятное поведение, при котором не соблюдается расписание обновления матвьюшек.
То есть тупо есть несколько десятков materialized views с расписанием обновления, которое я сейчас пытаюсь привести в порядок, но до момента приведения в порядок иногда случается, что матвьюшка вообще не обновляется. Без ошибок и какой-то запредельной нагрузки просто стоит и все. Соответственно, этот джоб делает им принудительное обновление. Известна схема и известно, что в ней максимальный срок периода обновления - сутки.
Соответственно, скрипт ниже все матвьюшки этой схемы обновляет, если они задержались более чем на 1.5 суток.
SQL код:
create or replace procedure okrefr_old_po_mviews as
BEGIN
FOR mv IN (SELECT * FROM dba_mviews WHERE owner='P_O' and refresh_mode not in ('DEMAND','NEVER') and compile_state='VALID' and SYSDATE - last_refresh_date > 1.5)
LOOP
begin
DBMS_MVIEW.REFRESH('P_O.'||mv.mview_name,'?');
exception when others then null;
end;
END LOOP;
END;
/
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'OKREFRESH_PO_MVIEWS_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN okrefr_old_po_mviews; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
enabled => TRUE,
comments => 'Refresh forgotten p_o mviews. OlegON'
);
END;
/