通过 putty sql_plus 连接数据库报错:
ORA-12705:Cannot access NLS data files or invalid environment specified
此问题主要是 putty 登录后的系统 Linux/Windows 当前环境变量 NLS_LANG 设置和数据库 NLS_LANG 参数变量不一致导致.
NLS_LANG 参数由以下部分组成:
NLS_LANG=[Language]_[Territory].[Clients Characterset]
NLS_Language 指定:
Oracle(错误) 信息的语言
日和月份的名称
注意: NLS_LANGUAGE 与插入和查询的数据的语言无关.
NLS_Territory 指定:
货币和数字格式
计算星期和天数的范围和惯例
客户端字符集 (CLIENTS CHARACTERSET):
定义 Oracle 客户端, 客户应用使用的编码
或者它要符合您 Microsoft Windows 代码页 (GUI 工具的 ACP, 命令提示符的 CHCP 值)
或者为 Unicode WIN32 应用设置为 UTF8/AL32UTF8.
1. 首先查询数据库的语言字符集环境变量;
- SELECT
- (SELECT VALUE from nls_database_parameters
- WHERE parameter='NLS_LANGUAGE')
- ||'_'||
- (SELECT VALUE from nls_database_parameters
- WHERE parameter='NLS_TERRITORY')
- ||'.'||
- (SELECT VALUE from nls_database_parameters
- WHERE parameter='NLS_CHARACTERSET') NLS_LANG
- FROM dual;
注意:
select userenv('language') from dual;
-- 或
select * from v$nls_parameters;
如上查询只能查询出数据库当前 session 的语言字符集,
2. 在 putty Linux 中查询当前的环境变量 NLS_LANG 是否和数据库语言字符集保持一致.
env | grep NLS_LANG
3. 不一致则使用 export 命令设置 Linux 环境变量 NLS_LANG 的值
Linux 例如: export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
如果要永久更新此变量需要在. bash_profile 文件中设置或添加的 NLS_LANG
例如: vi ~/.bash_profile
注: 远程机器如果为 Windows;
Windows 设置 NLS_LANG 有三种方式
1.cmd 命令如下:
set nls_lang=AMERICAN_AMERICA.AL32UTF8
2.. 注册表设置 (永久生效)
默认情况下, Windows 上的 Oracle 安装使用注册表来定义这个设置.
版本 10g 及以上:
HKEY_LOCALMACHINE\SOFTWARE\ORACLE\KEY<oracle_home_name>
这里您会看到一个条目名为 NLS_LANG
在 64 位 Windows 平台上安装 32 位软件, 会使用 32 位兼容性路径
HKEY_LOCALMACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY<oracle_home_name>
3.. 操作系统环境变量
尽管注册表是 Microsoft Windows 设置的主要存储位置, 它不是唯一可以设置参数的地方.
虽然不推荐, 但您可以设置 NLS_LANG 为系统属性中的系统或者用户变量. 这个设置会被所有 Oracle home 使用.
设置位置: '我的电脑' -> '属性'> '高级' -> '环境变量'
来源: http://www.bubuko.com/infodetail-3141810.html