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

Import/Export Oracle Discussion :

Export Données ORACLE


Sujet :

Import/Export Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Export Données ORACLE
    Bonjour,

    Je souhaite exporter des tables ORACLE en CSV avant purge. Je ne dispose pas de l'accès aux outils oracle exp, ... (uniquement un Toad, python, ...)

    Je viens de faire un Python (débutant) qui descend très rapidement ces données en CSV ce qui me convient parfaitement.
    Néanmoins, c'est la construction du curseur qui est longue et gourmande, après la descente en CSV est ultra rapide.

    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
     
    # -*- coding: utf-8 -*-
    import cx_Oracle
    import csv
     
    db = cx_Oracle.connect('U', 'P', 'BDD', encoding="utf-8", nencoding="utf-8")
     
    cur = db.cursor()
    cur.execute('select * from MA_GROSSE_TABLE')
     
    csv_file = open("C:\\Users\\MA_GROSSE_TABLE.csv", "w", encoding='utf8')
    writer = csv.writer(csv_file, delimiter=';', lineterminator="\n", quoting=csv.QUOTE_NONNUMERIC)
     
    i = 0
     
    for result in cur.fetchmany(10000000):
        i = i+1
        checkdigit = 9 - (i-1) % 1000
        if checkdigit == 0:
            print(i)
        writer.writerow(result)
     
    cur.close()
    db.close()
    csv_file.close()
    La question en fait c'est, Y a t-il un moyen avec Oracle de lire une table en séquentiel sans la phase longue de construction du curseur en limitant au maximum la charge sur le serveur ?
    J'ai vraiment juste besoin des data non triées au cas ou

    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Bonjour,

    Si tu as Toad pourquoi n'utilises-tu pas la fonction d'export de Toad?
    Que veux-tu dire par "phase longue de construction du curseur"? Un curseur n'est qu'une bête référence vers une requête. Quelle est la volumétrie de ta table?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Le PB c'est que j'ai des table de plusieurs dizaines de millions d'enregistrements.
    J'ai bien fait un export TOAD mais il me faut au moins une dizaine d'heure par table ce qui est possible bien sur.

    Quand je parle de phase de construction, je voulais dire qu'un select * from doit d’abord positionner le résultat dans un buffer (il s'execute completement) avant de laisser la main l'envoi vers le fichier.
    J'aurai voulu un moyen de ne pas passer par cette phase intermédaire et faire un dump direct des données. Je ne suis pas expert

    Merci.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Oui le plus rapide reste quand Data Pump avec l'option parallel. Sinon tu peux lancer plusieurs processus Python concurrents en découpant ta requête en plusieurs morceaux. Si tu as une colonne sur laquelle tu peux te baser (un id, une date..) par exemple tu pourrais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * from ma_grosse_table
    where id between 1 and 100000;
     
    select * from ma_grosse_table
    where id between 100001 and 200000;
    ...

    Ca te générera plusieurs fichiers que tu pourras fusionner une fois finis.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Très bonne idée, je vais partir la dessus.

    Merci beaucoup.

Discussions similaires

  1. Import et Export une base de donnée Oracle
    Par Sabact dans le forum Oracle
    Réponses: 22
    Dernier message: 29/09/2006, 17h49
  2. Comment exporter une base de donnée oracle à l'aide de EXP
    Par med_anis_dk dans le forum Import/Export
    Réponses: 6
    Dernier message: 16/06/2006, 14h27
  3. exporter une base de donnée oracle
    Par med_anis_dk dans le forum Oracle
    Réponses: 3
    Dernier message: 14/06/2006, 20h28
  4. Export de données oracle
    Par morteza dans le forum Oracle
    Réponses: 7
    Dernier message: 08/03/2006, 17h09
  5. Export de données Oracle vers Excel via PHP
    Par Yanos dans le forum Oracle
    Réponses: 1
    Dernier message: 11/01/2006, 18h11

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