Oracle之 dmp導入/導出、數據庫操作等過程中的字符集問題


影響Oracle數據庫字符集最重要的參數是NLS_LANG參數。

它的格式如下: NLS_LANG = language_territory.charset

它有三個組成部分(語言、地域和字符集),每個成分控制了NLS子集的特性。

其中:

Language: 指定服務器消息的語言, 影響提示信息是中文還是英文

Territory: 指定服務器的日期和數字格式,

Charset:  指定字符集。

公司有兩個Windows環境下的數據庫,版本不同,一個是11g r2,另一個是10g r2,先說說需求:我要從11g r2導出數據庫,導入到10g r2中,要求不能有亂碼問題,包括字段注釋。

1、我先進11g所在系統,導出數據庫。

exp NJ_ZHFW/NJ_ZHFW@10.194.186.14:1521/ORCL file=E:\dmp\NJ_ZHFW20170612.dmp owner=NJ_ZHFW;

2、oracle導出的dmp文件字符集由當前數據庫字符集編碼格式決定的,和客戶端沒關系。

進入服務端查看字符集:select userenv('language') from dual; 

如果有dmp文件但進不去數據庫所在系統,那么只能通過查看dmp來確認字符集編碼格式。如何查詢/修改dmp文件的字符集

字符集編碼是:ZHS16GBK

 

3、知道了dmp文件的字符集是什么了,那么就到10g環境下導入。

a、先查看服務端的字符集編碼,這里是AL32UTF8,是支持中文的編碼,所以不需要改動。

改動服務端編碼請看這里:oracle 修改服務端字符集編碼

 

b、修改dmp文件版本,因為是從高版本導入低版本,V11.02.00 改成 V10.02.00

 

c、臨時修改環境變量,在命令行中設置NLS_LANG為環境變量,它將覆蓋注冊表和系統屬性中的NLS_LANG的定義。

在Windows下通過set nls_lang來設置,只是Session級別的,關閉cmd窗口后再打開,就又變為原來的設置了。

注意,在這里我們要將環境變量NLS_LANG的字符集編碼設置成dmp的字符集編碼,這樣我們的cmd窗口作為客戶端才能夠正確編譯dmp文件

echo %NLS_LANG%   //查看環境變量

set nls_lang=AMERICAN_AMERICA.ZHS16GBK

 

d、導入dmp文件

imp NJ_ZHFW/NJ_ZHFW@192.168.28.111:1521/orcl file=D:\Database\NJ_ZHFW20170612.dmp full=y;

 

參考資源:

Oracle之 dmp導入/導出、數據庫操作等過程中的字符集問題   http://blog.csdn.net/haiross/article/details/18225415

環境變量NLS_LANG  http://www.cnblogs.com/justuntil/p/5636574.html

Oracle 客戶端 NLS_LANG 的設置(轉)   http://www.cnblogs.com/softidea/p/3974907.html

如何查看查詢oracle字符集、 修改設置字符集以及常見的oracle utf8字符集和oracle exp 字符集問題。   http://blog.csdn.net/shen020453/article/details/51013408

oracle exp/imp 字符集 http://www.cnblogs.com/chinhr/archive/2010/01/19/1651502.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM