如何查看和修改Oracle數(shù)據(jù)庫服務器端的字符集
Oracle數(shù)據(jù)庫查看和修改服務器端的字符集的方法是本文主要要介紹的內(nèi)容,接下來救讓我們一起來了解一下這部分內(nèi)容。
A、oracle server 端字符集查詢
select userenv(‘language’) from dual
其中NLS_CHARACTERSET 為server端字符集
NLS_LANGUAGE 為 server端字符顯示形式
B、查詢oracle client端的字符集
$echo $NLS_LANG
如果發(fā)現(xiàn)你select 出來的數(shù)據(jù)是亂碼,請把client端的字符集配置成與linux操作系統(tǒng)相同的字符集。如果還是有亂碼,則有可能是數(shù)據(jù)庫中的數(shù)據(jù)存在問題,或者是oracle服務端的配置存在問題。
C、server端字符集修改
將數(shù)據(jù)庫啟動到RESTRICTED模式下做字符集更改:
- SQL> conn /as sysdba
 - Connected.
 - SQL> shutdown immediate;
 - Database closed.
 - Database dismounted.
 - ORACLE instance shut down.
 - SQL> startup mount
 - ORACLE instance started.
 - Total System Global Area 236000356 bytes
 - Fixed Size 451684 bytes
 - Variable Size 201326592 bytes
 - Database Buffers 33554432 bytes
 - Redo Buffers 667648 bytes
 - Database mounted.
 - SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
 - System altered.
 - SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
 - System altered.
 - SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
 - System altered.
 - SQL> alter database open;
 - Database altered.
 - SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
 - ALTER DATABASE CHARACTER SET ZHS16GBK
 - ERROR at line 1:
 - ORA-12712: new character set must be a superset of old character set
 
提示我們的字符集:新字符集必須為舊字符集的超集,這時我們可以跳過超集的檢查做更改:
- SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
 - Database altered.
 - SQL> select * from v$nls_parameters;
 - 略
 - 19 rows selected.
 
重啟檢查是否更改完成:
- SQL> shutdown immediate;
 - Database closed.
 - Database dismounted.
 - ORACLE instance shut down.
 - SQL> startup
 - ORACLE instance started.
 - Total System Global Area 236000356 bytes
 - Fixed Size 451684 bytes
 - Variable Size 201326592 bytes
 - Database Buffers 33554432 bytes
 - Redo Buffers 667648 bytes
 - Database mounted.
 - Database opened.
 - SQL> select * from v$nls_parameters;
 - 略
 - 19 rows selected.
 
我們看到這個過程和之前ALTER DATABASE CHARACTER SET操作的內(nèi)部過程是完全相同的,也就是說INTERNAL_USE提供的幫助就是使Oracle數(shù)據(jù)庫繞過了子集與超集的校驗.
這一方法在某些方面是有用處的,比如測試;應用于產(chǎn)品環(huán)境大家應該格外小心,除了你以外,沒有人會為此帶來的后果負責。
結語(我們不妨再說一次):
對于DBA來說,有一個很重要的原則就是:不要把你的數(shù)據(jù)庫置于危險的境地!
這就要求我們,在進行任何可能對數(shù)據(jù)庫結構發(fā)生改變的操作之前,先做有效的備份,很多DBA沒有備份的操作中得到了慘痛的教訓。
D、client端字符集修改
在 /home/oracle與 /root用戶目錄下的.bash_profile中
添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 語句
關閉當前ssh窗口。
注意:NLS_LANG變量一定要配置正確否則會引起sqlplus 失效。
關于Oracle數(shù)據(jù)庫查看和修改服務器端的字符集的方法就介紹到這里了,希望能夠對您有所收獲!
【編輯推薦】















 
 
 

 
 
 
 