1. 程式人生 > >Linux下更改oracle客戶端字符集和服務端字符集

Linux下更改oracle客戶端字符集和服務端字符集

啟動 dia 系統 detail roc gb2 set rom com

from:http://blog.csdn.net/chid/article/details/6166506

Linux 下更改 oracle 客戶端字符集和服務端字符集

1.Linux 下更改 oracle 客戶端字符集,即設置環境變量“ NLS_LANG“ 的值

查看客戶端字符集,在終端下執行:

echo $NLS_LANG

修改客戶端字符集:

sudo gedit /etc/environment

在environment 文件中增加以下內容:

NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

export NLS_LANG

重新啟動操作系統即可。

2.

修改 oracle 服務端的字符集。

查看服務端字符集:

select userenv(‘language‘) from dual;

修改服務端字符集,終端下執行:

$ORACLE_HOME/bin/sqlplus /nolog

進入sqlplus 命令行

SQL>conn / as sysdba;

1 ) . 關閉數據庫

SQL>SHUTDOWN IMMEDIATE;

2 ) . 啟動到 Mount

STARTUP MOUNT;

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

ALTER DATABASE OPEN;

ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;

-- 下面一行語句可能會出現錯誤提示,可以不理會

ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

SHUTDOWN IMMEDIATE;

STARTUP;

3. 修改 dmp 文件字符集

dmp 文件的第2 第3 字節記錄了字符集信息,因此直接修改dmp 文件的第2 第3 字節的內容就可以‘騙’過oracle 的檢查。這樣做理論上也僅是從子集到超集可以修改,但很多情況下在沒有子集和超集關系的情況下也可以修改,我們常用的一些字符集,如 US7ASCII ,WE8ISO8859P1 ,ZHS16CGB231280 ,ZHS16GBK 基本都可以改。因為改的只是dmp 文件,所以影響不大。

具體的修改方法比較多,最簡單的就是直接用UltraEdit 修改dmp 文件的第2 和第3 個字節。比如想將dmp 文件的字符集改為ZHS16GBK ,可以用以下SQL 查出該種字符集對應的16 進制代碼:

SQL> select to_char(nls_charset_id(‘ZHS16GBK‘), ‘xxxx‘) from dual;

0354

然後將dmp 文件的2 、3 字節修改為0354 即可。

技術分享圖片

Oracle 提供標準函數,對字符集名稱及 ID 進行轉換 :

SQL> select nls_charset_id(‘ZHS16GBK‘) from dual;

NLS_CHARSET_ID(‘ZHS16GBK‘)

--------------------------

852

1 row selected.

SQL> select nls_charset_name(852) from dual;

NLS_CHAR

--------

ZHS16GBK

1 row selected.

十進制轉換十六進制 :

SQL> select to_char(‘852‘,‘xxxx‘) from dual;

TO_CH

-----

354

Linux下更改oracle客戶端字符集和服務端字符集