標籤:檢查 pen 基本 分享圖片 子集和 idt xxxx 很多 sysdba
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用戶端字元集和服務端字元集