2017-09-11 6 views
0

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

  1. 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 
  1. ultérieurement dans le temps, pour une raison quelconque, la master_tab table maître est tronqué
  2. 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 
  1. Quel genre de décisions ne Oracle prennent en interne pour extraire des données de vues matérialisées?
  2. Oracle récupèrerait-il toujours les données correctes de la vue matérialisée même si la table principale est vide?
  3. 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

+0

Quel genre de tests exécutaient que vous ne pouvait pas effectuer un test pour ce cas? – APC

+0

@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

Répondre

2

Pour tenter de répondre à vos questions:

  1. Pour utiliser Réécriture de requête et ont les données extraites de MV, ce qui suit est vérifié: a) réécriture de la requête activé (Session) b) Réécriture de requête activée (MV) et c) Réécriture d'intégrité vérifie (je pense que c'est là où vous devez contrôler)

Ce qui précède en plus de la vérification sur le SQL lui-même si cela peut être réécrit dix en utilisant une MV (vous pouvez utiliser DBMS_MVIEW.EXPLAIN_REWRITE sur le SQL pour conseiller si rewrite est possible et que MV sont utilisés

  1. Le niveau d'intégrité QUERY_RESRITE_INTEGRITY est utilisée pour voir s'il est permis de utiliser la réécriture de la requête ou non. La valeur par défaut est ENFORCED et peut être TRUSTED ou STALE_TOLERATED.Dans votre cas, si elle est TRUSTED ou STALE_TOLERATED, la requête serait toujours réécrite et les données seront extraites de MV

  2. Je crois que oui, étant donné 2

+0

Merci pour ta réponse. Je comprends maintenant que le problème était avec le paramètre QUERY_REWRITE_INTEGRITY. À l'origine, je ne l'avais pas changé et il avait la valeur par défaut ENFORCED au niveau du système. Après avoir changé la valeur en STALE_TOLERATED, j'ai pu faire en sorte que la requête sur la table principale récupère les valeurs de la vue matérialisée même lorsque le maître était vide – Sofia