1. 程式人生 > >oracle imp/exp 字符集問題

oracle imp/exp 字符集問題

在做EXP/IMP操作時,會發生字符集轉換。且發生多次,具體過程如下:
1、在EXP匯出時,EXP會檢查資料庫字符集與本地NLS_LANG引數所指定的字符集是否一致,若不一致,則會發生字元轉換,而字元轉換過程中可能發生字元丟失。
    舉例來說,如果資料為AL32UTF8字符集,而本地電腦的NLS_LANG所指定的字符集是US7ASCII,那麼所有英文,數字及標準符號以外的字元在這一步時,就已經丟失了。因為ASCII不支援這些字元以外的字元,比如中文字元。

2、在IMP匯入時,先檢查匯出生成的DMP檔案的字符集標誌(如何檢視後面再說)。再檢查本地電腦的NLS_LANG的設定,若兩者不一致,則發生字符集轉換。


3、再檢查目標資料庫的字符集,若與本地電腦的NLS_LANG的設定也不一致,則再次發生字符集轉換。
如果在以上發生字符集轉換的可能點上,源字符集與目標字符集不一致,且不是目標字符集的子集,就會發生字符集的轉換,且丟失那些在目標字符集中不存在的字元資訊。

檢視DMP檔案字符集的方法:
    dmp檔案的第2和第3個位元組記錄了dmp檔案的字符集。如果dmp檔案不大,比如只有幾M或幾十M,可以用UltraEdit開啟(16進位制方式),看第2第3個位元組的內容,如0354,然後用以下SQL查出它對應的字符集:
  SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;

  ZHS16GBK
  如果dmp檔案很大,比如有2G以上(這也是最常見的情況),用文字編輯器開啟很慢或者完全打不開,可以用以下命令(在unix主機上):
  cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
  然後用上述SQL也可以得到它對應的字符集。
綜上,若希望在EXP/IMP的全過程中,不發生字元丟失,就要把本地電腦上的NLS_LANG引數設定為與資料庫相同的字符集。這樣,在整個過程中,就沒有字符集的轉換,也就不會發生因字元轉換而引發的字元丟失。但這樣做的前提是目標資料庫的字符集與源資料庫的字符集一致。
若源資料庫字符集與目標資料庫字符集不一致,則分兩種情況:

情況1:源資料庫字符集是目標資料庫的子集。則在匯出時,在匯出的電腦上設定NLS_LANG為源資料庫字符集,這樣匯出時,不會發生字符集轉換,同時匯出的檔案中,會標識該檔案所使用的字符集為源資料庫字符集。在匯入時,在本地電腦上,設定NLS_LANG引數與DMP檔案的字符集相同,這樣,在匯入的第一步時,也不會發生字元轉換,只是在從會話向資料庫中匯入資料的過程中會發生字元轉換,但由於源資料庫字符集為目標庫字符集的子集,所以,也不會發生因字元轉換而發生的字元丟失或亂碼現象。
情況2:源資料庫字符集是目標資料庫字符集的超集,或二者不相容,那麼字元丟失在所難免。除非源資料庫中的字元恰好全部在目標庫字符集中存在。比如源資料庫字符集是zhs16gbk,但儲存的全部是英文字元和數字,而沒有任何中文或中文符號,那麼,即使目標資料庫的字符集是US7ASCII,也是不會出現字元丟失的。

相關推薦

oracle imp/exp 字符集問題

在做EXP/IMP操作時,會發生字符集轉換。且發生多次,具體過程如下:1、在EXP匯出時,EXP會檢查資料庫字符集與本地NLS_LANG引數所指定的字符集是否一致,若不一致,則會發生字元轉換,而字元轉換過程中可能發生字元丟失。    舉例來說,如果資料為AL32UTF8字符

oracle imp exp 導入導出

xtend log pre nag con 查看 ada clu nbsp 一、exp導出 exp itzy/itzy@orcl file=D:\sql-bak\itzy.dmp log=D:\sql-bak\itzy.log exp 用戶/密碼@實例名 fil

oracle IMP EXP的技巧,和解決IMP-00003 遇到 ORACLE 錯誤 1435 ORA-01435

                C:/>imp neohkdev1/xml full=y file=c:/neo.2

oracle IMP EXP的技巧,和解決IMP-00003: 遇到 ORACLE 錯誤 1435 ORA-01435: 使用者不存在

C:/>imp neohkdev1/xml full=y file=c:/neo.20070411.dmp Import: Release 10.2.0.1.0 - Production on 星期四 4月 12 10:06:45 2007 Copyright (c) 1982, 2005, Orac

oracle imp/exp 備份使用

linux備份指令碼: export ORACLE_BASE=/u01/oradev/db/tech_st export ORACLE_HOME=/u01/oradev/db/tech_st/11.1.0 export ORACLE_SID=DEV export PATH=

Oracle imp&&exp 匯入匯出.dmp檔案

關鍵字   說明 (預設值)        關鍵字      說明 (預設值) -------------------------------------------------------------------------- USERID   使用者名稱/口令           FULL       匯

探索OracleEXP/IMP過程中的字符集問題

1. 問題描述:        資料庫之間的資料遷移是一個很常見的作業,EXP/IMP工具是一個常用的資料遷移及轉化工具,因其匯出檔案具有平臺無關性,所以在跨平臺遷移中,最為常用。但在實際操作過程中,涉及到源資料庫,客戶端,目標資料庫三方面的字符集問題。操作人員對三者之

Oracle使用expimp導出、導入數據

drop use conn drop user oca host sysdba 使用 ade ===========導出============ exp 用戶名/密碼@服務器(localhost) file=文件路徑.dmp owner=(用戶名) ===========

Oracle利用expimp,資料泵impdp和expdp匯入匯出資料,spool匯出資料

Oracle利用exp和imp,資料泵impdp和expdp匯入匯出資料,spool匯出資料 注意: (1)imp只能匯入exp匯出的檔案 ,imp,exp是客戶端程式,操作少量資料  (2)impdp只能匯入expdp匯出的檔案,impdp,expdp是伺服器端程式,操作適量大的

Oracle資料庫匯入匯出 imp/exp備份還原

  Oracle資料匯入匯出imp/exp    Oracle資料匯入匯出imp/exp 在cmd的dos命令提示符下執行,而不是在sqlplus裡面,但是格式一定要類似於:   imp/exp 使用者名稱/密碼@serv

Oracle使用exp,imp遷移資料庫(轉載)

1.從源資料庫匯出資料: 語法: exp user1/[email protected] file='E:test.dmp';1 示例: exp tianzhi_smart/[email protected]:1521/orcl file='E:\

Oracleexp/imp引數詳解

exp引數詳解 可在命令列介面輸入exp help=y獲取詳細說明: 引數名 預設值(格式) 說明 USERID username/password 指定要登陸使用者的

Oracle資料匯入匯出imp/exp sp2-0734:未知的命令開頭'imp 忽略了剩餘行預設分類 解決辦法

sp2-0734:未知的命令開頭'imp 忽略了剩餘行預設分類 2010-03-03 17:36:08 閱讀134 評論0 字號:大中小 很多時候問題並沒有我們想象的那麼複雜,比如這個問題,我Google,百度了很久都沒有結果, 最後在Google的一個小連結裡面看到了,

Oracle資料匯入匯出imp/exp命令 10g以上expdp/impdp命令

Oracle資料匯入匯出imp/exp就相當於oracle資料還原與備份。exp命令可以把資料從遠端資料庫伺服器匯出到本地的dmp檔案,imp命令可以把dmp檔案從本地匯入到遠處的資料庫伺服器中。 利用這個功能可以構建兩個相同的資料庫,一個用來測試,一個用來正式使用。 執行環

oracle Impexp以及匯入常見的錯誤

一 1) 資料庫物件已經存在 一般情況, 匯入資料前應該徹底刪除目標資料下的表, 序列, 函式/過程,觸發器等;    資料庫物件已經存在, 按預設的imp引數, 則會匯入失敗  如果用了引數ignore=y, 會把exp檔案內的資料內容匯入 如果表有唯一關鍵字的約束條件,

oracle中用exp,imp命令匯出dmp檔案時候存在@特殊符號

今天用exp導oracle的dmp檔案的時候發現密碼中存在@特殊字元。匯出失敗,不識別特殊符號。在網上查到了相應的解決方法,方法如下 資料庫的使用者名稱:scott 資料庫密碼:  [email

Oracle資料匯入匯出imp/exp命令

 Oracle資料匯入匯出imp/exp就相當於oracle資料還原與備份。exp命令可以把資料從遠端資料庫伺服器匯出到本地的dmp檔案,imp命令可以把dmp檔案從本地匯入到遠處的資料庫伺服器中。 利用這個功能可以構建兩個相同的資料庫,一個用來測試,一個用來正式使用。 執

ORACLE--匯入匯出/資料泵(imp/exp impdp/expdp)

最近有很多人遇到關於ORACLE資料庫,dmp檔案恢復的問題。 首先我先說一下匯入匯出:     1、強調一下目標庫,首先目標庫設定成為非歸檔模式,nologgong模式更好。(這個操作需要停庫)     2、匯入的時候可以先將索引和約束去掉(disable)(index

Oracle使用exp,imp遷移資料庫

1.從源資料庫匯出資料: 語法: exp user1/pwd1@test1 file='E:test.dmp'; 示例: exp tianzhi_smart/tianzhi_smart@19

Oracle 資料匯入匯出imp/exp命令 10g以上expdp/impdp命令

Oracle資料匯入匯出imp/exp就相當於oracle資料還原與備份。exp命令可以把資料從遠端資料庫伺服器匯出到本地的dmp文 件,imp命令可以把dmp檔案從本地匯入到遠處的資料庫伺服器中。 利用這個功能可以構建兩個相同的資料庫,一個用來測試,一個用來正式使用。