web-dev-qa-db-fra.com

Vues matérialisées - Identifier la dernière actualisation

J'accède actuellement à une série de vues et de vues matérialisées. Les matérialisés sont entretenus par un tiers qui offre peu d’informations sur la fréquence et le succès de la matérialisation. Récemment, les vues matérialisées n'ont pas été actualisées et j'ai envoyé de nombreux rapports contenant des données incorrectes/différées.

Actuellement, j'interroge chaque matérialisation que j'entends utiliser pour établir le moment où la dernière mise à jour a eu lieu dans le système transactionnel. Si elle n'a pas été actualisée, le reste du code n'est pas exécuté. une hypothèse incorrecte (la vue matérialisée peut avoir été rafraîchie, mais aucune transaction supplémentaire n'a été effectuée - le reste du code ne s'exécute donc pas) et je préférerais une autre méthode.

Existe-t-il un moyen d'identifier si une vue matérialisée a été actualisée à l'aide d'une table système Oracle? Sinon, est-ce que quelqu'un a une idée de la façon dont je ferais cela sans avoir à contacter le tiers?

20
Scott

Il semble que doc_180 ait déjà répondu à cela dans les commentaires. Je ne sais pas pourquoi il n'a pas été ajouté comme réponse.

SELECT owner, mview_name, last_refresh_date
  FROM all_mviews
 WHERE owner = <<user that owns the materialized view>>
   AND mview_name = <<name of the materialized view>>

Si vous avez accès aux tables DBA, vous pouvez remplacer DBA_MVIEWS par ALL_MVIEWS. Cela vous permettrait d’avoir accès aux informations relatives au moment où chaque vue matérialisée a été actualisée, plutôt qu’au seul sous-ensemble de vues matérialisées auxquelles vous avez accès. Bien sûr, ce n'est probablement pas une différence qui est particulièrement importante dans ce cas.

37
Justin Cave

Malheureusement, le format de date par défaut des oracles est AAAA-MM-JJ. Si vous avez besoin de temps, utilisez simplement quelque chose comme ceci:

SELECT owner, mview_name, to_char(LAST_REFRESH_DATE, 'yyyy-mm-dd hh24:mi:ss') last_refresh_date
FROM all_mviews
WHERE owner = 'FOO'
AND mview_name = 'MV_BAR';
6
ptr

Personnellement, j'utilise all_snapshots, et cette information est complémentaire à celle de DBA_MVIEWS ou ALL_MVIEWS.

select owner, name, last_refresh, error, status, refresh_mode  
from  all_snapshots 
where owner = 'owner';
0
Hugo Rodrigues