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 :

copier des informations d’une base de données vers une table


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut copier des informations d’une base de données vers une table
    Bonjour,

    J’ai juste une question classique. Je veux copier des informations d’une base de données vers une table d’une autre base de données. Ce que j’ai proposé c’est de le faire en Java, en créant deux connexions et faire des selects dans l’une et des inserts (ou update dans l’autre). Si non, il y a quelqu'un qui m’a parlé de Sql loader (….). Ou si non, peut être on peut le faire directement par sql.
    J’aime bien si vous pouvez me proposer des solution et qui est la plus optimiser et celle la plus facile etc… Merci

  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
    Bonjour,


    Tu peux regarder du cote de la commande sqlplus COPY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    copy -
    from ***/****@*** -
    insert Table2 -
    using -
    select * -
    from Table1;

    Laly.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    En faite la commande Copy ne marche que pour copier une table dans une autre qui a les mêmes noms de colonnes. Dans mon cas je veux copier des colonnes d’une table vers une autre qui n’as pas les mêmes noms de colonnes. En tous cas avec une commande comme celle là, une table de 200 millions de lignes ne va pas vraiment tenir dans ce genre de copies. Je pense que l’utilisation d’un transfert fichier en utilisant un SQL Loader sera la meilleure.

  4. #4
    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
    Bonjour,


    Pas du tout, tu peux spécifier les colonnes dans la table de destination. Par défaut tu as un commit a chaque ligne, mais tu peux le changer avec l'option COPYCOMMIT de SQL*Plus.

    Pour moi y a pas plus simple pour copier des données entre deux bases, apres c'est toi qui voit...

    Laly.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    J’ai décidé enfin de compte de le faire en JDBC. J’ai juste un souci. Comment faire pour copier la table en même temps que d’autre processus sont entrain d’insert, update ou supprime des données dans la base, sans que leurs requêtes soit perdus. Autrement dit, comment on peut faire des verrous on base de donner Oracle 9i.

    Sachant que je vais faire plusieurs requêtes SQL pour copier les tables de la base de données. Je veut qu’avant d’exécuter tous mes requêtes, tous les requêtes extérieur envoyées par d’autres utilisateurs, restent en attentes.

    (Un Verrouillage niveau Oracle/SQL et pas niveau Java)

  6. #6
    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 freakfm Voir le message
    Bonjour,

    J’ai décidé enfin de compte de le faire en JDBC. J’ai juste un souci. Comment faire pour copier la table en même temps que d’autre processus sont entrain d’insert, update ou supprime des données dans la base, sans que leurs requêtes soit perdus. Autrement dit, comment on peut faire des verrous on base de donner Oracle 9i.

    Sachant que je vais faire plusieurs requêtes SQL pour copier les tables de la base de données. Je veut qu’avant d’exécuter tous mes requêtes, tous les requêtes extérieur envoyées par d’autres utilisateurs, restent en attentes.

    (Un Verrouillage niveau Oracle/SQL et pas niveau Java)
    C'est la mauvais solution d'écrire un traitement en JDBC!
    Pour les verrous cherche Select ... For Update ou Lock Table...
    Mais la vrai question est "a tu vraiment besoin de faire ça"

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par lalystar Voir le message
    Bonjour,


    Pas du tout, tu peux spécifier les colonnes dans la table de destination. Par défaut tu as un commit a chaque ligne, mais tu peux le changer avec l'option COPYCOMMIT de SQL*Plus.

    Pour moi y a pas plus simple pour copier des données entre deux bases, apres c'est toi qui voit...

    Laly.
    En fait moi j’ai deux tables dans deux différantes base de données. Les tables n’ont pas les même noms, ni les même non de colonnes. En plus dans certain colone j’ai le type « TimeStamp » qui n’est pas géré par la commande COPY (je ne sais pas si je peut faire un transfgert vers le type ‘DATE’. J’aime bien si vous pouvez me données un simple exemple de la commande ‘COPY’ on tenant compte des de ce que je vient dire (non différant, timestamp….).

    Si non, pour avoir une bonne idée sur ce que je veux faire. Je veut faire un programme qui à chaque heur mis à jour la table d’une autre qui est sur une autre base de données.(donc à chaque fois il ne faut qu’ajouter que les mise à jour (UPDATE, INSERT,DELETE).

    N’oubli surtout pas que je suis très intéresser pour savoir comment utiliser la commande ‘COPY’ et de me donnée un exemple (car j’ai pas vraiment trouvé un bon sur le net –juste des exemple ridicule-)


    Je vais juste mettre un exemple que j’ai compris d’un tutorial, et j’aime bien si vous pouvez me dire s’il est correcte ou pas. Je suppose que j’ai les tables suivantes :
    TbSource (Nu :NUMBER, Nom : VARCHAR, YearsOld : TIMESTAMP)
    TbDestination (Numero : NUMBER, Age: TIMESTAMP)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COPY FROM   userMoi1/MonMotdepass1@identifiantDEConnection1  To  userMoi2/MonMotdepass2@identifiantDEConnection2  INSERT     TbDestination (Numero, Age)
    USING SELECT Nu, YersOld FROM  TbSource;

    (Si ce que j’ai écris est correct, j’aime bien si vous pouvez me données une solution pour les TIMESTAMP car ils ne sont pas gère par la commande COPY)

  8. #8
    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
    The COPY command is not being enhanced to handle datatypes or features introduced with, or after Oracle8. The COPY command is likely to be made obsolete in a future release. For COPY command details and syntax, see Appendix B, "SQL*Plus COPY Command".

  9. #9
    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
    Salut


    Au niveau du timestamp, je pense pas que ce soit bloquant, tu peux faire une conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select to_date(to_char(current_timestamp, 'dd/mm/yyyy hh24:mi:ss'), 'dd/mm/yyyy hh24:mi:ss') from dual
    Apres y a surement moyen de faire ca plus joliment...


    Je veut faire un programme qui à chaque heur mis à jour la table d’une autre qui est sur une autre base de données.(donc à chaque fois il ne faut qu’ajouter que les mise à jour (UPDATE, INSERT,DELETE).
    As tu regardé du cote des vues materialisées dans ce cas ? (ta table répliquée, elle est en lecture seule ?) :
    http://www.psoug.org/reference/materialized_views.html
    L'exemple "Complete Refresh" ou peut etre meme que tu pourras faire propager les modifs en temps reel avec un refresh fast...


    Laly.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/01/2016, 13h08
  2. Sécurisation des informations d’une base MySql
    Par francoisch dans le forum Langage
    Réponses: 4
    Dernier message: 31/08/2012, 19h14
  3. Structure des informations et base de données
    Par Jolt0x dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/02/2010, 21h23
  4. Copier une base de donnée vers une autre
    Par maxeur dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 04/09/2008, 09h37
  5. [MySQL] Ajouter des informations à notre base de données
    Par wild_seven dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 26/12/2005, 17h15

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