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