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 :

Import d'une table avec un blob


Sujet :

Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    CMA-CGM
    Inscrit en
    Novembre 2005
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : CMA-CGM
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2005
    Messages : 531
    Points : 137
    Points
    137
    Par défaut Import d'une table avec un blob
    Bonjour... (9i sur Windows 2000 pro)

    J'ai un big problème !
    J'importe une base de recette sur une base de prod... OK

    Quand j'effectue les stats, je me rends compte que ma table DOCUMENT qui contient un LOB, crée des index complètement farfelus...
    Voici la définition de ma table... elle contient un index sur le LOB...


    CREATE
    TABLE TEST.DOCUMENT
    (
    MA_DONNEE
    NUMBER NOT NULL
    CONSTRAINT etc...

    )
    LOB(MON_LOB) STOREAS SYS_LOB0000032689C00005$$
    (
    TABLESPACE MON_TABLESPACE
    STORAGE(INITIAL etc...
    CHUNK 8192
    PCTVERSION 10
    )
    etc...
    /
    CREATEINDEX TEST.DOCUMENT_INDEX
    ON TEST.DOCUMENT(MON_LOB)
    TABLESPACEDEFAULT
    LOGGING
    PCTFREE 0
    STORAGE(PCTINCREASE 0)
    NOPARALLEL
    NOCOMPRESS


    Il semblerait que, lors de l'import, la table DOCUMENT ne recrée pas correctement les index issus de la table DOCUMENT... et je ne sais pas pourquoi ...

    Voici une représentation de ma table de recette qui est ok !

    TEST.DOCUMENT => 32816 rows
    TEST.DR$DOCUMENT_INDEX$I => 85 173 rows
    TEST.DR$DOCUMENT_INDEX$K => 3843 rows
    TEST.DR$DOCUMENT_INDEX$N => 30506 rows
    TEST.DR$DOCUMENT_INDEX$R => 22 rows
    Et celle de ma table de prod apprès l'import...
    TEST.DOCUMENT => 32816 rows
    TEST.DR$DOCUMENT_INDEX$I => 95927 rows
    TEST.DR$DOCUMENT_INDEX$K => 45553,125695844 rows !
    TEST.DR$DOCUMENT_INDEX$N => 0 rows !
    TEST.DR$DOCUMENT_INDEX$R => 22 rows
    Il semblerait que l'import fasse n'importe quoi...

    J'ai plusieurs questions à poser :
    1°) Comment et pourquoi Oracle crée-t-il ses index DR$ORACLE_INDEXn ?
    2°) Avez-vous déjà eu le cas d'un Import qui se passerait mal, quand oracle doit re-creer des index LOB ?
    3°) Avez-vous une solution pour empêcher ça ?
    4°) Quand je rebuilt DOCUMENT_INDEX, il me plante en ORA_29871 : Invalid alter option for a domain index
    5°) Quand je drop et re-crée DOCUMENT_INDEX, il me plante en ORA_2327 : Cannot create index on expression with datatype LOB (alors qu'il a bien créé l'index via l'import)

    Bref, je suis un peu perdu... Pouvez-vous m'aider ?

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Les domain index sont à priori utilisés par Oracle Text.

    Pour analyser complètement votre problème, il faudrait savoir:
    1. est-ce que votre base utilise cette option ?
    2. donner le code complet de création des tables et des index
    3. quelle commande affiche les statistiques ?
    4. comment est réalisé l'export et l'import (commandes complètes) ?
    Vérifiez avec que lorsque vous reconstruisez les index vous utilisez exactement la même commande que celle du fichier export.

    Normalement on ne peut pas créer des index sur des LOB directement. Mais l'option Oracle Text peut le faire avec un type d'index spécial.

    ORA-02327: cannot create index on expression with datatype string Cause: An attempt was made to create an index on a non-indexable expression.
    Action: Change the column datatype or do not create the index on an expression whose datatype is one of VARRAY, nested table, object, LOB, or REF

  3. #3
    Membre habitué
    Homme Profil pro
    CMA-CGM
    Inscrit en
    Novembre 2005
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : CMA-CGM
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2005
    Messages : 531
    Points : 137
    Points
    137
    Par défaut
    Merci Pifor pour votre réponse qui, bien entendu, engendre d'autres questions de ma part...
    1°) Comment savoir si ma base de production utilise 'Oracle text' ?
    2°) Si j'ai bien compris le truc, 'Oracle text' sert à faire des recherches sur les colonne LOB's... avec des mots clés, des filtre etc... me trompes-je ?
    3°) J'ai effectué l'import savec l'otion indexes=no et en récupérant le fichier de création des index que voici :



    CREATE
    INDEX TEST.DOCUMENT_INDEX ON TEST.DOCUMENT ("MON_LOB" ) INDEXTYPE
    IS CTXSYS.CONTEXT PARAMETERS ('datastore CTXSYS.DIRECT_DATASTORE
    filter CTXSYS.INSO_FILTER format column MA_COLONNE'
    ) ;


    BEGIN
    ctxsys.driimp.create_index(
    'DOCUMENT_INDEX','DOCUMENT',USER,
    'ID_OBJ','2','OB_DOC','113',
    '0','32207','8130','32208',
    NULL, 'CD_FRM_DOC',NULL, 0,NULL );


    ctxsys.driimp.set_object(
    'DATASTORE','DIRECT_DATASTORE',0);

    ctxsys.driimp.set_object(
    'DATATYPE','LOB_DATATYPE',0);

    ctxsys.driimp.set_object(
    'DATAX','SYNCH_DATAX',0);

    ctxsys.driimp.set_object(
    'FILTER','INSO_FILTER',0);

    ctxsys.driimp.set_object(
    'SECTION_GROUP','HTML_SECTION_GROUP',0);

    ctxsys.driimp.set_object(
    'LEXER','BASIC_LEXER',0);

    ctxsys.driimp.set_object(
    'WORDLIST','BASIC_WORDLIST',2);
    ctxsys.driimp.set_value(
    'STEMMER','4');
    ctxsys.driimp.set_value(
    'FUZZY_MATCH','7');

    ctxsys.driimp.set_object(
    'STOPLIST','BASIC_STOPLIST',200);
    ctxsys.driimp.set_value(
    'STOP_WORD','a');

    etc...
    ctxsys.driimp.set_value('STOP_WORD','les');
    etc...
    ctxsys.driimp.set_value('STOP_WORD','puis');
    etc...
    ctxsys.driimp.set_value(
    'STOP_WORD','puisque');

    etc...
    ctxsys.driimp.set_object('STORAGE','BASIC_STORAGE',2);
    ctxsys.driimp.set_value(
    'R_TABLE_CLAUSE','lob (data) store as (cache)');
    ctxsys.driimp.set_value(
    'I_INDEX_CLAUSE','compress 2');

    commit;
    COMMIT; END;
    j'ai droppé et re-créé sous sqlplus, l'index mais le résultat est le même !

    Pour votre question 3 : J'ai pas compris ce que vous me demandez...
    Pour la 4 : Pas d'export ni d'import full=n... j'exporte et importe uniquement le schéma !

    Vous-faut-il d'autres éclaircissements ?

    Merci d'avance pour vos réponses !




  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    1°) Comment savoir si ma base de production utilise 'Oracle text' ?
    Je ne sais pas exactement comment le vérifier. Il faudrait peut-être demander à votre administrateur.

    2°) Si j'ai bien compris le truc, 'Oracle text' sert à faire des recherches sur les colonne LOB's... avec des mots clés, des filtre etc... me trompes-je ?
    Non, c'est ça.

    3°) J'ai effectué l'import savec l'otion indexes=no et en récupérant le fichier de création des index que voici :
    Avec des types d'index spécifiques, il vaut peut-être mieux faire un export complet du schéma et un import complet du schéma. Il faudrait aussi vérifier que Oracle Text est installé sur la base cible comme sur la base source.

  5. #5
    Membre habitué
    Homme Profil pro
    CMA-CGM
    Inscrit en
    Novembre 2005
    Messages
    531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : CMA-CGM
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2005
    Messages : 531
    Points : 137
    Points
    137
    Par défaut
    Malheureusement Pifor, c'est moi l'administrateur et je pleure !

    Y'a néanmoins du nouveau... en re-créant mon index de ma base de recette, après l'analyze, je me suis apperçu qu'elle donnait les mêmes choses que la based prod ! C'est à dire :

    TEST.DOCUMENT => 32816 rows
    TEST.DR$DOCUMENT_INDEX$I => 95927 rows
    TEST.DR$DOCUMENT_INDEX$K => 45553,125695844 rows !
    TEST.DR$DOCUMENT_INDEX$N => 0 rows !
    TEST.DR$DOCUMENT_INDEX$R => 22 rows
    Mes utilisateurs ont tésté et la base de recette réagit bien... Si ça se trouve, le problème des 45553,125695844 rows n'en est pas un !

    C'est quand même bizare qu'Embarcadero (Equivalent de TOAD) me donne un nombre de Rows si mal fichues... et c'est pour ça que j'ai paniqué lors de la mise en prod ! Je n'ai toujours pas compris pourquoi !

    Je pense que la gestion oracle des index LOB est très compliquée... qu'elle engendre des tas d'objets que nous ne maîtrisons pas !

    Merci quand même pour vos explications...

    PS : avant de faire l'Import avec indexes=no, j'ai bien sûr effectué un import 'normal'... de toutes façon, le résultat est le même !

  6. #6
    j6m
    j6m est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 84
    Points
    84
    Par défaut
    quels paramètres, l'analyze?
    quand la pierre tombe sur l’œuf, malheur à l’œuf
    quand l’œuf tombe sur la pierre, malheur à l’œuf

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

Discussions similaires

  1. Import d'une table avec un blob
    Par genio dans le forum Import/Export
    Réponses: 1
    Dernier message: 02/10/2012, 16h20
  2. Import d'une table avec un blob
    Par genio dans le forum Import/Export
    Réponses: 0
    Dernier message: 01/10/2012, 12h29
  3. Réponses: 0
    Dernier message: 16/11/2007, 09h05
  4. Importation d'une table excel avec nom paramétrable
    Par mastasushi dans le forum Access
    Réponses: 4
    Dernier message: 13/02/2007, 19h20
  5. import d'une table avec HUGEBLOB trop log
    Par tonton62 dans le forum Oracle
    Réponses: 1
    Dernier message: 05/04/2006, 10h21

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