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

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

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

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

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

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

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

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

需要用到的视图: nls_database_parameters、props$、v$nls_parameters

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

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

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

关于Oracle字符集在dmp文件导入导出中的乱码影响的更多相关文章

  1. 【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

    [exp/imp]将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后 ...

  2. 转-【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

    原帖地址:http://blog.csdn.net/lihuarongaini/article/details/71512116 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完 ...

  3. Linux 中 Oracle dmp 文件导入导出

    a. 用户名 system 密码 manager 导出到D:/daochu.dmp中 exp system/manager@SID file=d:/daochu.dmp full=y b. 将数据库中 ...

  4. 通过命令窗口导入导出oracle数据库到dmp文件

    通过命令窗口导入导出oracle数据库到dmp文件 很多时候我们需要备份Oracle的数据库,然后将数据导入其他数据库,因为有大文本字段会导致insert无法完全导出,只能导出为dmp文件,前提是wi ...

  5. Linux下Oracle新建用户并且将已有的数据dmp文件导入到新建的用户下的操作流程

    Oracle新建用户并且将已有的数据dmp文件导入到新建的用户下的操作流程 1.切换到oracle用户下 su - oracle 2.登录sqlplus sqlplus /nolog 3.使用sysd ...

  6. 如何将dmp文件导入到oracle数据库中

    如何将dmp文件导入到oracle数据库中 1.首先,我们可以先建立自己的一个用户表空间,创建表空间的格式如下: CREATE TABLESPACE certification(表空间的名字) DAT ...

  7. 如何将dmp文件导入到自己的oracle数据库中

    1.首先,我们可以先建立自己的一个用户表空间,创建表空间的格式如下: create tablespace test(表空间的名字) datafile 'D:\oracle\product\10.2.0 ...

  8. 如何将dmp文件导入到Oracle

    一.概述 在将dmp文件导入到Oracle中之前,需要先创建一个orcale用户.然后使用该用户名和密码,以imp的方式将数据导入到oracle中. 二.执行步骤 1.登陆oracle数据库 a.sq ...

  9. 【故障处理】IMP-00010错误 12C的dmp文件导入11G

    [故障处理]IMP-00010错误 12C的dmp文件导入11G 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其 ...

随机推荐

  1. JS 最简单数组去重

    ,,,,])) // 再把set转变成array console.log(newArr) // [1,2,3,4]

  2. linux之关于学习必备知识

    文件列表的定义: 第一个字符表示文件类型  d为目录  -为普通  1为链接  b为可存储的设备接口  c为键盘鼠标等输入设备 2~4个字符表示所有者权限,5~7个字符表示所有者同组用户权限,8~10 ...

  3. 宝塔MySQL服务自动停止重启的解决方法

    现象:客户端MYSQL无法链接 提示超过 max_connections 如果重新启动MYSQL或停止MYSQL 及重新启动系统时 需要很长时间 1个小进左右 问题描述 服务器上安装的 MySQL,会 ...

  4. Ubuntu软件中心闪退

    sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install --reinstall software-center

  5. Spring框架:@ResponseBody 中文乱码----------我的主题站内单点登录

    问题背景 本文并不是介绍@ResponseBody注解,也不是中文乱码问题的大汇总笔记,这些网上都有很多内容了.这边仅对几年前,一个卡壳了挺久时间的问题的解决过程做一个记录,以警惕自己,达到自醒得目的 ...

  6. 配置VLAN

    SW1 Switch>en Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(c ...

  7. QEMU模拟器Windows版本模拟ARMX86CPU指令

    http://qemu.weilnetz.de/ QEMU Binaries for Windows

  8. aufac在mvc中多线程

    注册的时候 将容器放到静态变量中    xxx.IocContainer = builder.Build();            var resolver = new AutofacDepende ...

  9. C++实验七

    #include <iostream> using namespace ::std; int main() { ios_base::fmtflags original_flags = co ...

  10. javascript获取某个月份的天数

    function DayNumOfMonth(Year,Month)      //例DayNumOfMonth(2017,05);{ Month--;   //月份是0~11.month=4 var ...