修改exp 的 匯出dmp檔案的字符集

wisdomone1發表於2010-06-24
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也可以得到它對應的字符集。

直接修改dmp檔案的第2第3位元組的內容就可以‘騙’過oracle的檢查。這樣做理論上也僅是從子集到超集可以修改,但很多情況下在沒有子集和超集關係的情況下也可以修改,我們常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因為改的只是dmp檔案,所以影響不大。

  具體的修改方法比較多,最簡單的就是直接用UltraEdit修改dmp檔案的第2和第3個位元組。比如想將dmp檔案的字符集改為ZHS16GBK,可以用以下SQL查出該種字符集對應的16進位制程式碼:

  SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;

  0354

  然後將dmp檔案的2、3位元組修改為0354即可。
 
 
 
 
 
小結:
   1,小檔案dmp可以直接用ultraedit開啟,修改第2,3個位元組為目標資料庫字符集的字符集編碼(這個編碼是16進位制),第2,3個位元組對應ultraedit開啟第一行的第1,2列(從0列開始排)
   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-666071/,如需轉載,請註明出處,否則將追究法律責任。

相關文章