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 编辑

分享至:

90ed4b13fe016cebd9fe3df2ae3a899b.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值