Effets du changement de paramètre NLS_LANG dans le registre du Client Oracle
Nous sommes dans le processus de déplacement de l' .NET pilote Microsoft oracle à l'ODP.NET le pilote.
Un des problèmes que nous avons eu est cette erreur:
ORA-12705: Ne peut pas accéder NLS fichiers de données ou invalide l'environnement spécifié
Nous avons été en mesure d'arrêter l'erreur en modifiant la base de registre et de modifier le réglage (voir cette question)
Dans notre cas, nous avons changé
HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE - NLS_LANG
qui a été mis à NA
être le même que
HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE - HOME0 - NLS_LANG
qui a été réglé correctement
Ma question est: pourquoi y aurait-il différent NLS_LANG paramètres dans le registre, et peut-être tout frapper les effets de la modification de cette valeur?
Mise à jour:
Je viens de trouver dans le Oracle NLS FAQ suivantes
Pour Oracle version 7:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
Pour les versions de Base de données Oracle 8, 8i et
9i:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEx\
où "x" est le numéro unique
l'identification de l'Oracle de la maison.HOME0 est la première installation
Pour Base de données Oracle 10g:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_<oracle_home_name>
Là, vous avez une entrée avec nom
NLS_LANG
OK, donc il y a différents paramètres du registre pour les différentes versions...
Remarque:
Certains gens sont confus par trouver un
NLS_LANG réglé sur "NA" dans
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
lorsque aucune version 7 a été installé. Cette
est utilisé pour assurer la compatibilité ascendante,
et peut être ignoré.
J'ai Oracle 9i, alors maintenant je suis encore plus confus - pourquoi l'ODP.NET dll à la recherche de l'Oracle 7 paramètre de registre?
OriginalL'auteur LauraB | 2009-11-19
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire avec l';
ORA-12705: Ne peut pas accéder NLS fichiers de données ou invalide l'environnement spécifié
L'ODP.NET dll instantanée ou de clients étaient en train de lire le registre;
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG=NA
La valeur NA a provoqué l'erreur.
C'est parce que j'ai déjà eu l'installation d'un client mais je voulais utiliser l'oracle instant client via un lecteur réseau pour l'un VB.NET app avec ODP.NET.
Mon petit truc dans mon vb.net la solution a été pour exemple, afin d'adapter l'environnement pour l'application via:
nb. L'Oracle "NLS FAQ" lien n'est plus valide (2012)
OriginalL'auteur Nick Giles
PAR Oracle Notes sur l'11g ODP de presse, les éléments suivants peuvent provoquer cette erreur:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG=NA <--- This NA does in fact cause this error if set to NA.
Vous pouvez essayer
DELETING
la clé si pas nécessaire ou la mise en vigueurNLS_LANG
réglage de vos paramètres régionaux.Pour nous, nous avons choisi
AMERICAN_AMERICA.WE8MSWIN1252
.OriginalL'auteur Chris Taylor
Dans notre cas, nous ne voulions pas faire tout ce qui peut potentiellement rendre les changements à l'Oracle de registre parce que nous nous installions notre service web sur une production Oracle 9i serveur.
La solution était tout simplement de prévenir les ODAC d'être capable de voir tout ORACLE clés de registre, en niant à tous l'accès à cette clé pour l'ID utilisateur de notre service web a été.
regedit
(en tant qu'administrateur)HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
ORACLE
touche -> les Autorisations...IUSR_MyWebService
); c'est le nom d'utilisateur qui s'affiche en regard de votre w3wp.exe processus dans le Gestionnaire des Tâches.Cela a très bien fonctionné et en bonus, nous avons veillé à ce que notre application est isolée de tout changement à la
ORACLE
clés de registre.Astuce: vous pouvez prouver à vous-même que l'utilisateur en question n'a pas accès aux touches en question par la fermeture de toutes les instances en cours d'exécution de l'Éditeur du Registre, démarrer une
CMD
invite tant que l'utilisateur (à l'aide d'Exécuter en tant Que...) et ensuite de lancerregedit
à partir de l'invite de commande.OriginalL'auteur wardies
le Client Oracle (ORACLE_HOME\bin\ora*.dll) est à la recherche d'un fichier nommé "oracle.clé" dans le même répertoire. Ce fichier contient le nom de la clé de registre qui appartient à cet Oracle de l'installation du client. (par exemple, "Software\ORACLE\HOME3")
hth
Andreas
Est ODP.NET vraiment à l'aide de l'Oracle client Dll à partir de l'Oracle 9i répertoire du client? Vous pouvez vérifier les Dll utilisées par votre application avec SysInternals' ProcessExplorer.
Avis: sur les machines 64 bits, le contenu de
oracle.key
peut ressembler à ceciSOFTWARE\ORACLE\KEY_OraClient11g_home1
tandis que l'emplacement réel dans la base de registre estHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1
oui, c'est le cas lorsque votre application est une version 32 bits. Cette redirection s'applique pour n'importe quelle application, voir Redirecteur de Registre
OriginalL'auteur Andreas
Cela était résolu à la fin, par l'installation de l'ODAC 11 composants client (téléchargé à partir de la Oracle site web). Je pense que le système devenait confus parce que nous avait copié les ODAC dll à travers plutôt que de l'installation du client. ODP.NET attend un Oracle 11 client et ne savez pas où trouver de l'Oracle de la Maison.
NB: si vous installez l'ODAC de composants à l'aide de la commande xCopy déploiement puis ne pas les installer à une base Oracle directory (par exemple, c:\oracle\ora92 pour 9i client). Cela provoque un " Fournisseur n'est pas compatible avec la version du Client Oracle’ erreur.
OriginalL'auteur LauraB