J'ai exécuté quelques tests avec le concept de vues matérialisées dans Oracle et je n'ai pas pu répondre à cette question, une vue matérialisée récupère-t-elle des lignes lorsque la table principale a été créée de devient vide? J'ai énuméré une séquence d'événements ci-dessous pour visualiser ce que je pense,Utilisation d'une vue matérialisée avec la table principale vide
- Créer valide Matérialisés Voir basé sur une grande table maître
Voici un exemple
La table principale
CREATE TABLE master_tab
(
col1 varchar2(10),
col2 varchar2(10),
col3 varchar2(10),
tr_val1 number,
tr_val2 number,
tr_val3 number
)
La vue matérialisée définition
CREATE MATERIALIZED VIEW mview_test
BUILD IMMEDIATE
REFRESH COMPLETE
ON DEMAND
ENABLE QUERY REWRITE
AS SELECT col1, col2
SUM(tr_val1), SUM(tr_val2)
FROM master_tab
GROUP BY col1, col2
- ultérieurement dans le temps, pour une raison quelconque, la master_tab table maître est tronqué
- Donc, maintenant, seule la vue matérialisée a toutes les données pertinentes à toute question sur la Master table master_tab
Je n'étais pas très au courant de ce que Oracle fait dans les coulisses pour aller chercher les bonnes données. Maintenant, que se passe-t-il lorsqu'une requête est exécutée à partir d'une application recherchant des données de la table principale? Par exemple, ce qui se passe lorsqu'une requêtes d'application,
SELECT col1, col2
SUM(tr_val1), SUM(tr_val2)
FROM master_tab
GROUP BY col1, col2
- Quel genre de décisions ne Oracle prennent en interne pour extraire des données de vues matérialisées?
- Oracle récupèrerait-il toujours les données correctes de la vue matérialisée même si la table principale est vide?
- Si la réponse à la question 2 est oui, cela signifie-t-il que tant que la vue matérialisée n'est pas actualisée à nouveau, Oracle pourra toujours extraire des données pour toutes les requêtes à la recherche de données du maître?
Merci pour votre aide
Quel genre de tests exécutaient que vous ne pouvait pas effectuer un test pour ce cas? – APC
@APC - J'ai posté ma question ici après avoir exécuté un certain nombre de tests. Premièrement, je ne savais pas s'il existait un moyen de valider si mon application utilisait effectivement la vue matérialisée pour toutes les requêtes pertinentes sur la table principale. Deuxièmement, pour tester le scénario en question, j'ai tronqué le Master uniquement pour voir toutes mes requêtes ne renvoyer aucune valeur du tout. Je ne pourrais pas distinguer si ceci est dû à l'application utilisant toujours la table principale pour toutes ses données (en dépit d'une vue matérialisée pour une combinaison spécifique de colonnes) ou en raison d'un comportement probable de comportement normalisé standard – Sofia