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

Oracle Discussion :

Erreur à la création d'une vue matérialisée refresh fast


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Erreur à la création d'une vue matérialisée refresh fast
    Bonjour tout le monde !
    J'espere que vous pourez aider un petit nouveau. J'essai de mettre en place des vues matérialisées pour notre systeme d'infocentre.

    Personne connait le fonctionnement des materialized view dans ma boite alors j'essai de m'en sortir comme un grand.

    J'ai deux utilisateurs "BO" et "CLIENT" sur une même instance. Je souhaite créer une vue materialiée BO_VILLE sur l'utilisateur BO à partire de la table VILLE de l'utilisateur CLIENT.

    J'ai fait les manipulations suivantes :

    Sur l'utilisateur "CLIENT" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grant select on VILLE to BO;
    create materialized view log on VILLE;
    Ensuite sur l'utilisateur "BO" :
    (remarque : la commande "select * from client.ville" retourne bien des données)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create materialised view bo_ville refresh fast as
    select * from client.ville;
    J'ai alors le messages d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select * from client.ville
                       *
    ERREUR à la ligne 2 :
    ORA-12018: l'erreur suivante est survenue pendant la génération du code pour
    "BO"."BO_VILLE"
    ORA-00942: Table ou vue inexistante
    Quand je ne met pas l'option "refresh fast" ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create materialized view bo_ville as
    select * from client.ville;
     
    Vue matérialisée créée.
    Quelqu'un peut-il me sauver la vie ?
    merki !

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Juste une idée, il manque pas le ON COMMIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create materialised view bo_ville refresh fast on commit as 
    select * from client.ville;

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create materialized view bo_ville refresh fast on commit as
    select * from client.ville;
    select * from client.ville
                       *
    ERREUR à la ligne 2 :
    ORA-12054: impossible de définir l'attribut de régénération ON COMMIT pour la
    vue matérialisée
    Y'a un mieux ! Je devrais trouver des infos plus facilement sur cette nouvelle erreur sur tahiti.oracle.com. (pas évident, je suis pas un pro de l'englais) Merki !

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ah ben non !
    Sur tahiti.oracle.com ils mettent ça comme explication sur l'erreur ORA-12054:

    Cause: The materialized view did not satisfy conditions for refresh at commit time.
    Action: Specify only valid options.

    Je suis bien avancé !

  5. #5
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Version Oracle et OS ?

  6. #6
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ah oui j'ai oublié :

    Oracle client 9.2.0.4.0 ici sur une base en 8.1.7.0.0
    OS Windows XP pro.

  7. #7
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Une question bête : que se passe t il si tu essaie de créer le snapshot dans le schéma VILLE ? J'ai l'impression qu'Oracle ne voit pas le snapshot log à partir de l'user BO...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  8. #8
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Essaye de créer le snapshot avec le mode refresh
    COMPLETE puis ut fait alter snapshot en mode fast

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bouyao
    Essaye de créer le snapshot avec le mode refresh
    COMPLETE puis ut fait alter snapshot en mode fast
    Ca marche !!! C'est le plus beau jour de ma vie !!

    C'est marant quand même. Pour info, la création en mode fast fonctionne sur le meme utilisateur. C'est bien de le créer sur un utilisateur different qui provoque l'erreur. Pour le "on commit" par contre ca fait toujours la meme erreur.

    Un grand merci à tous !

  10. #10
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    pensez à résolu.

  11. #11
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Exact ! sorry.

    Euh... Ca doit pas se rafraichir régulièrement ces machins la ? il faut faire un truc pour parametrer le délai de rafraichissement ? parce que j'ai ajouté un élément dans la table client.ville mais je l'ai toujours pas dans mon snap !

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    il faut rafraichir le snapshot bien sûr

  13. #13
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par orafrance
    il faut rafraichir le snapshot bien sûr

    Oui tout à fait, j'avais oublié qu'on pouvait avoir un snapshot en refresh fast mais sans on commit


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    j'ai un doute d'un coup... ne serait-ce pas une colonne qu'a été ajouté ?

    Si c'est le cas, il faut recréer le snapshot

  15. #15
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui tout à fait, j'avais oublié qu'on pouvait avoir un snapshot en refresh fast mais sans on commit
    Le on commit permet de lancer le rafraichissement des snap à chaque commit c'est ca l'idée ? Diantre ! alors il faut que j'arrive à faire fonctionner le refresh fast on commit !

    J'ai toujours cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    alter materialized view bo_ville refresh fast on commit;
    alter materialized view bo_ville refresh fast on commit
    *
    ERREUR à la ligne 1 :
    ORA-12054: impossible de définir l'attribut de régénération ON COMMIT pour la
    vue matérialisée
    Je vais y arriver ! j'y croie j'y croie j'y croie !!!

  16. #16
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par lalystar
    Une question bête : que se passe t il si tu essaie de créer le snapshot dans le schéma VILLE ? J'ai l'impression qu'Oracle ne voit pas le snapshot log à partir de l'user BO...
    Est-ce-que tu as fait le test ?


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  17. #17
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    La table maitre est-elle un IOT ?

  18. #18
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Une note sur metalink :
    Problem Description
    -------------------

    You are trying to create a materialized view which refreshes automatically
    when the underlying table is updated.
    However, the create command fails with an ora-12051 or an ora-12054.
    The select statement that you are using could be any of the following:

    ==============================================
    create materialized view log on emp
    with rowid(empno, ename, job, mgr, hiredate, sal, comm, deptno)
    including new values
    /
    =============================================
    create materialized view mv_emp_1
    build immediate refresh fast on commit
    as
    select deptno, sum(sal), count(sal)
    from emp
    group by deptno
    /

    from emp
    *
    ERROR at line 5:
    ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view

    =============================================
    or
    =============================================
    create materialized view mv_emp_1
    build immediate refresh fast on commit
    as
    select deptno, sum(sal)
    from emp
    group by deptno
    /
    =============================================
    from emp
    *
    ERROR at line 5:
    ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view


    Solution Description
    --------------------

    The correct script for creation of this materialized view is as follows:
    ==============================================
    create materialized view log on emp
    with rowid(empno, ename, job, mgr, hiredate, sal, comm, deptno)
    including new values
    /
    ================================================
    create materialized view mv_emp_1
    build immediate refresh fast on commit
    as
    select count(*), deptno, sum(sal), count(sal)
    from emp
    group by deptno
    /
    ================================================


    Explanation
    -----------

    One of the mandatory requirements for creation of an on-commit materialized
    view has not been satisfied.

    ON-COMMIT :
    Refresh occurs automatically when a transaction that modified one of the
    materialized view's fact tables commits.
    Can be used with materialized views on single table aggregates
    and with materialized views containing joins only.


    As can be seen from above, an ON-COMMIT can be used only under specific cases:
    These are:

    1. The M.V. should have a single table aggregate or
    2. the M.V. should have a join only.
    3. count(*) must be present for Single-Table Aggregates (see example above).
    4. count(<col>) should be present.
    Here, <col> stands for the column which is being aggregated.
    Note: the only time that count(col)is not required is when
    the aggregate itself is a count(col).
    5. It should be possible perform a fast refresh on the materialized view.

    Fast refresh by itself has a few restrictions.
    These are as follows:
    a)The FROM list must contain base tables only (that is, no views).
    b)It cannot contain references to non-repeating expressions like
    SYSDATE and ROWNUM.
    c)It cannot contain references to RAW or LONG RAW data types.
    d)It cannot contain HAVING or CONNECT BY clauses.
    e)The WHERE clause can contain only joins and they must be equi-joins
    (inner or outer) and all join predicates must be connected with
    ANDs. No selection predicates on individual tables are allowed
    f)It cannot have subqueries, inline views, or set functions like
    UNION or MINUS.


    In addition for M.V.'s with Single-Table Aggregates and Materialized Views
    with Joins and Aggregates, there are some more conditions on refresh
    to the ones mentioned above:

    Single Table Aggregates:
    =======================
    i) They can only have a single table.
    ii) The SELECT list must contain all GROUP BY columns.
    iii) Expressions are allowed in the GROUP BY and SELECT
    clauses provided they are the same.
    iv) They cannot have a WHERE clause.
    v) They cannot have a MIN or MAX function.
    vi) A materialized view log must exist on the table and must contain all
    columns referenced in the materialized view. The log must have been
    created with the INCLUDING NEW VALUES clause.
    vii) If AVG(expr) or SUM(expr) is specified, you must have COUNT(expr).
    viii) If VARIANCE(expr) or STDDEV(expr) is specified,
    you must have COUNT(expr) and SUM(expr).

    Joins and Aggregates :
    =====================

    i)The WHERE clause can contain inner equi-joins only
    (that is, no outer joins)
    ii)Materialized views from this category are FAST refreshable after
    Direct Load to the base tables; they are not FAST refreshable after
    conventional DML to the base tables.
    iii)Materialized views from this category can have only the
    ON DEMAND option (so, the on-commit cannot be used for this category).

  19. #19
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Une question bête : que se passe t il si tu essaie de créer le snapshot dans le schéma VILLE ? J'ai l'impression qu'Oracle ne voit pas le snapshot log à partir de l'user BO...


    Est-ce-que tu as fait le test ?
    Oui, sur l'utilisateur CLIENT, le snap se crée sans problème directement en refresh fast. Par contre, la création avec refresh fast on commit donne le même message d'erreur ora-12054 partout.

    La table maitre est-elle un IOT ?
    qu'est c'est qu'un IOT ?

    Merki pour la note metalink, je vais essayé de tripoter ça dans tous les sens et je vous dis ce qu'il en est.

  20. #20
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    IOT : LES TABLES ORGANISÉES EN INDEX .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur de création d'une vue
    Par bm dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/05/2014, 17h22
  2. Création d'une vue matérialisée
    Par sirene_brune dans le forum Administration
    Réponses: 1
    Dernier message: 21/06/2010, 17h12
  3. Erreur sur création d'une vue
    Par CinePhil dans le forum Débuter
    Réponses: 2
    Dernier message: 18/10/2009, 00h06
  4. Création d'une vue matérialisée et erreur ORA-01630
    Par beurtom dans le forum Administration
    Réponses: 8
    Dernier message: 23/02/2007, 12h27
  5. Erreur de syntaxe sur la création d'une vue.
    Par cgougeon dans le forum Installation
    Réponses: 3
    Dernier message: 09/09/2005, 11h00

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