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

SQL Oracle Discussion :

Transformer une table en une vue matérialisée


Sujet :

SQL Oracle

  1. #1
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut Transformer une table en une vue matérialisée
    Salut tout le monde.
    Mon idée est de transformer une table en une vue matérialisée qui est basée sur une autre table.
    J'ai renseigné les tables:obj$, sum$, snap$ et snap_reftime$.
    j'ai trouvé sur les listes les objets en question, mais je n'ai pas pu rafraichir le snapshot.
    Quelqu'un peut m'aider pour concrétiser l'idée?
    Merci par avance.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par islamov2000 Voir le message
    ...
    J'ai renseigné les tables:obj$, sum$, snap$ et snap_reftime$.
    ....
    Si vous avez écrit directement dans les tables du méta dictionnaire d'Oracle vous avez fait fausse route et virtuellement corrompue la base!

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Merci mnitu pour la réponse.
    Oui, c'est ce que j'ai fait, j'ai constaté ça, car je n'ai pas utilisé les séquenceurs de base de données par exemple pour renseigner obj$.obj#
    Est ce qu'il y a d'autre façon pour faire.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Croisez les doigts et essayer d'abord de supprimer les enregistrements que vous avez ajoutés directement au méta-dictionnaire.
    Ensuite si vous avez besoin d'une vue matérialisée il faut créer ... une vue matérialisée via SQL.
    Il sera probablement utile d'expliquer ce que vous voulez accomplir.

  5. #5
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    On a plusieurs base de données dans différents sites qui sont reliées à une base de données consolidé.

    La préoccupation est que les données fondamentales ne sont pas uniformes dans les bases de données, pour cela on a pensé de standardiser ces données en mettant les données en question dans la base de données consolidé, et les autres base de données vont les recupérer directement, sachant que toutes les bases sont en production.

    Là, nous avons pensé aux snapshots sans perturber les bases de données.

    Nous avons trouvé une astuce qui est comme suite:




    Créer un snapshot en mode rafraichissement rapide (fast)


    * Dans la base consolisée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE  MATERIALIZED VIEW LOG ON la_table_consolide
    NOCACHE
    LOGGING
    NOPARALLEL
    WITH  PRIMARY KEY;



    * Dans les autres bases


    Suposant qu'on a la table intitulée la_table.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create materialized view la_table_mv
    REFRESH FAST ON DEMAND
    WITH PRIMARY KEY
    as  
    select * from la_table_consolide@test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete from sys.obj$ t where t.name='LA_TABLE_MV' and t.type#=2;
    commit;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update sys.obj$ t set t.name='LA_TABLE_MV' where t.name='LA_TABLE' and t.type#=2;
    commit;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     MERGE INTO sys.sum$ B
          USING sys.obj$ A
    on (A.NAME=B.CONTAINERNAM and  B.CONTAINERNAM='LA_TABLE_MV' and A.type#=2)
    WHEN MATCHED THEN 
    UPDATE SET B.CONTAINEROBJ# = A.OBJ#;
    commit;

    Ça marche bien sans perturbation de la base de donnée et sans perte de données.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    NE TOUCHEZ PAS AU CATALOGUE !!!
    C'est nul, 0/20, c'est un avertissement, c'est à ne jamais faire.

    Utilisez des synonymes si vous ne voulez pas modifier le nom des tables dans vos applications, ils servent à ça !

  7. #7
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Merci pour le conseil.
    Mais je veux savoir quel est le danger de ce procédé si on connait le mapping des tables concernés?
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50

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