exp/imp 環境變數字元集轉換問題
注意點:exp imp用戶端編碼,盡量保證用戶端編碼和資料庫編碼一樣,避免字元轉換。
其他方式,保證exp的用戶端編碼和imp的用戶端編碼一樣,如果出現imp或 exp出錯時,可從exp匯出log中來尋找資訊,可以看到如下資訊:
環境:使用exp/imp升級並遷移資料庫從win 10.2.0.1 升級到linux11.2.0.3
原庫Exp匯出日誌資訊:
Connectedto: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bitProduction
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in US7ASCIIcharacter set and AL16UTF16 NCHAR character set
server uses ZHS16GBK character set(possiblecharset conversion)
可以看出原庫字元集是ZH16GBK而用戶端編碼是US7ASCII
新庫Imp匯入日誌資訊:
Exportfile created by EXPORT:V10.02.01 via conventional path
import done in ZHS16GBKcharacter set and AL16UTF16 NCHAR character set
export client uses US7ASCII character set (possible charset conversion)
Imp匯入用戶端編碼為ZHS16GBK
這樣資料在新庫匯入是會出問題的
因為新庫的用戶端編碼和資料庫的字元集一樣,就不去做字元轉換,直接匯入資料,即會忽略原來匯出時,原庫和其用戶端發生的一次字元轉換,為了正確匯入資料,我們需要在匯入端再做一次字元轉換,即設定匯入端的用戶端編碼為:
NLS_LANG=AMERICAN_AMERICA.US7ASCII
這樣就可以兩兩抵消了。