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 :

[IMP/EXP] Probleme d'index unique


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut [IMP/EXP] Probleme d'index unique
    J'ai une table1 avec 4227 ligne, une autre table2 avec 1058 ligne, lorsque je fait un import de matable j ai 0 ligne importé, car pour chaque ligne jai un message du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IMP-00019 ligne rejeté en raison d 'oracle 1
    IMp-00003 errerur oracle 1
    ORA-00001 présence d'une clef d'une dupliqué dans l'index
    Comment faire?
    est il possible de faire en sorte que lors de l'import l'index soit modifié (le mettre a la suite par exemple), oubien suis je obligé de faire sans index et de modifier les doublons sur les index apres, or je ne vois pas comment je pourrai distingué les ligne de la table 1 ou 2.

    enfin bref je sais pas trop comment faire :'(

    merci d avance

    oracle6 w 3.1

    ps : il n y a aucune contrainte PK sur les tables

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Vous importez des données dans une table existante, c'est cela ?
    En fait, même s'il n'y a pas de PK, il y a une contrainte d'unicité qui en serait pas respectée au vue des données déjà présentes et de celles que vous souhaitez importer.
    Plusieurs cas s'offrent alors à vous :
    • La contrainte d'unicité n'a plus de raison d'être : vous la supprimez
    • Les données anciennes sont obsolètes et doivent être remplacées par les nouvelles : vous deletez toute la table
    • Vous ne savez pas et préférez gérer "au cas par cas" : vous désactivez l'index, réalisez l'import et ensuite, à la main, vous cherchez les doublons et les lignes à supprimer...


    mais j'avoue ne pas avoir bien compris cette histoire de table1 et table2 ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    oui c est vrai que je n'est pas bien expliqué, je reprend.

    En fait il y a plusieur bases sur différent pc, je dois faire en sorte qu'il n'y ai plus que 1 seul pc, et égalemnt une seul base, docn les données ne sont pas obsolete.
    Si il n'y a pas la contrainte d'unicité, je peux deja sentir "too many row".
    Et pour gerer au cas par cas, avec un rapide calcul je vais avoir plus de 5500 lignes a traiter, donc impossible de faire cela une par une.


    l'index est une variable "MSLINK" qui pourai etre apparenté à un identifiant

    Ainsi j'avais pensé à plusieur chose :

    Soit ne pas prendre en compte les index, regrouper ( pour avoir les doublons), trouver un moyen de faire la distinction entre les lignes de la table1 et de la table 2, et de donner la valeur pour la table2 (celle que j import) MSLINK=la derniere valeur +1.

    Oubien de faire cela directement pendant l import ( avec je ne sais quel option)

    oubien je sais pas


    j ai un mauvais présentiment là :'(

  4. #4
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Vous voulez fusionner le contenu de plusieurs tables (même structure mais de différentes bases) dans une seule table ?

    Ce que je ferait c'est importer dans une autre table, à côté et ensuite, j'écrirai une procédure qui déplacerait vers la table définitive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FOR Cur IN SLECT * FROM TABLE_TEMPO
       BEGIN
          INSERT INTO TABLE_DEFINITIVE
          DELETE FROM TABLE_TEMPO
          COMMIT;
       EXCEPTION
          WHEN ORA-000001 THEN  NULL
       END;
    END LOOP;
    Comme ça, au final, dans la table tempo, vous aurez uniquement les lignes qui posent problème.
    En espérant qu'elles ne sont pas trop nombreuses, vous pourrez alors évaluer une technique pour "fusionner" ces données ?

  5. #5
    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
    attention, je rappelle que rours est en version 6 et le FOR ne doit pas fonctionner ainsi par ailleurs, un insert select suffirait dans le cas présent non ?

  6. #6
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par orafrance
    attention, je rappelle que rours est en version 6 et le FOR ne doit pas fonctionner ainsi par ailleurs, un insert select suffirait dans le cas présent non ?
    Gloups ! je m'y ferait jamais !

    Et non, un insert select ne gèrerait le tout qu'en une seule transaction et non ligne par ligne et ne permettrait donc pas de séparer le bon grain de l'ivraie !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    Pour repondre à Leo, ma base 1 contient 4227 lignes le mslink a donc pour valeur 4227 (enfin presque du au différente suppression etc ...)
    ma table 2 contient 1058 ligne, avec mslnik = 1058.
    J'importe la table2 vers la 1.
    Donc si je fai ta methode, dans le tempo je vai avoir toutes les lignes de ma table2 :'( vois tu ou je veux en venir?

    Pour repondre a orafrance , je ne sais pas


    Mon idée était que si j import sans l'index, je vais avoir 1058 doublons, or peut etre que au niveau des rowid ceux qui provienne de la table2 ont a rowid supérieur, et auquel cas je pourai mettre la bonne valeur de mslink en selectionnant les bonne lignes avec un group by et un MAX(rowid).
    Oubien suis je totalement dans le faux?

    Je reste ouvert à toutes autres propositions car celle ci me semble tout sauf simple

  8. #8
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Ah... le fameux champs est numérique et du style séquentiel (1, 2, 3, ... ) ?
    mais ça simplifie tout !

    1. Vous importez alors la table avec les 4000 lignes dans la table définitive => no problem.
    2. Vous importez la table avec les 1000 lignes dans la table temporaire=> no problem
    3. Vous updatez la table temporaire en faisant MSLINK := MSLINK+4228 (ou 10000 pour avoir de la marge ou selon les données de table 1)
    4. Vous faite un insert into table1 select * from table 2


  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    haa ça me plait ça, merci beaucoup, je vous tien au courant

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    Juste un petit truc.

    Citation Envoyé par LeoAnderson
    Vous importez la table avec les 1000 lignes dans la table temporaire=> no problem
    comment je fais pour lui dire d'ecrire dans ma table tempo fraichement créé? parce d habitude moi il me la colle directement au bonne endroit.
    De plus je ne peux pas modifier ma base 2 avant l export ( c est les consignes -_- )

  11. #11
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Il vous faut l'importer dans un autre schéma ! (FROMUSER/TOUSER)

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    Citation Envoyé par LeoAnderson
    Il vous faut l'importer dans un autre schéma ! (FROMUSER/TOUSER)
    J'ai un peu de mal là, où est ce que je peux trouver de la doc la dessus?
    car les cours que j'ai n'en parle pas, et les différent post qui en parle ne m on pas vraiment donné la reponse voulue
    ainsi je sais pas trop qu est ce qu'il faut faire concertement, créer la table tempo dans la base? ou dans une autre base avec un autre user ... etc

  13. #13
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Honnêtement, trouver une doc. oracle 6....

    Sinon, fromuser/touser sont 2 arguments de l'imports permettant d'importer des données dans un autre schéma que celui d'origine.
    (attention, pour cela il faut que le nouvel user existe et, pour éviter tout problèmes, dans ce genre de cas, je préfère également créer avant la nouvelle table et faire l'import avec l'option IGNORE=Y)

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    bon en fait, tu me diras si j ai à peu pres compris.

    J'ai deja la base 2 dans le compte system/manager.

    je modifie direct, sans meme faire de tempo, la valeur de mon mslink.

    puis je tape en me connectant avec le compte qui a la base 1 et une partie de la 2 et je tape :

    imp truk/bidulle file=/temp/monexp.dmp tables=matable fromuser=system touser=truk commit=y

    j ai comme un doute sur la commande

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    bah non meme pas en fait

    j ai ma base 1 installé correctement (compte truk/machin)


    je veu import la base2
    je l import une premiere fois avec le compte system/manager
    je modifie les variables à modifier
    je l export
    et je réimporte la nouvelle sur le compte truc/machin

    bon c 'est sur que niveau finesse et rapidité ya mieu mais ça a pas l air mal non?

  16. #16
    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
    Citation Envoyé par rours
    Citation Envoyé par LeoAnderson
    Il vous faut l'importer dans un autre schéma ! (FROMUSER/TOUSER)
    J'ai un peu de mal là, où est ce que je peux trouver de la doc la dessus?
    car les cours que j'ai n'en parle pas, et les différent post qui en parle ne m on pas vraiment donné la reponse voulue
    J'ai donné le lien vers la doc de l'export aujourd'hui ou hier

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    dsl je n'ai pas vu

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Par défaut
    donc au final j ai modifier ma base2 contenue dans system/manager
    j ai exporté

    j ai fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     imp truc/machin file=/temp/base2 tables=la_table fromuser to user truc
    et pi ça marche

    voila merci bcp

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/04/2006, 10h21
  2. Sql Server Express - Probleme index unique et valeurs null
    Par Fayoul dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/02/2006, 17h22
  3. Probleme d'index
    Par yagogak dans le forum Requêtes
    Réponses: 11
    Dernier message: 01/02/2006, 19h43
  4. Probleme d'index fulltext assez bizarre
    Par Clovis37 dans le forum Débuter
    Réponses: 4
    Dernier message: 08/07/2005, 19h59

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