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

SQL Oracle Discussion :

SQL*Loader-510 Error - Comment le résoudre?


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut SQL*Loader-510 Error - Comment le résoudre?
    Bonjour,

    Nous avons un program ORACLE qui fait l'export d'une base de données et l'envois ensuite par FTP sur un autre serveur.
    Sur ce serveur nous avons un autre programme qui lui insère toutes les données de ce fichier ds une Table de la base de donnée Oracle(8.XX) locale.

    Il ne m'est pas possible de rentrer dans les détails du programme Oracle faisant l'export.
    Lorsque le programme "local" tente d'insérer les données de ce fichier dans la DB locale voici l'erreur que j'ai :

    SQL*Loader-510: Physical record in data file( EXTRACTxxx) is longer than the maximum(1048576)
    SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
    J'immagine que c'est du à une erreur dans le fichier vu que je parviens à lancer le script sans erreur en utilisant un autre fichier (version antérieure des données). Seulement voila, le fichier fait +-150mb il m'est impossible de le parcourir (déja très difficile de l'ouvrir) et vérifier chaque records jsuqu'a ce que je trouve une erreur.

    Comment pourrais-je procéder afin de trouver ce qui pose problème?
    Et en attendant il me faudrait au moin une méthode pour continuer l'insertion même si il y a un problème qqpart avec un record (un genre de skip).

    Commander pour lancer le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $SQLLDR silent=all control=${SCRIPTDIR}/myscript.ctl log=${LOGDIR}/myscript.log bad=${LOGDIR}/myscript.bad errors=200000 bindsize=750000
    Fichier CTL:
    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
     
    LOAD DATA
      INFILE 'MYFILE.XX'
       INTO TABLE MYTABLE APPEND
        TRAILING NULLCOLS
        (SEQUENCE CHAR ENCLOSED BY "|" AND "|",
         RELATED_ITEM CHAR TERMINATED BY "|",
         RELATED_ITEM_EF CHAR TERMINATED BY "|",
         RELATED_ITEM_REV CHAR TERMINATED BY "|",
         BOM_LEVEL CHAR TERMINATED BY "|",
         ASSEMBLY_ID_TYPE CHAR TERMINATED BY "|",
         ASSEMBLY_ID CHAR TERMINATED BY "|",
         ASSEMBLY_ID_EF CHAR TERMINATED BY "|",
         ASSEMBLY_DESCRIPTION CHAR TERMINATED BY "|",
         BOM_DETAIL CHAR TERMINATED BY "|",
         ITEM_ID CHAR TERMINATED BY "|" ,
         ITEM_ID_EF CHAR TERMINATED BY "|" ,
         ITEM_DESCRIPTION CHAR TERMINATED BY "|" ,
         QUANTITY CHAR TERMINATED BY "|", 
         REF_DES CHAR(2000) TERMINATED BY "|",
         UOM CHAR TERMINATED BY "|" ,
         MAKE CHAR TERMINATED BY "|" ,
         START_DATE DATE "DDMMYYYY" TERMINATED BY "|" ,
         END_DATE DATE "DDMMYYYY" TERMINATED BY "|" ,
         ECO CHAR TERMINATED BY "|" ,
         COMMENTS CHAR TERMINATED BY "|" ,
         ITEM_TYPE CHAR TERMINATED BY "|" ,
         EXPORT_DATE DATE TERMINATED BY "|",	
         ITEM_REV CHAR TERMINATED BY WHITESPACE,
         LOAD_DATE SYSDATE,
         ORG_ID CONSTANT "IR")
    SqlLoader log:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    SQL*Loader: Release 9.2.0.6.0 - Production on Fri Feb 22 07:00:09 2008
     
    Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
     
    Control File: /xxx
    Data File: EXTRACTXXX
    Bad File: xxx.bad
    Discard File: none specified
     
    (Allow all discards)
     
    Number to load: ALL
    Number to skip: 0
    Errors allowed: 200000
    Bind array: 64 rows, maximum of 750000 bytes
    Continuation: none specified
    Path used: Conventional
    Silent options: FEEDBACK, ERRORS and DISCARDS
     
    Table YYY, loaded from every logical record.
    Insert option in effect for this table: APPEND
    TRAILING NULLCOLS option in effect
     
    Column Name Position Len Term Encl Datatype
    ------------------------------ ---------- ----- ---- ---- ---------------------
    SEQUENCE FIRST * | CHARACTER 
    | 
    RELATED_ITEM NEXT * | CHARACTER 
    RELATED_ITEM_EF NEXT * | CHARACTER 
    RELATED_ITEM_REV NEXT * | CHARACTER 
    BOM_LEVEL NEXT * | CHARACTER 
    ASSEMBLY_ID_TYPE NEXT * | CHARACTER 
    ASSEMBLY_ID NEXT * | CHARACTER 
    ASSEMBLY_ID_EF NEXT * | CHARACTER 
    ASSEMBLY_DESCRIPTION NEXT * | CHARACTER 
    BOM_DETAIL NEXT * | CHARACTER 
    ITEM_ID NEXT * | CHARACTER 
    ITEM_ID_EF NEXT * | CHARACTER 
    ITEM_DESCRIPTION NEXT * | CHARACTER 
    QUANTITY NEXT * | CHARACTER 
    REF_DES NEXT 2000 | CHARACTER 
    UOM NEXT * | CHARACTER 
    MAKE NEXT * | CHARACTER 
    START_DATE NEXT * | DATE DDMMYYYY 
    END_DATE NEXT * | DATE DDMMYYYY 
    ECO NEXT * | CHARACTER 
    COMMENTS NEXT * | CHARACTER 
    ITEM_TYPE NEXT * | CHARACTER 
    EXPORT_DATE NEXT * | DATE DD-MON-RR 
    ITEM_REV NEXT * WHT CHARACTER 
    LOAD_DATE SYSDATE
    ORG_ID CONSTANT
    Value is 'IR'
     
    SQL*Loader-510: Physical record in data file( EXTRACTxxx) is longer than the maximum(1048576)
    SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
     
    Table YYY:
    0 Rows successfully loaded.
    0 Rows not loaded due to data errors.
    0 Rows not loaded because all WHEN clauses were failed.
    0 Rows not loaded because all fields were null.
     
     
    Space allocated for bind array: 508096 bytes(64 rows)
    Read buffer bytes: 1048576
     
    Total logical records skipped: 0
    Total logical records read: 0
    Total logical records rejected: 0
    Total logical records discarded: 0
     
    Run began on Fri Feb zzz
    Run ended on Fri Feb zzz
     
    Elapsed time was: 00:00:00.29
    CPU time was: 00:00:00.12
    Merci d'avance pour votre aide. J'èspere que nous pourrons trouver une solution rapidement

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Comment le fichier ExtractXXX est généré, par quelle commande/méthode ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Un report en Oracle... je n'en ai pas le détail.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Et donc le fichier contient des séparateur "|" entre chaque champs et un whitespace entre chaque record.

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par lem01 Voir le message
    Et donc le fichier contient des séparateur "|" entre chaque champs et un whitespace entre chaque record.
    Ajout sur la ligne INFILE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INFILE <datafile_name> ["str 'terminator_string'"]
    Par contre whitespace c'est un nom générique !

    [Edit]
    Je ne pense pas avoir été très clair.
    Je pense que le problème est due au fait qu'il essaie de lire tout le fichier dans un seul coup au lieu de le traiter enregistrement par enregistrement. Il semble que dans ce cas la lecture doit se faire en « stream record format » et donc il a besoin de connaître le caractère de séparation des enregistrement.
    Voilà

    [/Edit]

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Exactement!
    Je viens en effet de constater qu'il n'y a pas l'air d'avoir de caractere de fin de record...
    Donc le programme d'oracle n'a pas l'air de faire ça correctement.

    Je n'en suis pas certain j'ai juste ouvert le fichier avec wordpad et n'ai vu aucun retour à la ligne ou caractere special entre les differents records. Est-ce suffisant ou devrais utiliser un autre programme pour le vérifier...

    Merci encore!

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Ce fichier utilise "|" comme séparateur des valeurs, donc la longueur de l’enregistrement est inconnu. Il faut dans ce cas un moyen pour savoir où un enregistrement se finit et il n’est obligatoire d’avoir un caractère spécial pour marquer la fin d’enregistrement, ça pourrait être n’importe quel autre caractère qui n’est pas présent dans les valeurs.
    La procédure utilisée pour créer le fichier d’export doit indiquer le caractère de fin d’enregistrement, encore une fois comment le fichier est généré ? Si non utilise un éditeur Hexa pour examiner le caractère de fin d’enregistrement ; il sera utile d’essayer avec un fichier qui fait moins de 150M.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Je n'ai pas plus d'info sur le programme qui génère ce fichier hélas...
    Dans le fichier .CTL la ligne "ITEM_REV CHAR TERMINATED BY WHITESPACE," n'indique t-elle pas que la caratere de fin un est espace?

    Je vais me renseigner sur le programme générant ces fichiers afin de voir quel est le caratere de fin de record.

    Merci encore

Discussions similaires

  1. SQL*Loader - Comment ignorer une ligne?
    Par domiq44 dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 10/04/2008, 13h23
  2. Réponses: 7
    Dernier message: 18/12/2007, 20h53
  3. Réponses: 3
    Dernier message: 21/06/2007, 12h53
  4. Réponses: 1
    Dernier message: 08/03/2007, 12h35

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