2010-11-18 26 views
2

J'ai une vue matérialisée sur un serveur qui est créée par le lien DB. Un travail s'exécute sur ce Mview. (créé avec dbms_refresh.make plus tôt).Modifications dans Materialized

Maintenant, j'ai créé 3 nouveaux champs dans la table d'origine. Mes requêtes sont. 1) Dois-je supprimer et créer à nouveau Mview, si oui, dois-je créer à nouveau le journal Mview sur le serveur principal? 2) Qu'arrive-t-il au travail exécuté sur Mview, dois-je le créer?

De même, il y a des vues créées sur Mview, donc --Si j'exécute créer ou remplacer une requête de vue, cela créera-t-il un problème?

S'il vous plaît guider.

Merci!

Répondre

3

Si vous devez inclure les nouvelles colonnes dans votre vue matérialisée, alors oui, vous devez recréer la vue matérialisée. Vous devez explicitement supprimer la vue car il n'y a pas d'instruction "créer ou remplacer une vue matérialisée". La suppression/recréation de la vue matérialisée doit recréer le travail d'actualisation. Pas certain à 100%, mais vous devriez probablement recréer le journal.

Et, si vous n'avez pas besoin d'inclure les nouvelles colonnes de votre vue, vous ne avez pas vraiment besoin de faire quoi que ce soit ...

2

Après avoir supprimé/créé la vue matérialisée, vous devez recompiler les autres vues par la suite, car elles peuvent être devenues invalides.

Vous pouvez vérifier si cela se produisait avec

select * 
from user_objects 
where status = 'INVALID'; 

recompilation une vue peut être fait avec

alter view the_view compile; 

ou

exec dbms_utility.compile_schema(user); 

Ce recompile simplement tout dans votre schéma. Assurez-vous de ne pas avoir de travail en cours d'exécution tout en faisant cela!

+0

Êtes-vous certain que « créer ou remplacer » travaille pour une vue matérialisée ? re: La réponse de DCookie (et mon expérience) 'créer ou remplacer' renvoie une erreur Oracle sur une vue matérialisée. – Andrew

+0

Vous avez raison, les vues matérialisées ne peuvent pas être remplacées. J'ai édité ma réponse. –