博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Oracle字符集在dmp文件导入导出中的乱码影响
阅读量:5243 次
发布时间:2019-06-14

本文共 962 字,大约阅读时间需要 3 分钟。

Oracle 在进行dmp备份和还原的时候,服务器端字符集和客户端字符集会对这个过程有较大影响,特别是数据表中存储了中文、存储过程中使用了中文编码(注释)的时候,如果没有处理好字符集的问题,在进行还原的时候就会遇到问题,我所遇到过的问题有一下几种:

1:导入后数据表中存储的中文字符成了乱码;

2:导入后存储过程中的中文字符成了乱码;

3:导入时,提示某些存储过程不存在,报IMP-00098 INTERNAL ERROR:impccr2错误:

 

      其中问题1出现的原因是源数据库使用的字符集和你现在导入的目标数据库字符集不一致,且目标数据库字符集不是源数据库字符集的超集。解决办法是修改目标数据库的字符集(这个字符集是在创建数据库实例的时候设置的),改成和源数据库一致,再执行导入操作,可以解决数据表中中文字符乱码问题。

      问题2和问题3的解决办法,修改客户端字符集,检查你的系统环境变量NLS_LANG的值或者注册表HKEY_LOCAL_MACHINE-->SOFTWARE-->ORACLE 在这个分支下面找NLS_LANG键,修改这个键值再重新导入数据即可。

 

最后我们需要知道字符集应该改成什么?

方法一:去源数据库上查询 

需要用到的视图: nls_database_parametersprops$v$nls_parameters

方法二:查看导入的时候sqlplus中的提示信息:

最后一行可以看到,export client uses ....也就是说导出客户端使用的字符集是ZHS16GBK,而且根据当前的设置,是有可能进行字符集的转换(也就意味着有可能出现乱码,如果现在用的字符集不是导出字符集的超集)。所以这里就用该把导入数据库客户端字符集设置成ZHS16GBK,再执行导入可以解决问题。

 

网上有些办法是修改dmp文件,个人认为,如果是目标数据库端字符集不满足要求,可以采用这种方法修改dmp文件,毕竟server端字符集不能随便更改(生产server一个实例下可能有多个应用系统的用户数据)。如果是客户端字符集问题,建议还是修改一下客户端字符集配置,等导入完成之后再把客户端字符集修改回来。

转载于:https://www.cnblogs.com/zheng-hong-bo/p/3815004.html

你可能感兴趣的文章
Qt中SQLite数据库编程
查看>>
MYSQL表情存储数据库报错
查看>>
zTree V3 是个好东西 功能很强大
查看>>
linux下/dev/null被误删
查看>>
sysbench的安装及使用
查看>>
汽车制造MES介绍之1 - PMC过程监控
查看>>
我的第一个python web开发框架(7)——本地部署前端访问服务器
查看>>
解决Linux用户模板文件被删除后显示不正常问题
查看>>
问题诊断神器arthas
查看>>
html转pdf、html页面保存为word文件、将页面上的table表格导出为excel
查看>>
201521123029《Java程序设计》第三周学习总结
查看>>
camera摄像原理之四:曝光和GAMMA
查看>>
AS和C#通信,Flash和.net (winform)通信
查看>>
实现简易的android 直播技术
查看>>
Android中Socket大文件断点上传
查看>>
服务没有mysql
查看>>
ubuntu iftop工具安装和参数
查看>>
实现Runnable接口方式
查看>>
《Linux内核设计与实现》第4章读书笔记
查看>>
iOS开发日记57-详解Quartz 2D
查看>>