IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Vues matérialisées : problème


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Par défaut Vues matérialisées : problème
    Base de données : Oracle 10.2.0.1
    Windows 2000

    J'ai un problème avec l'utilisation de vues matérialisées.

    Je créé une vue simple à partir d'une requête avec une jointure entre deux tables.
    Ensuite je créé une vue matérialisée avec la même requête.

    Je fais un select à partir de la vue simple.
    Ensuite je fais le même select à partir de la vue matérialisée.

    Pour le mois de 09/2006, j'obtiens deux résultats différents.
    Etrange ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    SQL> 
    SQL> SET ECHO ON
    SQL> 
    SQL> DROP VIEW VUE_SIM_TEST;
    
    View dropped.
    
    SQL> 
    SQL> CREATE VIEW VUE_SIM_TEST
      2  AS
      3  SELECT AN, MOIS, C.ID_CLIENT, SUM(MNT_ENGAG) MNT_ENGAG, SUM(MNT_ENC_MOY_ENGAG_M) MNT_ENC_MOY_ENGAG_M,
      4  			       SUM(MNT_ENC_MOY_ENGAG_A) MNT_ENC_MOY_ENGAG_A, SUM(MNT_ENC_MOY_CAUTION_M) MNT_ENC_MOY_CAUTION_M,
      5  			       SUM(MNT_ENC_MOY_CAUTION_A) MNT_ENC_MOY_CAUTION_A, SUM(MNT_PNB_ENGAG_M) MNT_PNB_ENGAG_M,
      6  			       SUM(MNT_PNB_ENGAG_A) MNT_PNB_ENGAG_A, SUM(MNT_COM_ENGAG_M) MNT_COM_ENGAG_M,
      7  			       SUM(MNT_COM_ENGAG_A) MNT_COM_ENGAG_A, SUM(MNT_COM_CAUTION_M) MNT_COM_CAUTION_M,
      8  			       SUM(MNT_COM_CAUTION_A) MNT_COM_CAUTION_A, SUM(MNT_PNB_ENGAG_TOT_M) MNT_PNB_ENGAG_TOT_M,
      9  			       SUM(MNT_PNB_ENGAG_TOT_A) MNT_PNB_ENGAG_TOT_A, SUM(MNT_COM_MVT_M) MNT_COM_MVT_M,
     10  			       SUM(MNT_COM_MVT_A) MNT_COM_MVT_A, SUM(MNT_COM_AUTRE_M) MNT_COM_AUTRE_M,
     11  			       SUM(MNT_COM_AUTRE_A) MNT_COM_AUTRE_A, SUM(MNT_ENC_MOY_DAV_NR_M) MNT_ENC_MOY_DAV_NR_M,
     12  			       SUM(MNT_ENC_MOY_DAV_NR_A) MNT_ENC_MOY_DAV_NR_A, SUM(MNT_PNB_DAV_NR_M) MNT_PNB_DAV_NR_M,
     13  			       SUM(MNT_PNB_DAV_NR_A) MNT_PNB_DAV_NR_A, SUM(MNT_ENC_MOY_DAV_R_M) MNT_ENC_MOY_DAV_R_M,
     14  			       SUM(MNT_ENC_MOY_DAV_R_A) MNT_ENC_MOY_DAV_R_A, SUM(MNT_PNB_DAV_R_M) MNT_PNB_DAV_R_M,
     15  			       SUM(MNT_PNB_DAV_R_A) MNT_PNB_DAV_R_A, SUM(MNT_PNB_FLOT_M) MNT_PNB_FLOT_M,
     16  			       SUM(MNT_PNB_FLOT_A) MNT_PNB_FLOT_A, SUM(MNT_PNB_FLUX_TOT_M) MNT_PNB_FLUX_TOT_M,
     17  			       SUM(MNT_PNB_FLUX_TOT_A) MNT_PNB_FLUX_TOT_A, SUM(MNT_RCA) MNT_RCA
     18  FROM   TAB_STAT_CLIENT_FLUX F, TAB_COMPTE C
     19  WHERE  C.ID_COMPTE = F.ID_COMPTE
     20  AND    AN > TO_CHAR(ADD_MONTHS(SYSDATE,-36),'YYYY')
     21  GROUP BY AN, MOIS, C.ID_CLIENT;
    
    View created.
    
    SQL> 
    SQL> DROP MATERIALIZED VIEW VUE_MAT_TEST;
    
    Materialized view dropped.
    
    SQL> 
    SQL> CREATE MATERIALIZED VIEW VUE_MAT_TEST
      2  TABLESPACE TS_GCI_TAB1
      3  BUILD IMMEDIATE
      4  REFRESH COMPLETE
      5  START WITH SYSDATE NEXT SYSDATE + 1/24
      6  WITH PRIMARY KEY
      7  AS
      8  SELECT AN, MOIS, C.ID_CLIENT, SUM(MNT_ENGAG) MNT_ENGAG, SUM(MNT_ENC_MOY_ENGAG_M) MNT_ENC_MOY_ENGAG_M,
      9  			       SUM(MNT_ENC_MOY_ENGAG_A) MNT_ENC_MOY_ENGAG_A, SUM(MNT_ENC_MOY_CAUTION_M) MNT_ENC_MOY_CAUTION_M,
     10  			       SUM(MNT_ENC_MOY_CAUTION_A) MNT_ENC_MOY_CAUTION_A, SUM(MNT_PNB_ENGAG_M) MNT_PNB_ENGAG_M,
     11  			       SUM(MNT_PNB_ENGAG_A) MNT_PNB_ENGAG_A, SUM(MNT_COM_ENGAG_M) MNT_COM_ENGAG_M,
     12  			       SUM(MNT_COM_ENGAG_A) MNT_COM_ENGAG_A, SUM(MNT_COM_CAUTION_M) MNT_COM_CAUTION_M,
     13  			       SUM(MNT_COM_CAUTION_A) MNT_COM_CAUTION_A, SUM(MNT_PNB_ENGAG_TOT_M) MNT_PNB_ENGAG_TOT_M,
     14  			       SUM(MNT_PNB_ENGAG_TOT_A) MNT_PNB_ENGAG_TOT_A, SUM(MNT_COM_MVT_M) MNT_COM_MVT_M,
     15  			       SUM(MNT_COM_MVT_A) MNT_COM_MVT_A, SUM(MNT_COM_AUTRE_M) MNT_COM_AUTRE_M,
     16  			       SUM(MNT_COM_AUTRE_A) MNT_COM_AUTRE_A, SUM(MNT_ENC_MOY_DAV_NR_M) MNT_ENC_MOY_DAV_NR_M,
     17  			       SUM(MNT_ENC_MOY_DAV_NR_A) MNT_ENC_MOY_DAV_NR_A, SUM(MNT_PNB_DAV_NR_M) MNT_PNB_DAV_NR_M,
     18  			       SUM(MNT_PNB_DAV_NR_A) MNT_PNB_DAV_NR_A, SUM(MNT_ENC_MOY_DAV_R_M) MNT_ENC_MOY_DAV_R_M,
     19  			       SUM(MNT_ENC_MOY_DAV_R_A) MNT_ENC_MOY_DAV_R_A, SUM(MNT_PNB_DAV_R_M) MNT_PNB_DAV_R_M,
     20  			       SUM(MNT_PNB_DAV_R_A) MNT_PNB_DAV_R_A, SUM(MNT_PNB_FLOT_M) MNT_PNB_FLOT_M,
     21  			       SUM(MNT_PNB_FLOT_A) MNT_PNB_FLOT_A, SUM(MNT_PNB_FLUX_TOT_M) MNT_PNB_FLUX_TOT_M,
     22  			       SUM(MNT_PNB_FLUX_TOT_A) MNT_PNB_FLUX_TOT_A, SUM(MNT_RCA) MNT_RCA
     23  FROM   TAB_STAT_CLIENT_FLUX F, TAB_COMPTE C
     24  WHERE  C.ID_COMPTE = F.ID_COMPTE
     25  AND    AN > TO_CHAR(ADD_MONTHS(SYSDATE,-36),'YYYY')
     26  GROUP BY AN, MOIS, C.ID_CLIENT;
    
    Materialized view created.
    
    SQL> 
    SQL> SELECT AN, MOIS, SUM(MNT_PNB_ENGAG_TOT_A)
      2  FROM   TAB_STAT_CLIENT_FLUX F, TAB_COMPTE C
      3  WHERE  C.ID_COMPTE = F.ID_COMPTE
      4  AND    AN = '2006'
      5  GROUP BY AN, MOIS
      6  ORDER BY 1,2;
    
    AN   MO SUM(MNT_PNB_ENGAG_TOT_A)                                                                    
    ---- -- ------------------------                                                                    
    2006 01                176829.15                                                                    
    2006 02                341301.02                                                                    
    2006 03               1084345.21                                                                    
    2006 04                  1264892                                                                    
    2006 05               1442153.11                                                                    
    2006 06               2231253.43                                                                    
    2006 07               2424360.56                                                                    
    2006 08                2621464.4                                                                    
    2006 09               3362098.42                                                                    
    
    9 rows selected.
    
    SQL> 
    SQL> SELECT AN, MOIS, SUM(MNT_PNB_ENGAG_TOT_A)
      2  FROM VUE_SIM_TEST
      3  WHERE AN = '2006'
      4  GROUP BY AN, MOIS
      5  ORDER BY 1,2;
    
    AN   MO SUM(MNT_PNB_ENGAG_TOT_A)                                                                    
    ---- -- ------------------------                                                                    
    2006 01                176829.15                                                                    
    2006 02                341301.02                                                                    
    2006 03               1084345.21                                                                    
    2006 04                  1264892                                                                    
    2006 05               1442153.11                                                                    
    2006 06               2231253.43                                                                    
    2006 07               2424360.56                                                                    
    2006 08                2621464.4                                                                    
    2006 09               3362098.42                                                                    
    
    9 rows selected.
    
    SQL> 
    SQL> SELECT AN, MOIS, SUM(MNT_PNB_ENGAG_TOT_A)
      2  FROM VUE_MAT_TEST
      3  WHERE AN = '2006'
      4  GROUP BY AN, MOIS
      5  ORDER BY 1,2;
    
    AN   MO SUM(MNT_PNB_ENGAG_TOT_A)                                                                    
    ---- -- ------------------------                                                                    
    2006 01             176829.15                                                                    
    2006 02                341301.02                                                                    
    2006 03               1084345.21                                                                    
    2006 04                  1264892                                                                    
    2006 05               1442153.11                                                                    
    2006 06               2231253.43                                                                    
    2006 07               2424360.56                                                                    
    2006 08                2621464.4                                                                    
    2006 09               3298491.27                                                                    
    
    9 rows selected.
    
    SQL> 
    SQL> SPOOL OFF

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    t'as bien rafraichie ta vue avant de lancer le SELECT ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Par défaut
    oui

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    essaye de locker la table et lancer les 2 select.

  5. #5
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Bon je suis un peu bête mais rien de choquant en soit.

    Lors de la création d'une MV à rafraichissement toutes les heures, les données évolues entre la création de la VM, l'éxécution du select de vérification (sur la vue simple ou les tables directement) et l'exécution du select sur la vue Mater.

    Êtes-vous sûr que personne est mis à jour les tables AB_STAT_CLIENT_FLUX F, TAB_COMPTE ?

    Par exemple si les aggrégats que vous faires dans vos requêtes s'exécute en 2 minutes cela fait :
    -2 min interrogation de la vue
    -1 min( déja en cache) interrogation des tables
    -2 min interrogation VM (pas en cache car tables différentes)

    Soit un delta de 5 min entre les jeux de tests, en 5 min bcp de choses peuvent changer non ?

    Donc pour moi l'incohérence des données peut être "normale", en direct avec la vue et les tables même résultats et avec la VM (qui peut avoir 1h de décalage de data) résultat différents.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 5
    Par défaut
    La table TAB_STAT_CLIENT_FLUX n'est utilisée par personne et n'est pas mise à jour.
    Le problème est identique même si je rafraichis la vue manuellement avec DBMS_MVIEWS.REFRESH...

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/05/2013, 17h33
  2. Problème de rafraîchissement de vue matérialisée
    Par sheridan08 dans le forum SQL
    Réponses: 3
    Dernier message: 28/10/2012, 21h53
  3. Problème de vue matérialisée
    Par bo7mid dans le forum SQL
    Réponses: 10
    Dernier message: 05/11/2008, 16h12
  4. Réponses: 6
    Dernier message: 30/10/2008, 20h37
  5. Fonctionnement et utilisation des vues matérialisées
    Par gOgHi dans le forum Administration
    Réponses: 7
    Dernier message: 19/10/2004, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo