2017-08-07 8 views
0

Je ne sais pas comment la vue matérialisée est mise à jour. J'ai créé une vue matérialisée et je la mets à jour chaque minute.l'affichage de la mise à jour de l'heure matérialisée n'est pas correct

create materialized view vmat 
refresh force on demand 
start with to_date('07-08-2017 10:00:00', 'dd-mm-yyyy hh24:mi:ss') 
next sysdate+(1/(24*60)) 
as 
select * from mat where id>3;` 

Mais rafraîchi au 07/08/2017 16:21:07 dans le user_mview_refresh_times. Il devrait être mis à jour le 07/8/2017 16:21:00. Donc, je suis très confus.

+0

donc vous dites que c'est mis à jour 7 secondes après que vous l'ayez voulu? – Shahzaib

+0

Je pense qu'il est impossible de mettre à jour 7 secondes .Just 10 lignes dans la table.Je commence à 07-08-2017 10:00:00 et mettre à jour la table chaque minute.So Il devrait être mis à jour au début de chaque minute. Je fais juste un test, et l'applique à mon travail. –

+0

Je fais un petit changement, et je laisse les vues matérialisées se mettre à jour toutes les heures.Je trouve cela très étrange.Lorsque je crée la vue matérialisée à '07 -08-2017 10: 15: 24 ', l'heure de mise à jour suivante est '07 -08-2017 11: 15: 24 '. Il semble que la clause' commencer par 'ne fonctionne pas. Peu importe ce que' commencer par 'est la clause. –

Répondre

0

Le paramètre next spécifie l'heure d'actualisation en tant qu'heure de la date à laquelle la base de données devient un intervalle. Je pense que le problème est que vous définissez start et next différemment. En particulier, vous utilisez un sysdate brut, qui comprend un élément de temps à la seconde exacte. C'est pourquoi vous avez ces valeurs impaires pour LAST_REFRESH.

Essayez cette formulation à la place (en utilisant votre temps d'origine):

... 
, Start => trunc(sysdate)+(10/24) 
, Next => trunc(sysdate)+(1/1440) 

Ainsi, le temps de démarrage initial sera 10:00:00 et le premier rafraîchissement sera 10:01:00.

+0

Mais le code que vous avez montré n'est pas correct. Lorsque je crée la vue matérialisée, la vue est mise à jour pour la première fois. DBMS calcule ensuite la date à laquelle la vue doit être mise à jour. Oui, je l'ai. Merci beaucoup. Je pense que Next => trunc (sysdate, 'mi') + 1/1440 –