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 :

Automatiser les extractions.


Sujet :

Import/Export Oracle

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut Automatiser les extractions.
    Bonjour
    je suis confronté à un problème récurrent qui est lourd à faire à la main. et que je ne sais automatiser.

    J'ai dans une Appli un grands nombre de tables et deux bases
    une pour la prod une pour les tests

    lorsqu'une erreur arrive en prod j'ai besoin d'extraire des enregistrement de ma base de prod pour les passer sur la base de test a fin de reproduire l'erreur.

    à chaque fois j'ai besoin d'extraire un ou deux éléments qui sont répartis dans diverses tables organiser ainsi
    une table maitre et x table fille avec une clef externe.

    Ma table maitre s'appelle Master sa clef primaire mst_id et toute les table fille pour un élément donner vont s'appeler
    MyType_xxxxxx ou MyType est le type de l'élément à extraire. biensur aucune de ses table n'a la même structure.

    pour le moment j'utilise à la mano sqldeveloppeur et je fait un export table par table en donnant le mst_id à chaque export


    je me demandais s'il était possible de faire une procédure
    qui prends en paramètre un mst_id une chaine MyType
    qui exporte toutes les tables MyType_xxxxxx et Master avec l'id mst_id

    pour obtenir la liste des table c'est facile
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT table_name FROM user_table WHERE table_name LIKE :mytype || '%';

    mais je ne sais pas comment faire l'export
    Je n'ai pas accès au file systeme du serveur
    je n'ai qu'un client SQL distant

    si quelqu'un a une idée pour que je puisse commencer
    A+JYT

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Database link + PlSql
    Bonjour,

    Je comprends qu'il faut recopier de prod vers test les lignes des tables MyType% où mst_id = :MyMst_id (deux paramètres)

    Pour déménager les données sans passer par le filesystem tu pourrais utiliser un database link. En travaillant depuis la base de test tu pourrais "aspirer" les valeurs des tables de la base de prod.

    Ensuite un code PlSql dont l'algo serait :

    Une boucle sur les tables dont le nom est donné par ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Pour chaque NomTable
      un ordre sql dynamique :
      "insert into [NomTable] select * from [NomTable]@prod where mst_id = [MyMst_id]"
    Finpour
    Ai-je bien compris ?
    Si c'est bien l'idée dis le je peux préciser le code si tu le désires.

    Pozzo

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    bonjour

    c'est bien dans l'ordre d'idée
    mais mal heureusement les base ne sont pas sur les mêmes réseaux

    ce que je cherche à générer c'est un fichier d'inserts
    un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export_data('DELIVRY','00012423564789');
    qui me donne un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    insert into Master (id, ....) Values ('00012423564789' .....;)
     
    insert into DELIVRY_E1ADRM ....
    insert into DELIVRY_E1ADRM ....
    insert into DELIVRY_E1ADRM ....
    insert into DELIVRY_E1ADRM ....
    insert into DELIVRY_E1ADRM ....
    insert into DELIVRY_E1ADRM ....
     
    insert into DELIVRY_E1ED24 ....
    insert into DELIVRY_E1ED24 ....
     
    etc.
    merci tout de même.
    ça donne une perspective

    A+JYT

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Procéder par export / import
    Bonjour,

    Et il faut obligatoirement passer par un script sql ?
    Car il doit être possible de procéder comme ça :

    1 Lister les tables et générer des parfile d'export expdp en utilisant la clause QUERY pour limiter les lignes au :MyMstId qui va bien
    2 Lancer successivement les exports expdp parfile=expdp_[NomTable].par
    3 Importer les fichiers générer par expdp dans la base cible

    Ca évite de se prendre la tête avec les noms de colonnes qu'on ne connaît pas.
    Ca impose d'avoir accès à l'OS de la base cible pour lancer le script sql puis lancer les expdp et les impdp.

    Non ?
    Pozzo

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    oui j'ai bien pensé passé par des export sur les machine distante
    mais en fait je n'ai accès ni à l'une ni à l'autre

    A+JYT

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Hu ? Pas d'accès
    Là je ne suis plus.

    Extraire les scripts c'est du sql.
    Donc tu as accès à la machine source via sqlnet.
    Donc tu peux faire de l'export / datapump

    Une fois les scripts générés il va falloir les lancer.
    Donc encore une fois du sqlplus / autre => sqlnet.
    Donc on peut importer.
    Sinon comment penses tu exploiter les scripts que tu auras généré ?

    exp / imp / expdp / impdp c'est comme sqlplus ça ne demande que sqlnet.

    Pozzo.Dérouté

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    j'ai sqldeveloppeur
    qui est un outil écrit en java qui accède à la base via jdbc

    je peux ouvrir un script sql dans cet outil mais je n'ai pas de ligne de commande

    datadump est à ma connaissance un exécutable sur la machine
    pas une commande SQL

    donc même dans SQLNet je ne vois pas comment je peux lancer un commande unix sur la machine distante et encore moins comment récupérer le fichier qui serait crée sur celle-ci


    A+JYT

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut sqlnet et exp / imp
    Bonjour,

    Ok pour jdbc.

    C'est la dernière fois que j'évoque exp / imp et sqlnet car je ne veux pas t'indisposer en répondant à coté mais pour être sûr qu'on se comprenne bien :

    1 Tu pourrais installer sqlnet client et expdp / impdp sur ta machine
    2 Tu pourrais lancer depuis ta machine l'export qui se connecterait au serveur et extraierait les données et produirait un fichier sur ta machine. Pas d'accès à OS distant là dedans.
    3 Idem pour l'injection dans la base cible sans accéder au serveur qui l'héberge.

    Pozzo

  9. #9
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    merci bien
    je vais regarder comment mettre ça en oeuvre

    A+JYT

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut En PlSql
    Dans un style moins léger mais plus proche de ce que tu évoques voici une procédure qui génère le script SQL.

    Ca marche comme ça :
    Param1 : Un expression régulière pour trouver le nom des tables
    Param2 : La clause where sur les tables s'il y en a une
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab_dat_extraction(ps_joker => '%ADD%', ps_whr_clause => 'Where type = 5');
    C'est sensé générer un script de renseignement des tables de nom contenant ADD pour le champ type = 5.
    Je n'ai pas traité les dates ni les valeurs nulles. Ca veut dire que c'est un peu brut de décoffrage et qu'on est pas encore rendu.
    Mais c'est une trame qui marche sur des tables avec number et varchar2.

    La procédure génère un bloc PlSql qu'elle exécute à la volée pour générer le script sql.
    Comme il y a 95 lignes je le mets en pièce jointe.

    Pozzo
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    merci encore
    A+JYT

Discussions similaires

  1. [Smarty] Automatiser les appels des fichiers externes (CSS/JS etc)
    Par speedev dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 15/06/2006, 13h43
  2. [Plugin] plugin eclipse pour automatiser les tests
    Par soulhouf dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 15/03/2006, 16h19
  3. automatiser les sauvegardes avec mysql administrator
    Par beckham07 dans le forum Outils
    Réponses: 1
    Dernier message: 09/03/2006, 13h58
  4. [macro] Automatiser les macros
    Par argv666 dans le forum Access
    Réponses: 6
    Dernier message: 08/11/2005, 17h37
  5. [Bean] Automatiser les appels de setters / getters
    Par shinchun dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/12/2004, 15h18

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