背景:公司給更換了配置較高的筆記本,所以一切軟件又要重新安裝了柒竞,也是又一次翻著百度安裝Oracle,技術(shù)不到家也好朽基,保險也罷,我實在是怕錯了一步离陶,又要卸載了從頭再來,卸載干凈Oracle實在是太惡心招刨。在其中的一步霎俩,由于我忘記原來備份的數(shù)據(jù)庫是以什么字符集存儲的,就手賤的把正在安裝的字符集更換成了“UTF8”沉眶,而原來的字符集是默認(rèn)的打却,so,就有了這篇文章谎倔。原諒小白昏頭昏腦的這一波操作柳击。
修改服務(wù)端數(shù)據(jù)庫字符集
由于我的數(shù)據(jù)端本身就是在自己的電腦上安裝著,所以就不存在什么遠(yuǎn)程操作了片习。倘若要修改虛擬機(jī)或是其他PC上的數(shù)據(jù)庫字符集捌肴,那還是要SSH到遠(yuǎn)程位置進(jìn)行操作。
- 查詢目前數(shù)據(jù)庫所使用的字符集(可直接在plsql中執(zhí)行以下語句):
select * from V$NLS_PARAMETERS;
其中查詢結(jié)果中 “NLS_CHARACTERSET” 的值即為目前所使用的藕咏,大部分都為“ZHS16GBK”或“AL32UTF8”的其中一種状知。我的結(jié)果如下圖(我已經(jīng)修改回來了):
原來的值為“AL32UTF8”,我要改成圖中的結(jié)果孽查。
- 修改字符集(將“AL32UTF8”更改為“ZHS16GBK”)
其實饥悴,平常我們執(zhí)行sql等基本已經(jīng)熟悉了plsql客戶端的方式,但這個修改是要在cmd命令行中進(jìn)行的卦碾。
- win+R铺坞,輸入“cmd”進(jìn)入命令行起宽;
- 將數(shù)據(jù)庫啟動到RESTRICTED模式[1]下做字符集更改:
進(jìn)入sqlplus
SQL\> sqlplus/nolog
以管理員身份登錄
SQL\> conn / as sysdba
-
然后就是關(guān)閉數(shù)據(jù)庫洲胖,進(jìn)入限制模式,修改字符集
SQL\> shutdown immediate;
數(shù)據(jù)庫已經(jīng)關(guān)閉坯沪。
已經(jīng)卸載數(shù)據(jù)庫绿映。
ORACLE 例程已經(jīng)關(guān)閉。SQL> startup mount;
ORACLE 例程已經(jīng)啟動。
Total System Global Area 6781128704 bytes
Fixed Size 2188608 bytes
Variable Size 3523218112 bytes
Database Buffers 3238002688 bytes
Redo Buffers 17719296 bytes
數(shù)據(jù)庫裝載完畢叉弦。SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
系統(tǒng)已更改丐一。
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
系統(tǒng)已更改。
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
系統(tǒng)已更改淹冰。
SQL> alter database open;
數(shù)據(jù)庫已更改库车。
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK*
第 1 行出現(xiàn)錯誤:
ORA-12712: 新字符集必須為舊字符集的超集此處我們使用“INTERNAL_USE ZHS16GBK”字符集來跳過子集檢查。
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
數(shù)據(jù)庫已更改樱拴。
- 現(xiàn)在我們就已經(jīng)把字符集修改完畢了柠衍。重啟一下數(shù)據(jù)庫。
SQL> shutdown immediate;
SQL> startup;
- 再次執(zhí)行查詢字符集語句晶乔,可看到修改結(jié)果珍坊。
- 修改環(huán)境變量。
我使用的是Windows環(huán)境正罢,所以直接添加系統(tǒng)變量阵漏。
變量名稱:NLS_LANG;
變量值:SIMPLIFIED Chinese_CHINA.ZHS16GBK(你修改的值);
這樣服務(wù)端的數(shù)據(jù)庫字符集就修改完成了。
修改客戶端數(shù)據(jù)庫字符集
客戶端的字符集就不涉及到數(shù)據(jù)庫的命令了翻具,主要是Oracle客戶端與數(shù)據(jù)庫內(nèi)置不一致導(dǎo)致的履怯,修改安裝數(shù)據(jù)庫時的注冊表就可以。
- win + R裆泳,輸入“regedit”進(jìn)入注冊表設(shè)置;
- 按照以下目錄層級找到目標(biāo)位置:
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb11g_home1/NLS_LANG
- 將這個變量的值設(shè)置為你想要修改的值即可晾虑。
這樣客戶端的字符集也設(shè)置完畢了帜篇。
目前字符集是設(shè)置完畢,可是原來是GBK的數(shù)據(jù)導(dǎo)入到了UTF8字符集的數(shù)據(jù)庫里洪灯,再改回來也還是亂碼竟痰,只能重新導(dǎo)入dmp備份文件了。下一篇就是總結(jié)的Oracle導(dǎo)入dmp文件的內(nèi)容铅檩。
PS:目前自認(rèn)技術(shù)還差的很遠(yuǎn)很遠(yuǎn)莽鸿,幾乎算是小白一個拾给,所以蒋得,記錄這些小的知識點不光是為了以后自己翻起來方便乒疏,而且對自己也是一種成長,也希望能幫到跟我一樣的小白怕吴。我熱愛這個行業(yè),享受創(chuàng)造的過程疏之,所以才需要更努力去見識更大的天空暇咆。知識淺顯,還請各位莫要取笑其骄。
參考資料:Fred扯旷、的竊竊私語博客
-
在這種模式下,服務(wù)器端只有擁有dba角色的用戶和具有restrict session權(quán)限的用戶才能連接數(shù)據(jù)庫毯炮;在遠(yuǎn)程無論擁有什么角色都無法連接桃煎。在數(shù)據(jù)庫做運(yùn)維(變更)的情況下且不想其他會話連接到數(shù)據(jù)庫大刊,那么可以使用此種方式,避免其他用戶連接葫辐。 ?