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 :

Création table à partir de dumpfile


Sujet :

Import/Export Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut Création table à partir de dumpfile
    Bonjour,

    Je voudrais créer une table externe DEPT_EXT, par exemple, à partir d'un dumpfile DEPT.DMP,
    j'utilise alors le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE HR.DEPT_EXT (
    deptno NUMBER(2),
    dname VARCHAR2(14),
    loc VARCHAR2(13)
    )
      ORGANIZATION EXTERNAL (
         TYPE ORACLE_DATAPUMP
         DEFAULT DIRECTORY dtpump
         LOCATION ('dept.dmp')
      );

    L'opération fonctionne bien et je peux faire tous types de SELECT sur la table externe ainsi générée,
    Sachant que le fichier DEPT.dmp a été généré à partir de la base source via le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    create table DEPT_EXT
    organization external (
    type oracle_datapump 
    default directory dtpump
    location ('DEPT.dmp')
    )
    as select * from scott.dept;
    En essayant la même chose avec un DUMPFILE provenant de la même base source mais généré par le biais de l'utilitaire EXPDP, la table est créée mais le SELECT me sort l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ora-31619 invalid dump file
    Quelqu'un est il déjà passé par là ?

    Merci par avance.

    N.B
    J'utilise : Oracle 10.2.0.3.0 / Windows 2003 Server

  2. #2
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    à ma connaissance tu ne peux pas monté un datapump dans une table externe, en effet le datapump n'est pas un fichier texte mais un fichier fabriqué par oracle lors de l'export, seul l’interpréteur impdp peut le lire.
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  3. #3
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Merci Z3phur pour la réponse,

    Si ta réponse est définitive je serai vraiment déçue, j'ai beacoup misé sur cette possibilité d'exploiter les tables d'un dump sans le charger dans la base, notamment lorsque l'on parle d'un driver ORACLE_DATAPUMP qui selon son nom devrait faciliter l'accès aux dumps pour en extraire les données,

    Sinon je ne vois pas l'utilité de passer par les tables externes puisque on a EMPDP & EXPDP et qu'on est obligé de faire l'import d'un DUMP.

    Bref,

    Dois-je mettre la baslise RESOLU ?

    ou bien reste t il encore de l'espoir ?

  4. #4
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    je me suis trompé, tu peux bien le faire

    cf : http://coursdba.estsurinternet.com/c...ts-de-donnees/

    mais il faut que tu déclare la liste des colonnes dans ta création de table externe.

    Désolé de l'erreur et merci j'ai appris encore un truc aujourd'hui.
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  5. #5
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Merci de me redonner l'espoir, mais ... mon problème reste posé.

    En effet, tu parles d'énumération de colonnes dans la définition de ma table externe, c'est exactement ce que j'ai fais , voir début de mon post, d'ailleurs je me suis servie du même lien que tu viens de m'indiquer pour élaborer ma syntaxe,

    Syntaxe qui fonctionne jusqu'au bout, je rappelle, lorsque le dump provient lui même d'une table externe

    Par contre, lorsque le dump provient d'une opération d'export avec EXPDP, Cette même syntaxe continue à fonctionner pour générer la tabale externe (dans la base cible) mais qui reste une table non expoloitable, elle génère l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ora-31619 invalid dump file
    lorsqu'on exécute un SELECT.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Bonjour,

    ATTENTION - cette solution ne peut être viable dans le temps au niveau performances.

    Vous parlez d'interrogations SQL (SELECT) de cette table, mais c'est j'espère pour réalimenter d'autres tables que physiquement vous pourrez indexer, stater par exemple

    j'ai un peu de mal à comprendre l'intérêt de cette mise en place, sachant qu'un import en mode include fonctionne si bien ?
    PpPool

  7. #7
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    peux-tu nous donner la commande de l'export s'il te plait.

    puis en dessous l'ordre de creation de ta table externe et enfin la commande de création du directorie
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  8. #8
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Afin d'être sûre, j'ai tout refais avec commme exemple simple la table SCOTT.DEPT


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    conn system/****
     
     
    CREATE TABLE DEPT_EXT
    organization external (
    type oracle_datapump 
    DEFAULT directory datapump
    location ('DEPT.dmp')
    )
    AS SELECT * FROM scott.dept;

    Un fichier DUMP du nom de DEPT.DMP est alors créé au niveau du répertoire C:\DATAPUMP

    puisque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    SQL> select * from dba_directories;
     
    OWNER      DIRECTORY_NAME  DIRECTORY_PATH
    ---------- --------------- -----------
    SYS        DATAPUMP        c:\datapump
    ...
     
    et l'utilisateur "SYSTEM" est un DBA qui a donc bel et bien les privilège READ & WRITE sur la directory DATAPUMP
    Ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE HR.DEPT_EXT (
    deptno NUMBER(2),
    dname VARCHAR2(14),
    loc VARCHAR2(13)
    )
      ORGANIZATION EXTERNAL (
         TYPE ORACLE_DATAPUMP
         DEFAULT DIRECTORY datapump
         LOCATION ('dept.dmp')
      );
    resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> select * from hr.dept_ext;
     
        DEPTNO DNAME          LOC
    ---------- -------------- -------------
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON
    Par contre , quand je refait avec un dumpfile provient de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    expdp system/**** dumpfile=dept.dmp tables=scott.dept directory=datapump

    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
     
    SQL> drop table hr.dept_ext;
     
    Table dropped.
     
    SQL> CREATE TABLE HR.DEPT_EXT (
      2  deptno NUMBER(2),
      3  dname VARCHAR2(14),
      4  loc VARCHAR2(13)
      5  )
      6    ORGANIZATION EXTERNAL (
      7       TYPE ORACLE_DATAPUMP
      8       DEFAULT DIRECTORY datapump
      9       LOCATION ('dept.dmp')
     10    );
     
    Table created.
    C'est bien la création a lieu , Mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select * from hr.dept_ext;
    select * from hr.dept_ext
    *
    ERROR at line 1:
    ORA-29913: error in executing ODCIEXTTABLEOPEN callout
    ORA-31619: invalid dump file "c:\datapump\dept.dmp"
    ORA-06512: at "SYS.ORACLE_DATAPUMP", line 19

  9. #9
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    Merci cela m’éclaire plus.

    essai de faire ton export avec scott et non pas system.
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  10. #10
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Pour répondre à ppPool,

    il se trouve que parfois on a besoin de consulter une donnée qui figure dans une ligne d'une table qui fait partie d'un dumpfile, qui lui, est constitué de plusieurs centaines de tables avec quelques milliers de de lignes sans compter indesx et autres machins,

    ce serait génial de pouvoir consulter la donnée sans être obligé d'importer tout le bloc pour le redétruire tout de suite après !

  11. #11
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Pareil !!

    j'ai refais l'export avec SCOTT en lui donnant bien sûr les privilèges sur le directory, ça ne change absolument rien !

  12. #12
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    As-tu essayé de créer la table externe dans le schéma scott aussi?

    J'y vais à taton....
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  13. #13
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    oui tout à fait,

    j'ai fais la même chose sur SCOTT et ça donne toujours la même erreur !

  14. #14
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Je ne savais pas que l'on pouvait faire du datapump et des tables externes mais après tout ce que j'ai vu et lu, la table externe ne prends pas un fichier généré par expdp mais par le create table ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE DEPT_EXT
    organization external (
    type oracle_datapump 
    DEFAULT directory datapump
    location ('DEPT.dmp')
    )
    AS SELECT * FROM scott.dept;
    Pour moi oracle n'arrive pas avec les tables externes à interpréter le datapump. J'en reviens à ma première réponse.

    Je vais encore regarder, et surtour tester ...
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  15. #15
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Salut Z3phur,
    Du nouveau ?

  16. #16
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Pas encore, je ne suis pas trop disponible aujourd'hui pour continuer les recherches. Si quelqu'un à une idée...
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

  17. #17
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    En tout cas , merci pour tout Z3fur

    de mon coté, je vais quand même continuer à creuser, même si je commence à perdre espoir quant à la faisabilité de ce que je demande.

  18. #18
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour Isabella,

    J'ai bien peur d'amener de mauvaises nouvelles :
    Le 5 février 2009, Tom Kyte a dit :
    A create table to be read from cannot use a full blown datapump file - there is a lot of extraneous stuff in there. You create the dmp file using CREATE TABLE ORGANIZATION EXTERNAL AS SELECT
    (source : http://asktom.oracle.com/pls/apex/f?...61800346823884)

    De plus, la doc Oracle ne dit absolument pas qu'il est possible d'utiliser un dumpfile généré par expdp dans une table externe :
    The ORACLE_DATAPUMP access driver can be used to populate a file with data. The data in the file is written in a binary format that can only be read by the ORACLE_DATAPUMP access driver. Once the file has been populated with data, that file can be used as the dump file for another external table in the same database or in a different database.
    (source : http://docs.oracle.com/cd/B19306_01/...r.htm#SUTIL500)

    J'ai bien peur que ce ne soit tout simplement pas possible...

    Bon courage!

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  19. #19
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    Merci Arkhena de confirmer avec preuve à l'appuie de ce que je pensais et disais.

    Cordialement,
    ==========================================
    La justice sans la force est impuissante, la force sans la justice est tyrannique...

Discussions similaires

  1. [AC-2010] Création Table à partir du Contenu d'une requête Transform
    Par sylgar dans le forum Access
    Réponses: 1
    Dernier message: 18/04/2014, 09h01
  2. Réponses: 1
    Dernier message: 17/04/2014, 12h29
  3. Création table à partir d'effectif
    Par frannzz dans le forum SAS Base
    Réponses: 2
    Dernier message: 27/04/2011, 13h19
  4. Création table à partir table dans autre base
    Par jcha dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2008, 16h41
  5. création de tables à partir d'un fichier XML
    Par magic charly dans le forum Oracle
    Réponses: 2
    Dernier message: 03/04/2006, 13h39

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