A. 如何修改oracle的字元集編碼
1. 備份資料庫亂辯中所有用戶的數據
以oracle用戶登陸,執行以下命令
# export NLS_LANG = 「SIMPLIFIED CHINESE_CHINA.UTF8」
保持與資料庫伺服器端一致,這樣在exp導出時,就不會存在字元的轉換了,備份最原始的數據。
2. 評估UTF8轉換成ZHS16GBK的風險
轉換之前,要使用Oracle的csscan工具對資料庫掃描,評估字元集轉換前後,數據有可能的損壞情況。如果評估情況糟糕,那就絕對要放棄了。孫陪陵
先安裝屬於 CSMIG 用戶的一套表和過程。以oracle用戶登則戚陸UNIX,
#sqlplus 「/ as sysdab」
SQL>@$ORACLE_HOME/ rdbms/admin/csminst.sql
SQL>exit
# $ORACLE_HOME\bin\csscan -help
可以更清楚如何使用csscan。
# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 > csscan.log
以上命令意思是掃描用戶:mmsc中的所有數據,從字元集UTF8更改為ZHS16GBK的轉換情況。然後得到三個文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用戶下的所有的數據都是可以轉換的,並且沒有出現轉換「Exceptional」的情況,因此可以更放心一點。
3. 更改資料庫的字元集為ZHS16GBK
前面說過,通過命令「Alter Database Characeter Set XXXX」,實現從超集到子集的轉換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:
Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX
B. 怎麼修改oracle11G字元集
有2種方法可行弊氏。
1. 如果需要修改字元集,通常需要導出資料庫數據,重建資料庫,再導入資料庫數據的方式來轉換。
2. 通過豎卜渣ALTER DATABASE CHARACTER SET語句修改字元集,但創建資料庫後修改字余悄符集是有限制的,只有新的字元集是當前字元集的超集時才能修改資料庫字元集,例如UTF8是US7ASCII的超集,修改資料庫字元集可使用ALTER DATABASE CHARACTER SET UTF8。
C. oracle 10如何修改字元集
1.修改伺服器端oracle默認字元集:打開「開始菜單」,在「運行」里輸入「cmd」,回車,進入命令行編
輯模式。輸入「sqlplus /nolog」,源如晌回車。修改默認字元集,以sysdba的身份執行SQL語句。輸入「conn
sys/password@orcl as sysdba;」,回車。輸入「select name,value$ from props$ where
name like
』雹鋒%NLS%』;」,查看默認字元集。找到「NLS_CHARACTERSET」,其值為「WE8ISO8859P1」。
2.修改客戶端sqlplus默認字元集:打開「開始菜單」,
在「運行」里輸入「regedit」,回車,進入注冊表編輯器。按CTRL+F,輸入「NLS_LANG」,回車,找橡舉到sqlplus軟體目錄下的
NLS_LANG,其鍵值為「WE8ISO8859P1」。雙擊「NLS_LANG」,輸入「ZHS16GBK」,點擊「確定」按鈕保存重啟計算
機。
D. 怎麼改oracle注冊表的字元集編碼
通過注冊表修改 x0dx0a HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0 x0dx0a NLS_LANG 改為你需要的字告基符集襪孫謹凱粗. x0dx0ax0dx0a常用字元集(暫時只收集到兩個) x0dx0a AMERICAN_AMERICA.WE8ISO8859P1 x0dx0a SIMPLIFIED CHINESE_CHINA.ZHS16GBK x0dx0a american_america.AL32UTF8x0dx0ax0dx0a 1--------- AMERICAN_AMERICA.zhs16gbk x0dx0a 2--------- AMERICAN_AMERICA.utf8
E. 如何修改oracle客戶端字元集
安裝oracle資料庫和客戶端都,打開plsql,如果字元集不一致會彈出這樣的提示
說一下修改方法,通過cmd命令打開注冊表,命令:regedit
打開後找到HKEY_LOCAL_MACHINE下的SOFTWARE
SOFTWARE下有Oracle選項,自己查找即可找到納廳
oracle下有好幾個目錄,可以都點點,散態因為目錄名字可能不一樣,不能肯定的說就是跟我的截圖一樣,可以明確的是,我們要找的注冊項就是NLS_LANG
找到後雙擊進行編輯,小編的簡沖茄源體中文nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK,想修改成其他字元集,編輯後保存即可
F. 如何更改Oracle字元集
轉載自寒思國內最常用的Oracle字元集ZHS16GBK(GBK
16-bit
Simplified
Chinese)能夠支持繁體中文,並且按照2個字元長度存儲一個漢字。UTF8字元集是多位元組存儲,1個漢字(簡體、繁體)有時採用3個字元長度存儲。
Oracle支持字元集的更改,但是UTF8是Oracle中最大的字元集,也就是說UTF8是ZHS16GBK的嚴格超叢廳集。
對於子集到超集的轉換,Oracle是允許的,但是對於超集到子集的轉換是不允許的。一般對於超集到子集的轉換,建議是通過dbca刪除原來的資料庫,重新再建庫,選擇正確的字元集,然後導入備份。
我的方案是:先備份數據,然後強制轉換字元集從UTF8到ZHS16GBK,然後導入備份數據。如果不行,才來重新建庫,設置字元集ZHS16GBK,導入備份數據。如果這還不行,就把更改字元集從ZHS16GBK到UTF8(這是安全的),再導入備份數據,恢復到原始狀況。這樣就有可能避開重新建庫的麻煩。
1.
備份資料庫中所有用戶的數據
以oracle用戶登陸,執行以下命令
#
export
NLS_LANG
=
「SIMPLIFIED
CHINESE_CHINA.UTF8」
保持與資料庫伺服器端一致,這樣在exp導出時,就不會存在字元的轉換了,備份最原始的數據。
2.
評估UTF8轉換成ZHS16GBK的風險
轉換之前,要使用Oracle的csscan工具對資料庫掃描,評估字元集轉換前後,數據有可能的滲彎隱損壞情況。如果評估情況糟糕,那就絕對要放棄了。
先安裝屬於
CSMIG
用戶的一套表和過程。以oracle用戶登陸UNIX,
#sqlplus
「/
as
sysdab」
SQL>@$ORACLE_HOME/
rdbms/admin/csminst.sql
SQL>exit
#
$ORACLE_HOME\bin\csscan
-help
可以更清楚如何使用csscan。
#
$ORACLE_HOME/bin/csscan
system/sunday
user=mmsc
FROMCHAR=UTF8
TOCHAR=ZHS16GBK
ARRAY=102400
PROCESS=3
>
csscan.log
以上命令意思是掃描用戶:mmsc中的所有數據,從字元集UTF8更改為ZHS16GBK的轉換情況。然後得到三個文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用戶下的所有的數據都是可以轉換的,並且沒有出現轉換「Exceptional」的情況,因此可以更放心一點。
3.
更改資料庫的字元集為ZHS16GBK
前面說過,通過命令「Alter
Database
Characeter
Set
XXXX」,實現從超集到子集的轉換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:
Alter
Database
Character
Set
INTERNAL_CONVERT/
INTERNAL_USE
XXXX
這是Oracle的非公開命令。「在使用這個命令時,Oracle會跳過所有子集及超集的檢查,在任意字元集之間進行強制轉換,所以,使用這個命令時你必須十分小心鬧亮,你必須清楚這一操作會帶來的風險」。
以oracle用戶登陸UNIX,
#sqlplus
「/
as
sysdba」
SQL>
SHUTDOWN
IMMEDIATE;
SQL>
STARTUP
MOUNT;
SQL>
ALTER
SESSION
SET
SQL_TRACE=TRUE;
SQL>
ALTER
SYSTEM
ENABLE
RESTRICTED
SESSION;
SQL>
ALTER
SYSTEM
SET
JOB_QUEUE_PROCESSES=0;
SQL>
ALTER
SYSTEM
SET
AQ_TM_PROCESSES=0;
SQL>
ALTER
DATABASE
OPEN;
SQL>
ALTER
DATABASE
CHARACTER
SET
ZHS16GBK;
//如果不使用「INTERNAL_USE」參數,系統會提示出錯:
//ERROR
at
line
1:
//ORA-12712:
new
character
set
must
be
a
superset
of
old
character
set
SQL>
ALTER
SESSION
SET
SQL_TRACE=FALSE;
SQL>
SHUTDOWN
IMMEDIATE;
SQL>
STARTUP;
此時,檢查一下資料庫的字元集是否更改過來
SQL>
select
value$
from
props$
where
name=』NLS_CHARACTERSET』;
VALUE$
-----------------
ZHS16GBK
緊接著檢查一下資料庫中簡體中文、繁體中文是否正常,不會出現亂碼。
SQL>select
spid,spname,spshortname
from
spinfovisual_hk
…...
非常不幸,我看到了一堆亂碼,這也證明了Oracle不支持字元集從超集到子集的更改,當時心裡很緊張,很怕失敗,從而恢復到原樣。
但是根據以前的驗證,把UTF8下的備份導入到ZHS16GBK中去,是OK的,所以繼續嘗試。
4.
導入備份的用戶數據
還是以oracle用戶登陸UNIX,
先刪除庫中的用戶mmsc:
#sqlplus
「/
as
sysdba」
SQL>drop
user
mmsc
cascade;
SQL>exit
再運行createuser.sql,生成mmsc用戶。
然後使用原來的備份文件,導入到mmsc用戶中:
注意:先設置NLS_LANG要與當前資料庫的一致:ZHS16GBK。這樣,導出時用戶會話的NLS_LANG為UTF8,與原先的資料庫字元集一致;現在為ZHS16GBK,與此時的資料庫字元集一致。這樣,導入時,就會進行字元轉換。
#
export
NLS_LANG
=
「SIMPLIFIED
CHINESE_CHINA.ZHS16GBK」
#imp
mmsc/mmsc@mdspdb
file=DSMPD113_user_mmsc.dmp
ignore=y
fromuser=mmsc
touser=mmsc
馬上查看資料庫中簡體、繁體中文,哈哈,沒有亂碼了,一切顯示正常。
緊接著進行驗證,也證明了:1個漢字此時只佔用2個字元長度。問題解決了!
G. 詳細介紹oracle資料庫字元集
一 什麼是oracle字元集
Oracle字元集是一個位元組數據的解釋的符號集合 有大小之分 有相互的包容關系 ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲 處理 檢索數據 它使資料庫工具 錯誤消息 排序次序 日期 時間 貨幣 數字 和日歷自動適應本地化語言和平台
影響oracle資料庫字元集最重要的參數是NLS_LANG參數 它的格式如下:
NLS_LANG = language_territory charset
它有三個組成部分(語言 地域和字元集) 每個成分控制了NLS子集的特性 其中:
Language 指定伺服器消息的語言 territory 指定伺服器的日期和數字格式 charset 指定字元集 如:AMERICAN _ AMERICA ZHS GBK
從NLS_LANG的組成我們可以看出 真正影響資料庫字元集的其實是第三部分 所以兩個資料庫之間的字元集只要第三部分一樣就可以相互導入導出數據 前面影響的只是提示信息是中文還是英文
二 如何查詢Oracle的字元集
很多人都碰到過因為字元集不同而使數據導入失敗的情況 這涉及三方面的字元集 一是oracel server端的字元集 二是oracle client端的字元集;三是dmp文件的字元集 在做數據導入的時候 需要這三個字元集都一致才能正確導入
查詢oracle server端的字元集
有很多種方法可以查出oracle server端的字元集 比較直觀的查詢方法是以下這種:SQL>select userenv( language ) from al;
結果類似如下:AMERICAN _ AMERICA ZHS GBK
如何查詢dmp文件的字元集
用oracle的exp工具導出的dmp文件也包含了字元集信息 dmp文件的第 和第 個位元組記錄了dmp文件的字元集 如果dmp文件不大 比如只有幾M或幾十M 可以用UltraEdit打開( 進制方式) 看第 第 個位元組的內容 如 然後用以下SQL查出它對應的字元集:
SQL> select nls_charset_name(to_number( xxxx )) from al;
ZHS GBK
如果dmp文件很大 比如有 G以上(這也是最常見的情況) 用文本編輯器打開很慢或者完全打不開 可以用以下命令(在unix主機上):
cat exp dmp |od x|head |awk {print $ $ } |cut c
然後用上述SQL也可以得到它對應的字元集
查詢oracle client端的字元集
這個比較簡單 在windows平台下 就是注冊表裡面相應OracleHome的NLS_LANG 還可以在dos窗口裡面自己設置 比如:
set nls_lang=AMERICAN_AMERICA ZHS GBK
這樣就隻影響這個窗口裡面的環境變數
在unix平台下 就是環境變數NLS_LANG
$echo $NLS_LANG
AMERICAN_AMERICA ZHS GBK
如果檢查的結果發現server端與client端字元集不一致 請統一修改為同server端相同的字元集
三 修改oracle的字元集
上文說過 oracle的字元集有互相的包容關系 如us ascii就是zhs gbk的子集 從us ascii到zhs gbk不會有數據解釋上的問題 不會有數據丟失 在所有的字元集中念做utf 應該是最大 因為它基於unicode 雙字凳高豎節保存字元(也因此在存儲空間上佔用更多)
一旦資料庫棗大創建後 資料庫的字元集理論上講是不能改變的 因此 在設計和安裝之初考慮使用哪一種字元集十分重要 根據Oracle的官方說明 字元集的轉換是從子集到超集受支持 反之不行 如果兩種字元集之間根本沒有子集和超集的關系 那麼字元集的轉換是不受oracle支持的 對資料庫server而言 錯誤的修改字元集將會導致很多不可測的後果 可能會嚴重影響資料庫的正常運行 所以在修改之前一定要確認兩種字元集是否存在子集和超集的關系 一般來說 除非萬不得已 我們不建議修改oracle資料庫server端的字元集 特別說明 我們最常用的兩種字元集ZHS GBK和ZHS CGB 之間不存在子集和超集關系 因此理論上講這兩種字元集之間的相互轉換不受支持
修改server端字元集(不建議使用)
在oracle 之前 可以用直接修改數據字典表props$來改變資料庫的字元集 但oracle 之後 至少有三張系統表記錄了資料庫字元集的信息 只改props$表並不完全 可能引起嚴重的後果 正確的修改方法如下:
$sqlplus /nolog
SQL>conn / as sysdba;
若此時資料庫伺服器已啟動 則先執行SHUTDOWN IMMEDIATE命令關閉資料庫伺服器 然後執行以下命令:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES= ;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES= ;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS GBK;
SQL>ALTER DATABASE national CHARACTER SET ZHS GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
修改dmp文件字元集
上文說過 dmp文件的第 第 位元組記錄了字元集信息 因此直接修改dmp文件的第 第 位元組的內容就可以 騙 過oracle的檢查 這樣做理論上也僅是從子集到超集可以修改 但很多情況下在沒有子集和超集關系的情況下也可以修改 我們常用的一些字元集 如US ASCII WE ISO P ZHS CGB ZHS GBK基本都可以改 因為改的只是dmp文件 所以影響不大
具體的修改方法比較多 最簡單的就是直接用UltraEdit修改dmp文件的第 和第 個位元組 比如想將dmp文件的字元集改為ZHS GBK 可以用以下SQL查出該種字元集對應的 進制代碼:
SQL> select to_char(nls_charset_id( ZHS GBK ) xxxx ) from al;
然後將dmp文件的 位元組修改為 即可
lishixin/Article/program/Oracle/201311/17875
H. 如何查看和修改Oracle資料庫伺服器端的字元集
A、oracle server 端字元集查詢
select userenv('language') from al
其中NLS_CHARACTERSET 為server端字元集
NLS_LANGUAGE 為 server端字元顯示形式
B、查詢oracle client端的字元集
$echo $NLS_LANG
如果發現你select 出來的數據是亂碼,請把client端的字元集配置成與linux操作系統相同的字元集。如果還是有亂碼,則有可能是資料庫中的數據存在問題,或者是oracle服務端的配置存在問題。
C、server端字元集修改
將資料庫啟動到RESTRICTED模式下做字元集更改:
SQL> conn /as sysdba Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
如果發現你select 出來的數據是亂碼,請把client端的字元集配置成與linux操作系統相同的字元集。如果還是有亂碼,則有可能是資料庫中的數據存在問題,或者是oracle服務端的配置存在問題。
.1.oracle server端字元集查詢 復制代碼代碼如下: select userenv('language') from al; server字元集修改: 將資料庫啟動到RESTRICTED模式下做字元集更改:&??
oracle10g伺服器端是安裝在AIX 6.0系統上,客戶端是安裝在windows server 2008 系統上,客戶端與伺服器已成功連接,但是資料庫表裡的中文字無法顯示,顯示為「?」,用SQLPLUS查得伺服器端的字元集為AL16uTF16,如何修改該字元集使之支持中文呢?另外oracle10G客戶端的字元集需不需要設置,如何查看和設置呢?
I. 怎樣修改查看Oracle字元集
[Q]怎麼樣查看資料庫字元集 [A]資料庫伺服器字元集select * from nls_database_parameters 其來源於props$ 是表示資料庫的字元集 客戶端字元集環境select * from nls_instance_parameters 其來源於v$parameter 表示客戶端的字元集的設置 可能是參數文件 環境變數或者是注冊表會話字元集環境 select * from nls_session_parameters 其來源於v$nls_parameters 表示會話自己的設置 可能是會話的尺型如環境變數或者是alter session完成 如果會話沒有特殊的設置 將與nls_instance_parameters一致 客戶端的字元集要求與伺服器一致 才能正確顯示資料庫的非Ascii字元 如果多個設置存在的時候 alter session>環境變數>注冊表>參數文件字元集要求一致 但是語言設置卻可以不同 語言設置建議用英文 如字租者符集是zhs gbk 則nls_lang可以是American_America zhs gbk [Q]怎麼樣修改字元集 [A] i以上版本可以通過alter database來修改字元集 但也只限於子集到超集 不建議修改props$表 將可能導致嚴重錯誤 陵啟Startup nomount;Alter database mount exclusive;Alter system enable restricted session;Alter system set job_queue_process= ;Alter database open;Alter database character set zhs gbk; lishixin/Article/program/Oracle/201311/17182