expdp/impdp導致儲存過程中的中文部分出現亂碼

qdrzq發表於2014-04-24
接到客戶反饋的問題,
Linux下Oracle11gRAC(64位)環境下expdp匯出產生dmp檔案,由Windows平臺Oracle10.2.0.4(64位)的impdp匯入到Oracle10.2.0.4資料庫.
匯入之後發現,部分儲存過程編譯不通過.
檢視其原因,是個別儲存過程中的中文部分出現亂碼.
例如:

ps_Message :='取得商品的上次批發數量和批發價';
變成了:
ps_Message :='取得商返納洗聞?⑹?亢團?⒓?apos;;

ps_Message:=substr('配送驗收調整可配送餘額意外出錯:'||vs_Message,1,2000);
變成了:
ps_Message:=substr('淥脫槭盞髡?膳淥陀嘍鉅饌獬齟恚?apos;||vs_Message,1,2000);

ps_Message:='轉移不完整的流水失敗!';
變成了:
ps_Message:='轉移不完整的流水О埽?apos;;

--生成要貨單主表
     select count(*), nvl(sum(yhCount), 0)
變成了:
--生梢?醯ブ鞅?     select count(*), nvl(sum(yhCount), 0)

即從某個漢字開始起,缺少了漢字的高位元組.
難道expdp/impdp對oracle資料字典表的內容(dba_source的text列,對應底層:sys.source$.source列varchar2(4000) ) 能產生差異?
目前是通過從正式環境獲取正確的儲存過程指令碼,重新執行解決了本問題.

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

相關文章