解決ORA-12705無法訪問NLS問題

通過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使用。
設置位置: '我的電腦' -> '屬性' > '高級' -> '環境變量'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章