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

Linux Discussion :

Problème script de chargement de données oracle


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Problème script de chargement de données oracle
    J'ai écrit un script qui me permet de loader des données dans une base de données sous Oracle. Toutefois, lorsque ce script est exécuté hors CRON, tout se charge sans problème mais une fois mis sous CRON, le champ reportdate ne se charge pas, j'ai un vide à la place. Quelqu'un peut-il m'aider à solutionner ce problème?

    Voici le texte du script:

    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
    79
    80
    81
    82
    83
    84
    85
    86
     
    ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
    ORACLE_HOME=$ORACLE_BASE/OraHome_1; export ORACLE_HOME
    ORACLE_SID=RADB; export ORACLE_SID
    ORACLE_TERM=xterm; export ORACLE_TERM
    NLS_LANG=FRENCH_BELGIUM.WE8MSWIN1252; export NLS_LANG
    ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
    # Set shell search paths:
    PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/x11:/usr/sbin:/etc:/usr/local/bin:/usr/X11R6/bin:/u02/oradata/home/ppas/bin;
    export PATH
    PATH=$PATH:$HOME/bin
    export PATH
    if [ $# -ne 0 ]; then
           e=$1;
    		else
    	e=0
        fi
    #IDENTIFICATION DU JOUR DE LA SEMAINE (1...7) A LOADER
    a=$(date +'%u')
    b=$(date +'%Y%m%d')
     #existence d'un nombre comme argument (nombre de jours en arriere)
    let a=$a-$e
    let s=7
    echo $a
    if [ $a -lt 0 ];	then
    	let a=$a+$s 
    fi
    let b=$b-$e 
    echo "Nombre de jours avant $e"
    echo "Numero du jour de la semaine loade (1...7) $a"
    echo "Date du jour loade $b"
    # CONTROLE DE LA PARTITION A CHARGER
    sqlplus -s venant/celtel<<EOF
    set timing on;
    delete  from sdp_data 
    where to_char(to_date(reportdate),'yyyymmdd') ='$b';
    commit;
    EOF
    # Lecture du ficher à chargerr
    cp ${a}_SDP1.DUMP_msisdn_unit.txt SDP$b
    file=`ls SDP$b`
    echo $file
    cat $file | sed "s/00.$/00/; s/\./\,/g" | awk -F',' '/,/ {print ";" $1 ";" $2 ";"}'  > b$file
     
    cp b$file b_$file.txt
    # Detection de la date
    date=`$HOME/bin/findDate1.pl SDP$b`
     
    # Creation du fichier de controle
    echo "load data into table venant.sdp_data1 append fields terminated by ';' (" > $HOME/bin/deferred21.ctl
    echo "  reportdate \"to_date('$date', 'yyyy-mm-dd hh24:mi:ss')\" ," >> $HOME/bin/deferred21.ctl
    echo "  msisdn," >> $HOME/bin/deferred21.ctl
    echo "  balance \"to_number(:balance, '9999999D999999')\"" >> $HOME/bin/deferred21.ctl
    echo ")" >> $HOME/bin/deferred21.ctl
     
    # Chargement des donnees
    sqlldr venant/celtel@radb data=b_$file.txt bad=$file.bad control=$HOME/bin/deferred21.ctl SILENT=(HEADER, FEEDBACK)
     
    # Suppression des donnees fichiers temporaires
    rm -f b$file
    rm -f b_$file.txt
     
     
    # Lecture du ficher à charger
    cp ${a}_SDP2.DUMP_msisdn_unit.txt SDP2$b
    file=`ls SDP2$b`
    echo $file
    cat $file | sed "s/00.$/00/; s/\./\,/g" | awk -F',' '/,/ {print ";" $1 ";" $2 ";"}'  > b$file
     
    cp b$file b_$file.txt
    # Detection de la date
    date=`$HOME/bin/findDate1.pl SDP$b`
     
    # Creation du fichier de controle
    echo "load data into table venant.sdp_data1 append fields terminated by ';' (" > $HOME/bin/deferred21.ctl
    echo "  reportdate \"to_date('$date', 'yyyy-mm-dd hh24:mi:ss')\" ," >> $HOME/bin/deferred21.ctl
    echo "  msisdn," >> $HOME/bin/deferred21.ctl
    echo "  balance \"to_number(:balance, '9999999D999999')\"" >> $HOME/bin/deferred21.ctl
    echo ")" >> $HOME/bin/deferred21.ctl
     
    # Chargement des donnees
    sqlldr venant/celtel@radb data=b_$file.txt bad=$file.bad control=$HOME/bin/deferred21.ctl SILENT=(HEADER, FEEDBACK)
     
    # Suppression des donnees fichiers temporaires
    rm -f b$file
    rm -f b_$file.txt

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu veux dire que c'est la variable $date qui est vide ?

    Souvent, avec cron, on est embêté car cron ne charge pas le profile de l'utilisateur et on n'a pas toutes les variables d'environnement qu'on souhaite. Essaie en rajoutant le source du fichier de profile (. $HOME/.profile ou . $HOME/.bash_profile) en haut de ton script.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    J'ai essayé d'intégrer ce nouveau point dans le script mais rien ne change.

    Comme date est une variable d'environnement, je l'ai remplacé dans la ligne avec la fonction findDate1.pl de perl (qui me permet de retrouver une chaîne date dans un fichier texte) par la variable da que j'évoque ensuite mais je n'ai toujours pas de réaction. Toujours vide le champs reportdate.

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Si j'ai bien compris, ton fichier deferred21.ctl contient la ligne suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     reportdate "to_date('', 'yyyy-mm-dd hh24:mi:ss')" ,

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Oui, cela au lieu de récupérer le résultat de la fonction FINDDATE qui est contenu dans la variable DA (à la place de date) et mentionnée entre ' '.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/06/2013, 09h18
  2. Script de chargement données cumulées
    Par meumeu73.1 dans le forum QlikView
    Réponses: 4
    Dernier message: 14/10/2011, 14h16
  3. Chargement de données Excel vers Oracle
    Par Jossbee dans le forum SQL
    Réponses: 1
    Dernier message: 25/06/2007, 14h25
  4. Réponses: 1
    Dernier message: 04/03/2006, 09h23
  5. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57

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