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

ODI (ex-Sunopsis) Discussion :

ODI11g - LKM File to Oracle - SQL loader


Sujet :

ODI (ex-Sunopsis)

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut ODI11g - LKM File to Oracle - SQL loader
    Bonjour,

    Je souhaite extraire des données d'un fichier texte pour les mettre dans une base oracle.

    Je passe par le LKM par défaut d'ODI 11g "File to Oracle (SQLLDR)" qui utilise SQL Loader.

    Mon erreur intervient au moment du call avec l'import de données dans la table C$ d'ODI.

    Il crée bien mon .out, le .ctl mais il ne fait pas de .log
    Je n'ai pas d'autre fichier, pas de .bad puisqu'il n'arrive pas à charger.

    Ci dessous le ctl généré :

    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
    OPTIONS (
    SKIP=0,
    ERRORS=0,
    DIRECT=FALSE
    )
    LOAD DATA
    INFILE "U:/ODI/IN/Test_Import_txt.txt" "STR x'0D0A'"
    BADFILE "U:/ODI/IN/Entete.bad"
    DISCARDFILE "U:/ODI/IN/Entete.dsc"
    DISCARDMAX 1
    INTO TABLE ODITMP."TC$_0Entete_Cible"
     
    (
    CODSEG POSITION(1:3) ,
    DATESEG POSITION(4:11) 
    )
    L'erreur n'est pas parlante, ça me dis d'aller voir le fichier log (pas créer) et donne l'erreur en ligne 34, qui correspond au raise qui affiche le message d'erreur.

    Bref je ne sais pas ou est le problème, je ne sais même pas ou regarder.

    Please help !

    Celine

  2. #2
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    bonjour

    tu n'as rien dans le journal d' exécution ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Dans l'operator j'ai le code suivant dans l'étape "Call sqlldr" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    org.apache.bsf.BSFException: exception from Jython:
    Traceback (innermost last):
      File "<string>", line 32, in ?
    Load Error: See U:/ODI/IN/Entete.log for details
     
    	at org.apache.bsf.engines.jython.JythonEngine.exec(JythonEngine.java:146)
    	at com.sunopsis.dwg.codeinterpretor.SnpScriptingInterpretor.execInBSFEngine(SnpScriptingInterpretor.java:345)
    	at 
    (...)
    Le code jython généré est celui-ci :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    import java.lang.String
    import java.lang.Runtime as Runtime
    from jarray import array
    import java.io.File
    import os
    import re
    import javaos
     
     
    def reportnbrows():		
     
    	f = open(r"U:/ODI/IN/Entete.log", 'r') 
    	try:
    		for line in f.readlines():
    			if line.find("MAXIMUM ERROR COUNT EXCEEDED")>=0 :
    				raise line
    	finally:
    		f.close() 
     
     
    ctlfile = r"""U:/ODI/IN/Entete.ctl"""
    logfile = r"""U:/ODI/IN/Entete.log"""
    outfile = r"""U:/ODI/IN/Entete.out"""
    oracle_sid=''
    if len('ODITMPDBLK')>0: oracle_sid = '@'+'ODITMPDBLK'
     
    loadcmd = r"""sqlldr ODITMP/<@=snpRef.getInfo("DEST_PASS") @>%s control="%s" log="%s" > "%s" """ % (oracle_sid,ctlfile, logfile, outfile)
     
    rc = os.system(loadcmd)
     
    if rc <> 0 and rc <> 2:
            raise "Load Error", "See %s for details" % logfile
     
    if rc==2:
            reportnbrows()
    Je pense que le problème vient de la variable DEST_PASS qui n'est pas remplacer par sa valeur.

    A coté de ça, j'ai lancer le .ctl généré et cela fonctionne bien.

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Personnellement j'utilise une très vielle version , mais le principe doit être le même.

    Je déclare mon fichier dans la topology, je fais le reverse dans le modèle de données. Cela me donne une table.

    Je fais mon interface en prenant en source cette table représentant le fichier et une table cible.

    Et la plus part du tant j'utilise ISO File to SQL même si je suis en Oracle ...

    par contre pour ma part je ne vois pas de code Java ou Jython ....

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Oui, le LKM File to SQL ne travail pas avec sqlloader et n'a pas de code jython.
    Je voudrais utiliser SQLLoader car c'est beaucoup plus performant.

    J'ai essayé de mettre le mot de passe en dur, à la place du getinfo (DEST_PASS) mais ça ne marche toujours pas

  6. #6
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    tu as essayé sans passer par ODI mais directement sous Oracle ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Le but principal est l'utilisation d'ODI ici, mais sinon on à exécuter le ctl sous Oracle et ça fonctionne

    Après je souhaiterai exécuter cette ligne sous Oracle ??

    sqlldr ODIUSER/ODIPASSWORD%s control="%s" log="%s" > "%s" """ % (oracle_sid,ctlfile, logfile, outfile)

  8. #8
    Expert confirmé
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Points : 4 285
    Points
    4 285
    Billets dans le blog
    1
    Par défaut
    Hello
    Citation Envoyé par lynec45 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOAD Error: See U:/ODI/IN/Entete.log FOR details
    Ca donne quoi dans U:/ODI/IN/Entete.log ?

    Citation Envoyé par lynec45 Voir le message
    Oui, le LKM File to SQL ne travail pas avec sqlloader et n'a pas de code jython.
    Je voudrais utiliser SQLLoader car c'est beaucoup plus performant.
    Tu peux aussi passer par les tables externes, je ne sais plus quel KM le fait mais c'est aussi performant et en plus tu as les fonctions et les jointures possibles.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Entete.log n'est pas créé malheureusement, ce qui fait parti des interrogations !!

    Qu'appelles-tu passer par des tables externes ?

  10. #10
    Expert confirmé
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Points : 4 285
    Points
    4 285
    Billets dans le blog
    1
    Par défaut
    Des pseudo-tables, mais derrière tu as un fichier

    Regardes cette discussion
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  11. #11
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Ok merci, j'ai regardé les discutions associées à ces tables externe.

    J'ai essayé de mettre en place cette autre solution car elle a apparemment l'avantage de pouvoir être exécuté en parallèle.
    Mais j'ai toujours un souci avec le fichier log
    Ce LKM doit en créer un aussi et cela plante quand on arrive à l'étape Insert News Rows. Le message est "table ou vue inexistante" en pointant sur la table C$, table qui existe bien, mais quand je veux la visualiser (sous toad), j'ai ce message :

    ORA-29913: erreur d'exécution de l'appel ODCIEXTTABLEOPEN
    ORA-29400: erreur de cartouche de données
    error opening file U:/ODI/IN/Test_Import_txt.txt_000.log
    Il n'arrive pas a ouvrir le fichier log, ce qui est normal puisque que celui-ci n'existe pas.

    Moi pas comprendre le reverse accède bien à mon fichier, quand j'utilise le LKM SQLLDR j'ai bien des fichiers qui se créés dans mon dossier, donc pourquoi le fichier log fait exception !!????

  12. #12
    Expert confirmé
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Points : 4 285
    Points
    4 285
    Billets dans le blog
    1
    Par défaut
    hum, il est possible que tu aies tout simplement un souci de localisation

    normalement les logs doivent se trouver sur le serveur, mais à ce que je pense ton U: pointe sur un répertoire partagé ?
    Essayes de mettre un répertoire local sur ton serveur, comme si tu étais dessus. ( le serveur oracle )
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  13. #13
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Oui le U est un répertoire partagé.

    J'ai déplacé mon fichier et mon répertoire à la base du serveur ODI, mais je ne sais comment noté sont chemin d'accès
    J'ai essayé C:home/ODI/IN, ../home/odi/in .... rien ne marche, toujours la même erreur.

  14. #14
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Pour info nous travaillons sous Windows 7 pro et le serveur sur lequel est situé ODI est Unix, dès fois que cela inspire à quelqu'un une solution miracle !!

  15. #15
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    tu utilises un agent pour l' exécution ?

  16. #16
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    J'oubliais, depuis que j'ai changer mon chemin d'accès dans mon shéma physique, mes reverses ne fonctionne plus.

    Sinon non, je passe en local sans agent.

    Message d'erreur quand je veux acceder à ma table C$ :
    ORA-29913: erreur d'exécution de l'appel ODCIEXTTABLEOPEN
    ORA-29400: erreur de cartouche de données
    error opening file /home/odiagt/odi/IN/Test_Import_txt.txt_000.log
    on y voit le chemin d'accès spécifié.

  17. #17
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    je me demande si dans ce genre d'opération il ne faut pas que le fichier soit au même niveau que le serveur de base de données ...

    /home/odiagt/odi/IN/Test_Import_txt.txt_000.log
    cela ressemble a un chemin linux pas windows ....

    j'ai trouvé ce post

    http://www.developpez.net/forums/d21...ile-not-found/

    parlant du même type d'erreur

  18. #18
    Expert confirmé
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Points : 4 285
    Points
    4 285
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par doc malkovich Voir le message
    Essayes de mettre un répertoire local sur ton serveur, comme si tu étais dessus. ( le serveur oracle )
    oui, c'est ce que je disais, mets le chemin unix sur le serveur du SGBD !
    il faut aussi que le user oracle du sgbd puisse écrire dans le répertoire des logs ...

    hum, contactes ton dba
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  19. #19
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par shaun_the_sheep Voir le message
    je me demande si dans ce genre d'opération il ne faut pas que le fichier soit au même niveau que le serveur de base de données ...

    cela ressemble a un chemin linux pas windows ....
    Oui c'est pour ça que j'ai déplacé dossier et fichier à importer sur le serveur unix d'ODI.

    J'ai regardé l'histoire des droits, j'ai mis en 777 le dossier IN ainsi que mon fichier txt à importer, j'ai même essayé de créer le fichier log (lui aussi en 777).

    Je vais déprimer !

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2007, 12h53
  2. Réponses: 5
    Dernier message: 17/10/2006, 18h27
  3. [SQL LOADER - Oracle 9i] Mode verbose du fichier LOG ?
    Par ludmillaj dans le forum SQL*Loader
    Réponses: 3
    Dernier message: 31/01/2006, 01h34
  4. Oracle 8i et sql*loader
    Par naonedboy dans le forum Oracle
    Réponses: 9
    Dernier message: 07/12/2005, 10h40
  5. Un générateur de Control File pour SQL*Loader ?
    Par lex0072 dans le forum Oracle
    Réponses: 7
    Dernier message: 21/10/2005, 12h36

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