2010-11-25 4 views

Répondre

0

Vous Might pouvoir utiliser le MV existant comme source d'un prebuilt table for the new MV

Beaucoup dépend de ce que vous faites à la requête bien sûr. Si vous ajoutez une colonne, par exemple, vous devez tout actualiser pour obtenir sa nouvelle valeur.

PS. Le moyen rapide de transformer le MV existant en une table serait l'échange de partition, mais faites attention à gotchas. Ensuite, vous manipulez la table pour correspondre au nouveau jeu de résultats et créez le nouveau MV basé sur la table manipulée.

2

Vous pouvez laisser la mview en place. Si votre souci est de minimiser les temps d'arrêt pendant que le nouveau mview instancie (parce que vous n'avez pas utilisé de table prédéfinie), vous pouvez faire ce qui suit.

  1. Créer une nouvelle table appelée mview_1 sur la table préconstruits
  2. Une fois qu'il vous a été créé peut laisser tomber l'ancien
  3. créer ou remplacer vue mview que select * from mview_1

Maintenant, chaque fois que vous avez besoin de reconstruire vous serez capable de le faire avec peu ou pas de temps d'arrêt puisque vous pouvez simplement pointer la vue vers la nouvelle table/mview à l'avenir.

+0

Downtime peut être nul si vous pointez vos requêtes et votre code vers un synonyme (ou une vue standard) et passez de la wro ng vue matérialisée à la nouvelle (et à l'arrière quand vous devez le modifier à nouveau). La création de la vue matérialisée peut prendre tout le temps dont elle a besoin, il suffit de changer le pointeur lorsqu'elle est prête en quelques millisecondes. –

3

Pour les conditions où vous n'êtes pas sûr que le MVIEW existe ou non (ce qui est ce que CREATE OR REPLACE est vraiment bon pour), j'utilise;

BEGIN 
    EXECUTE IMMEDIATE 'DROP MATERIALIZED VIEW name_of_mview'; 
    EXCEPTION 
     WHEN OTHERS THEN 
      IF SQLCODE = -12003 THEN 
       dbms_output.put_line('MVIEW does not exist, which was somewhat expected'); 
      ELSE 
       RAISE; 
      END IF; 
END; 
/

CREATE MATERIALIZED VIEW name_of_mview ... AS SELECT ... 
15

Non, vous ne pouvez pas modifier la requête d'une vue matérialisée sans la supprimer.

La syntaxe CREATE MATERIALIZED VIEW ne prend pas en charge cette fonctionnalité.

Le ALTER MATERIALIZED VIEW permet de modifier une vue existante matérialisée dans un ou plusieurs des façons suivantes:

  • Pour modifier ses caractéristiques de stockage
  • Pour changer sa méthode de rafraîchissement, le mode ou le temps
  • de modifier sa structure de sorte qu'il est un autre type de vue matérialisée
  • Pour activer ou désactiver la requête réécrire

Voir Oracle 12c Release 1 Manuel pour:

Questions connexes