dmp导入乱码 oracle_oracle 导入dmp问号乱码 - CSDN
精华内容
参与话题
  • ![图片说明](https://img-ask.csdn.net/upload/201705/05/1493947044_757075.jpg) ![图片说明]...!...!...!...是需要把数据库的字符集改了吗,改成什么样?...然后重建用户 重新导入数据可以吗?
  • 1 源数据库:  字符集:SIMPLIFIEDCHINESE_CHINA.AL32UTF8  EXP导出客户端字符集(windows导出):NLS_LANG=SIMPLIFIEDCHINESE_CHINA.ZHS16GBK 2 目标数据库: ... IMP导入客户端字符集(linux客户端导入):zh_CN.

    1 源数据库:

       字符集:SIMPLIFIEDCHINESE_CHINA.AL32UTF8

      EXP导出客户端字符集(windows导出):NLS_LANG=SIMPLIFIEDCHINESE_CHINA.ZHS16GBK

    2 目标数据库:

      字符集:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

     IMP导入客户端字符集(linux客户端导入):zh_CN.UTF-8

     

    导入出现的问题:

    1 在PL/SQL中查询数据为乱码

    2 表注释为乱码

     

    解决问题1:在PL/SQL中查询数据为乱码

      数据查询乱码,如果源数据库和目标数据库字符集不冲突的话,可以考虑为PL/SQL所在的客户端的字符集问题。

     在PL/SQL所在的客户端(pl/sql都装在windows上)环境变量中增加:


    至此,查询结果正常。

     

    解决问题2:表注释为乱码

    因为是在linux端进行imp导入的,在Linux端执行export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,然后进行imp重新导入,发现注释正常。

     

    总结:一般出现乱码,考虑三方面的问题:

    1.1 导入后如果查询数据为乱码,查看PL/SQL所在客户端的字符集,修改为中文字符集。

    1.2  导入后如果查询数据为乱码,查看源端和目标端的字符集是否包含(修改数据库字符集比较复杂,不建议)

    2     导入后如果表注释为乱码,查看导入客户端的字符集是否和导出端的字符集是否一致。

     

     

     

     

    展开全文
  • 今天用命令方式导入dmp格式的整个数据库,结果查询时发现中文出现了乱码,还好旁边有数据库方面比较擅长的同事,一会解决,good 解决方法: 方法一、 1.在运行命令行输入regedit,打开注册表编辑器 2.找到HKEY_LOCAL...

    今天用命令方式导入dmp格式的整个数据库,结果查询时发现中文出现了乱码,还好旁边有数据库方面比较擅长的同事,一会解决,good

    解决方法:

    方法一、

    1.在运行命令行输入regedit,打开注册表编辑器

    2.找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1

    3.看NLS_LANG的值是否为SIMPLIFIE DCHINESE_CHINA.ZHS16GBK,不是就修改为这个值。一般这个值是正确的

    修改后重启plsql或者navicat

    方法二、

    新建环境变量

    1.环境变量名NLS_LANG

    2.值SIMPLIFIE DCHINESE_CHINA.ZHS16GBK

    保存后重启plsql或者navicat

    如果还是乱码,则将环境变量的值改为AMERICAN_AMERICA.ZHS16GBK

    再重启,问题解决。。。

    至于这个环境变量的值为什么会有两种,我现在还不是很清楚,也没有深入研究,有知道的可以评论告诉我,谢谢

    
    展开全文
  • 导库的时候遇到的,导入表后中文乱码,修改了客户端的编码依旧乱码, 参考了【点击这里查看原文】,添加了环境变量,解决。 1、regedit打开注册表,我的编码是这个: 2、参考原文,在我本机添加了环境变量:...

    导库的时候遇到的,导入表后中文乱码,修改了客户端的编码依旧乱码,

    参考了【点击这里查看原文】,添加了环境变量,解决。

    1、regedit打开注册表,我的编码是这个:

    2、参考原文,在我本机添加了环境变量:AMERICAN_AMERICA.ZHS16GBK

    3、补充一下我查询字符集的sql:

    --查询服务端字符集
    select * from nls_database_parameters;
    --查询客户端字符集
    select * from nls_instance_parameters;
    --会话字符集环境
    select * from nls_session_parameters
    --查询oracle server端的字符集--AMERICAN_AMERICA.ZHS16GBK
    select userenv('language') from dual;
    --查询16进制代码对应的编码--0354对应ZHS16GBK
    select nls_charset_name(to_number('0354','xxxx')) from dual;
    --查询编码对应的16进制代码-- ZHS16GBK对应 354
    select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual; 

    展开全文
  • oracle中imp导入数据中文乱码问题

    千次阅读 2015-03-31 12:30:38
    用imp命令向oracle导入数据后,所有查询出的中文字段都为乱码. 1. 原则上不修改服务器端的字符集,修改服务器端的字符集会出现使用第三方工具登陆数据库出现乱码的情况(具体服务器端的字符集修改办法本文有详细...

    用imp命令向oracle中导入数据后,所有查询出的中文字段都为乱码.

    1.       原则上不修改服务器端的字符集,修改服务器端的字符集会出现使用第三方工具登陆数据库出现乱码的情况(具体服务器端的字符集修改办法本文有详细介绍)。

    2.       将DMP文件的字符集改成与Oracleo数据库服务器端一样之后导入可正常显示。本人的系统是RHEL 5.4 32bit

    一、什么是oracle字符集

    Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

    影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:

    NLS_LANG = LANGUAGE_TERRITORY.CHARSET

    它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:

    Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. UTF8

    从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

    二、如何查询Oracle的字符集

    很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集:

    1.         oracel server端的字符集。

    2.         oracle client端的字符集。

    3.         DMP文件的字符集。

    在做数据导入的时候,需要这三个字符集都一致导入后才会不出现乱码。

    查询oracle server端的字符集

    有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:

    SQL> select userenv('language') from dual;

     

    USERENV('LANGUAGE')

    ----------------------------------------------------

    AMERICAN_AMERICA.UTF8

     

    SQL>

    结果类似如下: AMERICAN_AMERICA.UTF8

    如何查询DMP文件的字符集

    用oracle的exp工具导出的DMP文件也包含了字符集信息,DMP文件的第2和第3个字节记录了DMP文件的字符集。如果DMP文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:

    SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;

    ZHS16GBK

    如果DMP文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

    cat www.yeserver.com.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

     

    $ cat www.yeserver.com.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

    0345

    $

     

    然后用上述SQL也可以得到它对应的字符集。

    查询oracle client端的字符集

    在Linux/UNIX平台下,就是环境变量NLS_LANG。

    $echo $NLS_LANG

    AMERICAN_AMERICA.UTF8

     

    在windows平台下,注册表里面的HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG。还可以在DOS窗口里面临时设置,比如:set nls_lang=AMERICAN_AMERICA.UTF8

    这样就只影响这个窗口里面的环境变量。

     

    请确保server端与client端字符集相一致。

    三、修改oracle的字符集

    oracle的字符集有互相的包容关系。如US7ASCII就是ZHS16GBK的子集,从US7ASCII到ZHS16GBK不会有数据解释上的问题,不会有数据丢失。在所有的字符集中UTF8应该是最大,因为它基于UNICODE,双字节保存字符(也因此在存储空间上占用更多)。

    一旦数据库创建后,数据库的字符集理论上讲是不能改变的。根据Oracle的官方说明,字符集的转换是从子集到超集,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受Oracle支持的。在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。

    特别说明,我们最常用的两种字符集ZHS16CGB231280和ZHS16GBK之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。

     

    关于字符集的对应关系可以查看Oracle官方说明:

    http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/applocaledata.htm

     

    修改server端字符集(不建议使用)

    在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

    $sqlplus “/as sysdba”

    先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,

    然后执行以下命令:

    SQL>STARTUP MOUNT;

    SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

    SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

    SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

    SQL>ALTER DATABASE OPEN;

    SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8;  //跳过超子集检测

    SQL>ALTER DATABASE national CHARACTER SET INTERNAL UTF8;

    这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,其他文章里未提到本行。

    SQL>SHUTDOWN IMMEDIATE;

    SQL>STARTUP;

    修改DMP文件字符集

    DMP文件的第2第3字节记录了字符集信息,因此直接修改DMP文件的第2第3字节的内容就可以骗过oracle的检查。理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是DMP文件,所以影响不大。

    具体的修改方法比较多,最简单的就是直接用UltraEdit修改DMP文件的第2和第3个字节。比如想将DMP文件的字符集改为UTF8,可以用以下SQL查出该种字符集对应的16进制代码:

    SQL> select to_char(nls_charset_id('UTF8'), 'xxxx') from dual;

    SQL> select to_char(nls_charset_id('UTF8'), 'xxxx') from dual;

     

    TO_CH

    -----

      367

     

    SQL>

    然后将DMP文件的2、3字节修改为0367即可。

    如果DMP文件很大,用UltraEdit无法打开,就需要用其它方法的方法了。


    更多信息请登陆我的网站:www.yeserver.com

    展开全文
  • 今天碰到一个问题,需要在另外一台机器(经过核实,本机器上已经安装过oracle数据库)上...如何导入呢?步骤如下: 机器环境是windows条件下,win7: 1.打开“开始”--->输入cmd,打开cmd命令窗口,输入:sqlplus / as
  • oracle数据库导入、导出dmp文件

    万次阅读 2017-10-24 14:19:43
    今天碰到一个问题,需要在另外一台机器(经过核实,本机器上已经安装过oracle数据库)上导入...如何导入呢?步骤如下: 机器环境是windows条件下,win7: 1.打开“开始”--->输入cmd,打开cmd命令窗口,输入:sqlplu
  • 问题描述:用a.sql文件执行insert,不论是通过pl/sql还是sqlplus @文件名都是中文数据出现乱码。 绝大多数情况是环境变量NLS_LANG的值和数据库字符集不一致导致。 查看环境变量 echo $NLS_LANG 查看数据库字符集 ...
  • oracle开始装的时候是utf-8,数据直接导出成dmp,后来要重装oracle,是zh16gbk,导入dmp后中文乱码了,怎么解决啊
  • [oracle@kf15-1]:/users/oracle>$ exp iscs/naritech@192.1.101.215/i1000 tables=alarm_backup file=alarm_backup_unix.dmp satistics=none buffer=1000000Export: Release 10.2.0.4.0 - Production on 星期四 8月 ...
  • 搭建Linxu或者Windows数据库Oracle 搭建完毕后,生成一个系统账号 这是就可以利用系统的sysdba进行其余用户、空间、权限的创建,之后把你的导出的dmp文件导入。 但在此之前,需要注意 不能直接进行导入...
  • Oracle如何导出dmp文件

    千次阅读 2018-10-21 14:36:14
    导出dmp文件 进入目录:/home/oracle/20181021 执行命令: exp 导入数据库用户名/密码 file=导出的dmp文件 log=日志名称 owner=导出的数据库名 截图如下:   exp aibs/aibs file=aibs_20181021.dmp log=...
  • oracle 11g impdp导入表数据中文不乱码,字段注释中文乱码,原数据库字符编码AMERICAN_AMERICA.AL32UTF8,目标数据库字符编码AMERICAN_AMERICA.UTF8,百度的方法更改客户端字符集各种情况均已尝试,均以失败告终,望...
  • linux下导出导入oracle数据库dmp

    千次阅读 2019-10-04 23:33:15
    1.linux下创建oracle表空间 /*linux下登陆sqlplus*/ sqlplus / as sysdba --或者 sqlplus 用户名:sys 口令:change_on_install as sysdba /*创建临时表空间 test_temp */ CREATE TEMPORARY TABLESPACE test_...
  • Linux导入Oracledump文件乱码等问题

    千次阅读 2018-08-15 18:22:11
    本地PL/SQL导出sql文件导入到Linux服务器上的Oracle数据库出现数据乱码 检查数据库字符集参数“NLS_LANGUAGE”、 “NLS_TERRITORY”、 “NLS_CHARACTERSET'”的值。 select parameter,value from nls_database_...
  • oracle导入dmp乱码问题

    千次阅读 2014-05-16 17:07:18
    站内相关文章|Related Articles DBA警世录:where条件很重要 《循序渐进Oracle》一书第三章目录 ...更改导出文件字符集的小工具 ...DBA警世录:更新系统表(props$)修改字符集 ...中文表名-导入导出-字符集
  • 解决plsql导入后中文乱码

    千次阅读 2018-04-25 16:14:03
    转载 2016年12月06日 11:27:054670转载于 http://blog.csdn.net/guowd/article/details/50989109PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起...
  • Oracle导入dmp文件字符集对应不上

    千次阅读 2018-02-08 14:32:00
  • 三、数据库导入   手头的系统已初步开发完成,目前正着手准备搭建压测环境,这篇文件记录数据库的复制、粘贴的过程。   操作比较简单,不足之处,还请指正。 一、操作环境 操作系统:Red Hat Enterprise...
  • Oracledmp导入/导出、数据库操作等过程中的字符集问题 开篇:因为要定位一个 关于dmp文件导入的乱码问题, 于是乎我开始了漫长了 Oracle字符集搜索之路,网上关于讲解oracle字符集的文章多得数不胜数,但...
1 2 3 4 5 ... 20
收藏数 1,067
精华内容 426
关键字:

dmp导入乱码 oracle