1. 程式人生 > 其它 >修改 Oracle 資料庫例項字符集

修改 Oracle 資料庫例項字符集

簡介

在Oracle中建立資料庫例項後,就會有對應使用的編碼字符集。當我們設定的字符集與作業系統或者其他軟體字符集不一致時,就會出現中文亂碼等情況。此時我們就需要修改Oracle資料庫使用的字符集,下面是修改Oracle字符集的具體步驟:

Oracle一般使用以下兩種字符集:

  1. 1.SIMPLIFIED CHINESE_CHINA.ZHS16GBK

GBK 16-bit Simplified Chinese能夠支援繁體中文,並且按照2個字元長度儲存一個漢字。

  1. 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. 1.執行CMD

  1. 2.進入指定資料庫例項

set ORACLE_SID=ORCL#"ORCL"表示需要修改字符集的資料庫例項名

  1. 3.輸入命令

sqlplus /nolog

  1. 4.登入資料庫

conn /as sysdba

  1. 5.關閉資料庫例項

SHUTDOWN IMMEDIATE;

  1. 6.開啟控制檔案

STARTUP MOUNT;

  1. 7.開啟限制會話模式

ALTER SYSTEM ENABLE RESTRICTED SESSION;

--ALTER SYSTEM DISABLE RESTRICTED SESSION;#取消限制會話模式

  1. 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

  1. 9.禁用佇列監視器協調器

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

  1. 10.修改並開啟資料庫

ALTER DATABASE OPEN;

  1. 11.修改資料庫字符集

ALTER DATABASE CHARACTER SET ZHS16GBK;

當提示我們:新字符集必須為舊字符集的超集合,使用以下命令:

ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;

  1. 12.檢視引數列表

select * from v$nls_parameters;

可以看到,此時已經改為了"ZHS16GBK"字符集。

  1. 13.設定完成後,關閉資料庫

SHUTDOWN IMMEDIATE;

  1. 14.再次開啟資料庫

STARTUP OPEN;

  1. 15.這時我們再使用之前的方式檢視字符集

select userenv('language') from dual;

OK,ORLC資料庫的字符集就改為了"CHINESE_CHINA.ZHS16GBK"。