dmp导入 oracle 丢失所有字段 - CSDN
精华内容
参与话题
  • 一、oracle数据库导入导出命令! Oracle数据导入导出imp/exp  ...大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。  Oracle有个好处,虽然你的电脑不是服务器,但是

    一、oracle数据库导入导出命令!
    Oracle
    数据导入导出imp/exp   cmd(安装oracle后已经配置好环境变量,可用该命令impexp)
    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。
     
    大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。
     Oracle
    有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接
     
    (通过Net Configuration Assistant添加正确的服务命名,其实你可以想成是客户端与服务器端修了条路,然后数据就可以被拉过来了)
     
    这样你可以把数据导出到本地,虽然可能服务器离你很远。
     
    你同样可以把dmp文件从本地导入到远处的数据库服务器中。
     
    利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。
     
    执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
     DOS
    中可以执行时由于oracle 8i   安装目录\$ora10g\BIN被设置为全局路径,
     
    该目录下有EXP.EXEIMP.EXE文件被用来执行导入导出。
     oracle
    java编写,我想SQLPLUS.EXEEXP.EXEIMP.EXE这俩个文件是被包装后的类文件。
     SQLPLUS.EXE
    调用EXP.EXEIMP.EXE他们所包裹的类,完成导入导出功能。
     
    下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。
    数据导出:
     1
    将数据库TEST完全导出,用户名system 密码manager 导出到D:\jkw20120620.dmp
       exp
    system/manager@JKW file=d:\ jkw20120620.dmp full=y
     2
    将数据库中system用户与sys用户的表导出
       exp
    system/manager@JKW file=d:\ jkw20120620.dmp owner=(system,sys)
     3
    将数据库中的表table1 table2导出
       exp
    system/manager@JKW file=d:\ jkw20120620.dmp tables=(table1,table2)
     4
    将数据库中的表table1中的字段filed1"00"打头的数据导出
       exp
    system/manager@JKW file=d:\ jkw20120620.dmp tables=(table1) query=\" where filed1 like  '00%'\"
     5.
    数据导出:
       exp
    jkw/jkw@boss_14 full=y file=d:\orabackup\jkwfull.dmplog=d:\orabackup\jkwfull.log;
      
    导出注意事项:导出的是当前用户的的数据,当前用户如果有DBA的权限,则导出所有数据!
      
    上面是常用的导出,对于压缩我不太在意,用winzipdmp文件可以很好的压缩。
      
    不过在上面命令后面加上 compress=y  就可以了

    数据的导入:
    1.
    同名用户之间的数据导入:
    imp
    jkw/jkw@orcl(用户名/密码@标示)  file=d:\orabackup\jkwfull.dmp(路径)  log=d:\orabackup\jkwimp.log(日志,可有可无) full=y

    2.不同名之间的数据导入:
    imp
    system/test@orcl(用户名/密码@标示--当前用户) fromuser=jkw(数据文件所属用户) touser=jkw_new(当前用户) file=d:\orabackup\jkwfull.dmp  log=d:\orabackup\jkwimp.log;

    二、drop user jkw cascade;  删除数据库用户命令  cascade 用于标示彻底删除该用户所属所有对象

    展开全文
  • 如果你的表空间里有多个大字段的表,那么建议你最好使用Oracle最新的数据泵技术expep/impep,这个技术能很好的支持大数据字段(clob/blob)。  那么如果你习惯使用imp/exp这种比较古老但是你顺手的技术呢。这时依...

    如果你的表空间里有多个大字段的表,那么建议你最好使用Oracle最新的数据泵技术expep/impep,这个技术能很好的支持大数据字段(clob/blob)。

       那么如果你习惯使用imp/exp这种比较古老但是你顺手的技术呢。这时依如下步骤即可解决。

       首先,使用我之前的文章导入除大数据外的其他所有表。参考:http://blog.csdn.net/kai27ks/article/details/7356269 中A异名同数据的方法。

       之后我们就要对单独的顽固分子进行操作了。

       imp "'/ as sysdba'" indexes=y  file=/exp_swserp.dmp fromuser=swserp touser=swserpreal log=/oracle_recovers/mylog.log tables=Trpreportdatasource
       

       其中tables指向的就是你的大字段的表。如果有多个用,分割即可。 这个时候你如果之前是按我那种方式做很有可能报这个错误:

       IMP-00003: oracle error 1536 encountered
       ORA-01536: space quota exceeded for tablespace 'SWSERP'

        take it easy! 把新用户在原表空间的quota设大。懒人做法: alter user new quota unlimited on old.

       再重来一次: imp "'/ as sysdba'" indexes=y  file=/exp_swserp.dmp fromuser=swserp touser=swserpreal log=/oracle_recovers/mylog.log tables=Trpreportdatasource

      Import terminated successfully without warnings.

       解决!
       PS:

            看了这篇文章的读友们,原谅我当初的无知吧~ 如果有大字段的表,默认是在原表空间内存储的。这个时候你导过去,如果没有和源表空间同名的表空间如上文的swserp,是会报错:找不到swserp表空间的。如果有的话,它会把这些数据放在源表空间--swserp里。而不是你新的表空间。这是由于大字段数据的特性决定的--表空间依赖。怎么办呢?你可以用重组去弥补这一步的错误:参加另一篇文章:重组表空间http://blog.csdn.net/kai27ks/article/details/7527943 即可解决问题。

            有人会问:有木有根本解决的方法啊亲?有的,下面就来告诉你。其实下面的方式是很多年前就有人用了,我只不过多告诉了你为什么而已。

            情况A:你有当初创建这个大字段表和主键索引等的语句,那问题就简单多了。

                           1.首先在新的表空间创建好表和主键索引等。

                            2.使用imp 加上imp userName/password@localhost:1521/orcl log=E:\impLog.2log(日志输出文件) file=e:\XXX.dump(之前那份数据库导出文件即可) touser=newUserName fromuser=oldUserName indexes=n ignore=y
    备注:indexes=n 表示不导入索引 ignore=y 表示忽略报错(表已存在)

                            3.检查--数据应该已经过去了

            情况B: 没有建表语句或者已经丢了---这其实很正常

                           1. imp 使用indexfile参数  imp userName/password@localhost:1521/orcl file=e:\XXX.dump(之前那份数据库导出文件即可) indexfile=e:\XX.sql tables=tableName(包含clob/blob大字段的表表名)

                                备注: 这一步实际上没有导入数据,而是将那个表的建表和索引语句导出到xxx.sql中

                           2. 使用那些语句建表和索引,注意先后顺序 先表,再索引。

                           3.  其余部分同情况A.2

                           4. 当然 你也可以使用其他工具导出建表和索引语句,原理一样的。


    来源:http://blog.csdn.net/kai27ks/article/details/7410699

    展开全文
  • 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数据库导入导出命令

    千次阅读 2018-09-15 15:23:40
    大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。  Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接  (通过Net Configuration Assistant添加...

    Oracle数据导入导出imp/exp 
    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。
     
    大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。
     Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接
     (通过Net Configuration Assistant添加正确的服务命名,其实你可以想成是客户端与服务器端 修了条路,然后数据就可以被拉过来了)
     这样你可以把数据导出到本地,虽然可能服务器离你很远。
     你同样可以把dmp文件从本地导入到远处的数据库服务器中。
     利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。
     
    执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
     DOS中可以执行时由于 在oracle 8i 中  安装目录\$ora10g\BIN被设置为全局路径,
     该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
     oracle用java编写,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE这俩个文件是被包装后的类文件。
     SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类,完成导入导出功能。
     
    下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。
    数据导出:
     1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
       exp system/manager@TEST file=d:\daochu.dmp full=y
     2 将数据库中system用户与sys用户的表导出
       exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
     3 将数据库中的表table1 、table2导出
       exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 
     4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
       exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like  '00%'\"
      
         上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
                         不过在上面命令后面 加上 compress=y  就可以了

    数据的导入
     1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
       imp system/manager@TEST  file=d:\daochu.dmp
       上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
       在后面加上 ignore=y 就可以了。
     2 将d:\daochu.dmp中的表table1 导入
     imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1) 
     
     基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。
     
    注意:
     你要有足够的权限,权限不够它会提示你。
     数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

     

    数据导出:
    exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;

    导出注意事项:导出的是当前用户的的数据,当前用户如果有DBA的权限,则导出所有数据!

    同名用户之间的数据导入:
    imp hkb/hkb@xe  file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y

    不同名之间的数据导入:
    imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp

    log=c:\orabackup\hkbimp.log;

    展开全文
  • Oracle中用exp/imp命令快速导入导出数据 打开支付宝首页搜索“520218643”,即可领红包,帮忙领个红包还可以抵扣哦 【用 exp 数 据 导 出】: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu....
  • Oracle数据导入导出imp/exp

    千次阅读 2005-02-25 13:23:00
     大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。 Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接 (通过net8 assistant中本地-->服务命名 ...
  • Oracle数据导入导出imp/exp?批处理文件

    千次阅读 2011-10-27 10:54:51
    如何写批处理文件自动将数据导入oracle数据库 Oracle数据库的自动导入与导出,在许多地方有广泛的应用.例如:一个Oracle数据库应用系统开发结 束后,如果要将系统安装到客户计算机上,就需要将初始数据导入到用户的...
  • 当对含有blob等类型的Oracle数据库用户备份后,在重新建立个用户导入进去,会出现blob字段的表丢失的现象解决步骤:1、新建立一个数据库用户(要使用的,如test),并指定默认使用的表空间(test)2、建立一个表空间...
  • PLSQL使用教程

    万次阅读 2019-06-14 16:33:06
    plsql基本使用教程 一、登录 1、在这里配置好数据库服务,之后就可以登录了 2、输入用户名和密码,并选择之前配置...我这服务名取为localhost。(这个名字随意起。...DATAFILE 'C:\app\Administrator\oradata\orcl...
  • oracle导入导出数据的方法

    万次阅读 2012-08-14 16:45:13
    exp ssht/taxware@sshtfile=d:\ssht.dmp exp 用户名/密码@服务名 导入: imp ssht/taxware@mysshtfile=d:\ssht.dmp fromuser=ssht touser=ssht imp 用户名/密码@服务名 注意:在导入时,首先要保证用户有权限,...
  • ORACLE导入导出

    千次阅读 2008-04-25 17:03:00
    大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接(通过net8 assistant中本地-->服务命名 添加正确...
  • 在http://icyheart.javaeye.com/blog/424760中详细分析了exp...一、修改tnsnames.ora文件(或步驟一可省略,寫法是exp[imp] 地址/數據庫實例名 file=路徑.dmp [如是imp,還要加上 full=y ] ) 加入远程服务器的命名
  • oracle导入数据时出现字段过长

    千次阅读 2014-02-27 11:06:57
    今天往oracle导入数据 出现错误说有的字段 超出的最大长度 那么出现这种情况第一反应肯定是编码的问题 网上找来文章分享一下: 一、什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之...
  • impdp system/orcl DIRECTORY=DATA_PUMP_DIR DUMP...这样导入后发现没有表和字段注释,有的索引也没有 如下显示的加上 include=index,constraint,comment impdp system/orcl DIRECTORY=DATA_PUMP_DIR DUMPFI
  • ORACLE使用EXP导出dmp文件注意事项

    万次阅读 2018-01-20 13:25:24
    Oracle 中用 imp 和 exp 命令导入导出数据库(附问题及解决办法) 用 imp 和 exp 命令导入导出数据库 (转自:http://blog.csdn.net/dong001687/article/details/73064843,尊重原创,本人备忘) 注: 在splplus...
  • Oracle中用exp/imp命令快速导入

    千次阅读 2009-04-07 09:11:00
    Oracle中用exp/imp命令快速导入【用 exp 数 据 导 出】:1 将数据库TEST完全导出,用户名system 密码manager 导出到D:/daochu.dmp中 exp system/manager@TEST file=d:/daochu.dmp full=y2 将数据库中system用户与sy
  • oracle cmd sqlplus 数据导入 数据导出

    千次阅读 2013-11-07 10:29:09
    或 直接打开开始菜单里的 oracle 路径下 sqlplus 数据导出:  1、 将数据库test完全导出,用户名system 密码manager 导出到d:/daochu.dmp中  exp system/manager@test file=d:/daochu.dmp full=y  2 、将...
  • oracle数据库导入导出命令!

    千次阅读 2014-02-26 08:36:45
    大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。  Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接  (通过Net Configuration Assistant添加...
1 2 3 4 5 ... 20
收藏数 1,097
精华内容 438
热门标签
关键字:

dmp导入 oracle 丢失所有字段