Ø 簡介
在 Oracle 中創建數據庫實例后,就會有對應使用的編碼字符集。當我們設置的字符集與操作系統或者其他軟件字符集不一致時,就會出現中文亂碼等情況。此時我們就需要修改 Oracle 數據庫使用的字符集,下面是修改 Oracle 字符集的具體步驟:
Oracle 一般使用以下兩種字符集:
1. SIMPLIFIED CHINESE_CHINA.ZHS16GBK
GBK 16-bit Simplified Chinese 能夠支持繁體中文,並且按照2個字符長度存儲一個漢字。
2. SIMPLIFIED CHINESE_CHINA.AL32UTF8
多字節存儲,1個漢字(簡體、繁體)有時采用3個字符長度存儲。Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是說UTF8是ZHS16GBK的嚴格超集。
首先,我們查看數據庫實例所使用的字符集:
sqlplus "/as sysdba"
select userenv('language') from dual;
當前(orcl)使用的是 CHINESE_CHINA.AL32UTF8 字符集,下面進行修改:
1. 運行 CMD
2. 進入指定數據庫實例
set ORACLE_SID=ORCL #"ORCL"表示需要修改字符集的數據庫實例名
3. 輸入命令
sqlplus /nolog
4. 登錄數據庫
conn /as sysdba
5. 關閉數據庫實例
SHUTDOWN IMMEDIATE;
6. 打開控制文件
STARTUP MOUNT;
7. 開啟限制會話模式
ALTER SYSTEM ENABLE RESTRICTED SESSION;
--ALTER SYSTEM DISABLE RESTRICTED SESSION; #取消限制會話模式
8. 設定job隊列可以啟動的進程數
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
說明:JOB_QUEUE_PROCESSES=0,則DBMS_JOB作業和Oracle Scheduler作業將不會在實例上運行。參考:https://blog.csdn.net/leshami/article/details/8694772
9. 禁用隊列監視器協調器
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
10. 修改並打開數據庫
ALTER DATABASE OPEN;
11. 修改數據庫字符集
ALTER DATABASE CHARACTER SET ZHS16GBK;
當提示我們:新字符集必須為舊字符集的超集合,使用以下命令:
ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
12. 查看參數列表
select * from v$nls_parameters;
可以看到,此時已經改為了"ZHS16GBK"字符集。
13. 設置完成后,關閉數據庫
SHUTDOWN IMMEDIATE;
14. 再次打開數據庫
STARTUP OPEN;
15. 這時我們再使用之前的方式查看字符集
select userenv('language') from dual;
OK,ORLC 數據庫的字符集就改為了"CHINESE_CHINA.ZHS16GBK"。