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 :

instant client 10.2.0.3 sur red hat : problème de nls_date_format


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut instant client 10.2.0.3 sur red hat : problème de nls_date_format
    Bonjour à tous,

    J'ai installé sur linux :
    Instant Client Package - Basic et Instant Client Package - SQL*Plus
    les variables d'environnement sont les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    export ORACLE_HOME=/usr/lib/oracle/10.2.0.3/client
    export PATH=$ORACLE_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
    export NLS_NUMERIC_CHARACTERS='. '
    Mon problème :
    Quand je me connecte avec php et que je modifie la session juste derrière en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
    mon format de date ne bouge pas c'est à dire qu'il reste à DD/MON/RR

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Ce tuto ne t'aiderait-il pas ? http://fadace.developpez.com/oracle/nls/

  3. #3
    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
    Vérifiez quelle est la valeur de NLS_DATE_FORMAT dans l'environnement du processus qui démarre le serveur web qui exécute le code PHP.
    C'est cette valeur qui semble est prioritaire sauf si vous codez en dur le format dans chaque requête SQL ou si vous exécutez ALTER SESSION dans la même session d'après le tableau de priorité des paramètres NLS.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut ca marchait
    Alors, je vais apporter quelques infos qui vont vous faire bondir, enfin moi ça m'a fait bondir :
    "ca marchait, et ca marche plus"

    Ca marchait avec les parametres d'environnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
    export NLS_NUMERIC_CHARACTERS='. '
    Seulement, je n'avais pas encore installé sqlplus.

    Maintenant, ca ne marche plus, mais est ce du à l'installation de sqlplus, je ne pourrais le confirmer.

    @pifor, ce qui est encore plus frustrant, c'est que je fait bien ALTER SESSION dans la même session, alors quand on veut forcer le masque de date de cette manière, je pensais qu'on était tout puissant, mais là justement, je suis impuissant devant le résultat

    @orafrance, oui, j'ai lu le tuto, mais est on obligé de mettre les export dans le .profile, je crois qu'on peut juste le faire dans la session avant le démarrage de apache ou sqlplus

  5. #5
    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
    Essayez de définir également la variable d'environnement NLS_LANG.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    @pifor :
    J'ai rajouté en plus avant de definir la date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
    Pas mieux

    Pourtant, en lisant le tableau de priorité, si j'utilise les fonctions to_char pour formater la date, ca fonctionne, mais aucune autre priorité n'est prise en compte, c'est à dire :
    - alter session, que je fais dans mon code php juste après la connexion (php et dans la même session aussi autrement dit : OCIPLogon, puis alter session)
    - export des variables d'environnement nls_lang et nls_date_format et démarrage de mon serveur apache

  7. #7
    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
    Pouvez-vous reproduire le problème avec SQL*Plus ?

    Il y a un bug dans les versions 10.2.x:

    Subject: Bug 4904743 - ALTER SESSION SET NLS% does not work if OCI_PARSE_ONLY used
    Doc ID: Note:4904743.8 Type: PATCH
    Last Revision Date: 21-DEC-2007 Status: PUBLISHED
    Je ne sait pas si cela concerne Instant Client et/ou Oracle Client.

    Le contournement du bug consiste à exécuter la requête ALTER SESSION sans passer par une étape "prepare".

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    @pifor : 10.2.0.3/client, je regarderais demain pour le alter car je n'ai pas accès au poste client, ni au sources php. Mais d'après ce que je sais, pour exécuter une requête depuis php, il faut d'abord appeler OCIParse qui renvoie l'identifiant de la requête et ensuite OCIExecute ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OCIExecute(OCIParse($requete),OCI_DEFAULT);
    De toute manière j'ai mis mes 2 alter session dans une procédure stockée que j'appelle juste après la connexion.

    Par contre, ce n'est pas normal non plus qu'en positionnant les variables d'environnement, le format de date ne soit pas pris en compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    export NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
    export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
    export NLS_NUMERIC_CHARACTERS='. '

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    Bonjour à vous,

    Je reviens à la charge :
    avant de démarrer mon serveur apache, je positionne mes variables comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    export ORACLE_HOME=/usr/lib/oracle/10.2.0.3/client
    export PATH=$ORACLE_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    export NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252;
    export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
    export NLS_NUMERIC_CHARACTERS='. '
    Ce qui est nouveau, c'est que je n'arrive plus à me connecter avec mon application php.
    La variable que j'ai ajouté est : export NLS_LANG

    J'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ocisessionbegin error while trying to retrieve text for error ora-12705
    J'ai googlelisé et cette erreur signifie que mon ORACLE_HOME n'est pas bon, avez vous une idée?

    J'ajouterai que c'est quand j'ai mes variables :
    LD_LIBRARY_PATH et NLS_LANG définies en même temps ca ne fonctionne pas

  10. #10
    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
    ORA-12705 peut signifer qu'un client Oracle exécute une commande ALTER SESSION avec un paramètre incorrect parce que le fichier NLS correspondant n'existe pas ou n'est pas trouvé.

    Il y a peut-être une option d'installation d'Instant Client où il faut demander d'installer les fichiers pour l'environnement France

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    Comment désinstaller complètement le client oracle? sans laisser des paramètres traîner, pour pouvoir refaire une installation propre?

    Je suis sous red hat et j'ai fait rpm -e oracle-instantclient-basic
    Mais je ne pense pas que ca suffit ...

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    qu'est ce qui te fait penser ça ?

    Vérifie les variables d'environnement éventuellement mais normalement c'est bon

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    @orafrance :
    Je n'arrête pas de jongler avec les variables, cf posts ci dessus. Et sans succès.
    Pire, le alter session n'a pas de prise dans mon appli (je précise que je me connecte, je fais le alter et ensuite je fais mes requêtes, tout ca sans me déconnecter, en plus c'est des connexions persistantes que j'utilise).

    Mon appli fonctionnait avant d'avoir installer sqlplus (même le alter session dans l'appli), mais je ne peux pas certifier que c'est à la suite de l'installe qu'est survenu le dysfonctionnement. Il y a eu une restriction au niveau du serveur ftp, attribution des droits sous putty etc...

    Je ne sais plus où chercher, ni quoi faire, je suis dans le désarroi

    Si vous avez des idées, suggestions, je suis preneur, surtout que ca fait 3 jours que je cherche dans tous les sens sans grand succès. J'arrive à avoir plus d'erreur php si je positionne NLS_LANG, c'est tout

    @pifor : ce serait quoi le NLS_LANG qu'accepterai l'instant client?

  14. #14
    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
    Je n'utilise pas Instant Client. Mais d'après la FAQ, il n'y a pas de différence de comportement pour NLS_LANG.

    Je ne sais plus où chercher, ni quoi faire, je suis dans le désarroi
    Si vous avez un contrat de support avec Oracle, c'est le moment de l'utiliser ou d'essayer le forum OTN spécialisé .

  15. #15
    Membre actif
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 229
    Points
    229
    Par défaut
    j'ai trouvé la solution
    un trigger est nécessaire, après avoir essayé tout le reste, c'est la seule solution viable que j'ai trouvé (pour info ma version d'oracle est la 10.2.0)

    create or replace trigger trg_logon_db
    after logon on database
    begin
    dbms_output.put_line('');
    execute immediate alter session nls_date_format='YYYY-MM-DD HH24:MI:SS';
    end;
    /
    (+mitch): nan mais nanar j'préfère mourir contre un platane apres un accident de voiture plutot que d'une rupture d'anévrisme devant mon ecran d'pc

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    Je reviens à la charge, car j'ai cherché de partout sans aucun résultat.
    En attendant, j'ai fait quelques autres test.

    J'ai essayé de faire un trigger à la connexion,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER data_logon_trigger
    after logon
    ON DATABASE
    begin
       execute immediate 'alter session set nls_date_format = ''YYYY-MM-DD HH24:MI:SS'' ';
       execute immediate 'alter session set nls_numeric_characters =". "';
    end;
    /
    Sans succès

    J'ai implémenté un code simple :
    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
    $dbConnexion = OCILogon('user,'pass', '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.99.1.1)(PORT=1521)))
          						(CONNECT_DATA=(SID=mabase)
        						(SERVER=DEDICATED))
    						)');
     
    $dbStmt=OCIParse($dbConnexion,'select sysdate from dual'); 
     OCIExecute($dbStmt,OCI_DEFAULT);
     ocifetchstatement($dbStmt,$tabRes,0,-1,OCI_NUM+OCI_RETURN_NULLS+OCI_FETCHSTATEMENT_BY_ROW);
     echo'<fieldset><br>ma date avant ', $tabRes[0][0];
     
    $dbStmt=OCIParse($dbConnexion,"alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'"); 
     OCIExecute($dbStmt,OCI_DEFAULT);
    $dbStmt=OCIParse($dbConnexion,'select sysdate from dual'); 
     OCIExecute($dbStmt,OCI_DEFAULT);
     ocifetchstatement($dbStmt,$tabRes,0,-1,OCI_NUM+OCI_RETURN_NULLS+OCI_FETCHSTATEMENT_BY_ROW); 
     echo'<br>ma date après alter ', $tabRes[0][0],'</fieldset>'; 
     
     $dbStmt=OCIParse($dbConnexion,"SELECT * FROM NLS_SESSION_PARAMETERS"); 
     OCIExecute($dbStmt,OCI_DEFAULT);
     ocifetchstatement($dbStmt,$tabRes,0,-1,OCI_NUM+OCI_RETURN_NULLS+OCI_FETCHSTATEMENT_BY_ROW); 
    foreach($tabRes as $indLigne=>$ligneTab)
    {
    	echo '<br>';
    	foreach($ligneTab as $indCol=>$col)
    	{
    		echo ' ',$tabRes[$indLigne][$indCol] ;
    	}
    }
    Je lit donc la date avant d'alterer la session et après
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ma date avant 22-FEB-08
    ma date après alter 22-FEB-08
    J'en profite pour éditer les variables après le alter :
    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
     
    NLS_LANGUAGE AMERICAN
    NLS_TERRITORY AMERICA
    NLS_CURRENCY $
    NLS_ISO_CURRENCY AMERICA
    NLS_NUMERIC_CHARACTERS .
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS
    NLS_DATE_LANGUAGE AMERICAN
    NLS_SORT BINARY
    NLS_TIME_FORMAT HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY $
    NLS_COMP BINARY
    NLS_LENGTH_SEMANTICS BYTE
    NLS_NCHAR_CONV_EXCP FALSE
    Même si j'essaie de faire des
    export NLS_LANGUAGE=FRENCH
    cela n'est pas pris en compte

    Par contre idem si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
    j'obtiens les erreurs de connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ocisessionbegin error while trying TO retrieve text FOR error ora-12705

Discussions similaires

  1. Installer Mysql5 sur red hat
    Par DevServlet dans le forum RedHat / CentOS / Fedora
    Réponses: 12
    Dernier message: 19/03/2008, 09h24
  2. Problème courier-authlib.. sur Red Hat 7
    Par lailai dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 17/01/2008, 10h45
  3. installer egcs sur red hat 8.0
    Par mennou dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 23/12/2007, 18h52
  4. MaJ Postgresql sur red hat 10
    Par ploxien dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 27/11/2007, 16h06
  5. [Serveur] executer script php sur red hat
    Par jj del amorozo dans le forum Apache
    Réponses: 6
    Dernier message: 08/02/2006, 15h29

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