8idmp导入oracle 11g,11g导入8i的dmp文件问题
單位有臺老的8i的服務器掛了,手頭只有之前日常備份下來的dmp文件。
在一臺新的服務器安裝了windows2008 + 11g , 默認字符集選用ZH16GBK,??然后用IMP導入8i的DMP , 發現能導入。只不過在導入的過程,IMP提示原導出服務器的字符集是UTF8的。
于是猜測應該把數據庫字符集也改成UTF8的,才能保證原來的客戶端也正常工作,手動改數據庫字符集為UTF8,于是噩夢開始。做了多次嘗試,總是導入時出錯,大意提示“插入的字段值長度太大。。。”
經過百度,目前大概分析原因是:建表時分配的字段長度不足以存儲UTF8的字符集。觀察到imp時在建表階段varchar2類型是用byte定義的,??于是做了個變通的處理:
1 先imp空表,此時沒數據就不出錯
2 用SQL Developer 導出建表SQL腳本,用查找/替換把"byte"統統替換成"char" ,
3 drop掉空表,用新的SQL腳本建表,新表的存儲以char為單位,
4 imp導入數據,就沒有錯誤提示了。
回過頭來想,既然按原來表的定義,用byte不足以存儲UTF8的數據,只能推斷原來數據庫用的不是UTF8,只是exp的時候被轉換成了utf8,然而為什么dmp文件里會標識為UTF8呢?
另外是否oracle服務器的服務器和客戶端字符集一定要一致呢?(因為看到有文章說可以不一樣的,oracle會自動轉換,如果這樣我就沒必要費大力氣去調服務器的字符集)
本人剛接觸,許多概念不清楚,望指點。
本帖最后由 超級慢打 于 2016-3-21 20:39 編輯
分享至:
總結
以上是生活随笔為你收集整理的8idmp导入oracle 11g,11g导入8i的dmp文件问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超低功耗解决方案如何赋能Always-o
- 下一篇: oracle日常函数应用,oracle日