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

Administration Oracle Discussion :

NLS_LANG non pris en compte ou non défini ?


Sujet :

Administration Oracle

  1. #1
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut NLS_LANG non pris en compte ou non défini ?
    Bonjour à tous,

    je rencontre un petit problème de NLS_NUMERIC_CHARACTERS sous sqlplus.

    En fait, je voudrais aussi savoir comment sont déterminés les NLS_SESSION_PARAMETERS lorsque la variable NLS_LANG n'existe pas ?

    J'ai 3 serveurs "identiques" en théorie (S1, S2, S3) et 3 bases de données (B1, B2, B3).

    Si je me connecte de S1 vers B1 en sqlplus, je peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> SELECT USERENV ('language') FROM DUAL;
     
    USERENV('LANGUAGE')
    ----------------------------------------------------
    FRENCH_FRANCE.WE8MSWIN1252
     
    SQL> select * FROM NLS_SESSION_PARAMETERS where PARAMETER like '%NUMERIC%';
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_NUMERIC_CHARACTERS         ,
     
    SQL> @.[%NLS_LANG%].
    SP2-0310: impossible d'ouvrir le fichier ".[%NLS_LANG%]."
    Depuis S2 et S3 vers B2 et B3 respectivement, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> SELECT USERENV ('language') FROM DUAL;
     
    USERENV('LANGUAGE')
    ----------------------------------------------------
    AMERICAN_AMERICA.WE8MSWIN1252
     
    SQL> select * FROM NLS_SESSION_PARAMETERS where PARAMETER like '%NUMERIC%';
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_NUMERIC_CHARACTERS         .,
    SQL> @.[%NLS_LANG%].
    SP2-0310: unable to open file ".[%NLS_LANG%]."
    Mon problème, c'est qu'à priori, je ne vois pas ce qui diffère entre les différents serveurs pour expliquer que l'un est en français et les deux autres en anglais.

    Je n'ai aucune différence au niveau des variables d'environnements (quand je fais set en ligne de commande, je n'ai pas d'écarts).
    Je n'ai rien vu au niveau base de registre.
    Je n'ai pas de différence au niveau des fichiers du dossier \Oracle\product\11.2.0\client_x32.

    Pour être franc, le problème original est apparu au niveau d'une application web déployée sur le second serveur qui ne marchait plus à cause du séparateur décimal...

    Merci d'avance

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    La valeur par défaut du paramètre NLS_LANG dépend de la langue du système d'exploitation. Si les serveurs devaient être identiques, vous allez pouvoir aller tirer les oreilles de l'ingénieur système

    Vérifiez la langue de votre OS et la valeur de la variable $NLS_LANG (sous UNIX).

    http://docs.oracle.com/cd/E11882_01/...v.htm#i1006280

    Cordialement,

    Arkhena

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Par défaut
    ce que tu dois vérifer également c'est le NLS_LANG au niveau de la DB (NLS_DATABASE_PARAMETERS)

    aussi sous windows, il faut effectivement modifier la base de registre afin de setter le NLS_LANG correctement (HKEY_LOCAL_MACHINE/ORACLE/KEY_<OracleHome>

  4. #4
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Merci de votre aide, je tourne en rond depuis hier

    Ce qui est étonnant, c'est que les 3 serveurs semblent bien être en FR ! En tout cas, l'affichage est en français, et les paramètres linguistiques sont aussi en français...

    Pour la base de registre, ça donne ça sur tous les serveurs :

    HKLM/SOFTWARE/ORACLE/KEY_OraClient11g_home1 => client 1
    HKLM/SOFTWARE/Wow6432Node/ORACLE/KEY_OraClient11g_home1 => client 2
    HKLM/SOFTWARE/Wow6432Node/ORACLE/KEY_OraClient11g_home2 => client 3 (celui que j'utilise et qui est dans le PATH)

    Il y a des NLS_LANG en FRENCH ici:
    HKLM/SOFTWARE/ORACLE/
    HKLM/SOFTWARE/Wow6432Node/ORACLE/
    HKLM/SOFTWARE/Wow6432Node/ORACLE/KEY_OraClient11g_home1/
    Mais pas ici :
    HKLM/SOFTWARE/Wow6432Node/ORACLE/KEY_OraClient11g_home2/

    Je constate bien que la variable NLS_LANG définie pour le client 2 (HKLM/SOFTWARE/Wow6432Node/ORACLE/KEY_OraClient11g_home1) est bien utilisée puisque, si je vais dans son dossier et que je lance sqlplus, la requête @.[%NLS_LANG%]. retourne quelque chose (c'est le même fonctionnement sur tous les serveurs à la différence près que les messages sont en anglais pour le client par défaut ou le client sans NLS_LANG sur les serveurs S2 et S3 comme on le voit dans l'exemple ci-dessus) :
    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
    D:\>sqlplus .... <<<==== c'est le client par défaut
    
    SQL*Plus: Release 11.2.0.3.0 Production on Thu May 24 12:19:04 2012
    ...
    Connecte a :
    Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> @.[%NLS_LANG%].
    SP2-0310: impossible d'ouvrir le fichier ".[%NLS_LANG%]."
    ...
    SQL> Deconnecte de Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    D:\>cd Oracle\product\11.1.0\client_1\BIN
    
    D:\Oracle\product\11.1.0\client_1\BIN>sqlplus ... <<<==== test avec le client qui a un NLS_LANG dans la base de registre
    
    SQL*Plus: Release 11.1.0.7.0 - Production on Jeu. Mai 24 12:23:56 2012
    ...
    ConnectÚ Ó :
    Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> @.[%NLS_LANG%].
    SP2-0310: impossible d'ouvrir le fichier ".[FRENCH_FRANCE.WE8MSWIN1252]..sql"
    Pour finir, les 3 bases sont en NLS_LANGUAGE = AMERICAN
    dans la NLS_DATABASE_PARAMETERS.

    Mon problème est vraiment la valeur par défaut du NLS_LANG lorsqu'il n'est pas spécifié en base de registre ! Mais pourquoi cette valeur diffère-t-elle alors que les 3 machines semblent être en français... ? Existe-t-il un moyen de vérifier cela ?

    Merci encore

  5. #5
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    Je suis désolée de ne pas pouvoir vous aider, mais je ne maîtrise vraiment pas Oracle sous Windows...

    Si ça fonctionne comme sous Unix, il faut regarder les variables d'environnement...

    Cordialement,

    Arkhena

  6. #6
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    A priori, je n'ai aucune variable d'environnement de positionnées sur aucun des trois serveurs :'(

    Merci en tout cas de me proposer des pistes

  7. #7
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Ah, je viens d'avoir une piste. Il restait un paramètre que je ne connaissais pas : NLS_INSTANCE_PARAMETERS.

    Or, ce paramètre est en French sur le premier serveur de BDD et en American sur les 2 autres.

    Il semblerait donc que sqlplus bascule sur le NLS_LANG de l'instance s'il ne trouve rien de défini au niveau environnement ou base de registre (en tout cas, c'est la seule explication que j'ai :s).

    Merci pour vos pistes, si quelqu'un a une confirmation, je suis preneur

  8. #8
    Membre émérite
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Par défaut
    effectivement c'est encore un autre niveau de définition des paramètres de globalisation

    ce qui est bizarre , c'est qu'ils soient différents ... il y a lieu de sécuriser ton environnment pour limiter l'accès à qui de droit et éviter ce genre de recherche fastidieuse

    bonne chance

  9. #9
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Malheureusement, cette partie n'est pas de mon ressort

    Merci quand même, je transmets à qui de droit :p

  10. #10
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par Alek-C Voir le message
    Il semblerait donc que sqlplus bascule sur le NLS_LANG de l'instance s'il ne trouve rien de défini au niveau environnement ou base de registre (en tout cas, c'est la seule explication que j'ai :s).
    Merci pour vos pistes, si quelqu'un a une confirmation, je suis preneur
    Effectivement je confirme.
    Les paramètres au niveau base (NLS_DATABASE_PARAMETERS) sont surchargés par les paramètres qu niveau instance (NLS_INSTANCE_PARAMETERS) si définis (init.ora) qui sont eux-même surchargés par les paramètres au niveau session (NLS_SESSION_PARAMETERS) si définis (par NLS_LANG ou par alter session).

    Donc pas de NLS_LANG -> c'est NLS_INSTANCE_PARAMETERS qui est pris.

    A noter que ce n'est pas une bonne chose. Il faudrait toujours définir NLS_LANG puisque chaque client peut avoir un language, territoire, et characterset différent.

    Cordialement,
    Franck.

  11. #11
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Je n'avais pas vu cette réponse, merci beaucoup de ces précisions (et je suis 100% d'accord avec le fait que ça n'est pas une bonne chose... j'ai d'ailleurs demandé à mon admin de faire des efforts lors de ses installs )

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

Discussions similaires

  1. [QR 4.05] Propriété imprimante non pris en compte
    Par portu dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 30/09/2008, 14h21
  2. CSS non pris en compte
    Par DragOr dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 08/06/2006, 13h18
  3. [ASE][SQL]WHERE non pris en compte
    Par Benjamin78 dans le forum Sybase
    Réponses: 1
    Dernier message: 24/03/2006, 12h00
  4. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57
  5. [event] keyListener non pris en compte
    Par pierre.zelb dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/08/2005, 08h35

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