Je ne suis pas en mesure de trouver la bonne documentation sur la définition de timings spécifiques pour l'actualisation de la visualisation matérialisée pour Oracle. Je lisons la documentation et quelques exemples là-bas, mais il n'y a pas de documentation définitive sur l'utilisation de la clause suivante. Que ferais-je pour mettre en place une actualisation tous les jours à 8h et 20 heures par exemple? Comment devrais-je réaliser une rafraîchissement 3 fois par jour?
Voici ce que j'utilise dans mon cas. Je comprends que cela commencera à rafraîchir à 7h du matin demain et ensuite toutes les 12 heures?
alter materialized view MY_VIEW
refresh fast
start with (sysdate+1) + 7/24
next trunc(sysdate) + ((trunc(to_char(sysdate,'HH24')/12)*12)+12)/24
Je veux aussi savoir s'il existe un moyen de savoir comment vérifier si la vue matérialisée a été rafraîchie une fois que les horaires sont définis.
MISE À JOUR: J'ai essayé de rafraîchir mon MV toutes les heures, ce qui ne fonctionnait pas. Je me demande pourquoi cela est-ce. Voici ce que j'ai utilisé:
CREATE MATERIALIZED VIEW "MYVIEW"
ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "APEX_xxxxxxxxxxxxxxxxxx"
BUILD IMMEDIATE
USING INDEX
REFRESH FAST ON DEMAND START WITH sysdate+0 NEXT sysdate+1/24
USING DEFAULT LOCAL ROLLBACK SEGMENT
USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
AS select *
from <mydblinktable>
J'utiliserais DBMS_SCHEDULER
Au lieu de cela, avec un travail pour chaque rafraîchissement. Il est alors plus facile de gérer et d'afficher les exécutions précédentes.
CREATE OR REPLACE PROCEDURE REFRESH_MY_VIEW
AS
BEGIN
DBMS_MVIEW.REFRESH('MY_VIEW');
END;
/
Actualiser à 8h tous les jours:
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'REFRESH_MY_VIEW',
job_type => 'PLSQL_BLOCK',
job_action => 'REFRESH_MY_VIEW',
number_of_arguments => 0,
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=daily; byhour=8; byminute=0; bysecond=0;',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Refreshes MY_VIEW at 8am'
);
END;
/
Actualiser à 20h00 tous les jours:
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'REFRESH_MY_VIEW',
job_type => 'PLSQL_BLOCK',
job_action => 'REFRESH_MY_VIEW',
number_of_arguments => 0,
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=daily; byhour=20; byminute=0; bysecond=0;',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Refreshes MY_VIEW at 8pm'
);
END;
/
Le *_SCHEDULER_JOB_LOG
et *_SCHEDULER_JOB_RUN_DETAILS
Data Dictionnaire Les vues fournissent toutes les informations dont vous avez besoin pour suivre ce qui est exécuté, quand et si des erreurs sont survenues. Lien de documentation ici .
Comme indiqué dans un commentaire, vous pouvez ajouter plusieurs by hour
clauses, séparées par des virgules, comme suit: repeat_interval => 'freq=daily; byhour=8,20; byminute=0; bysecond=0;'