欢迎投稿

今日深度:

Oracle数据IMP和EXP命令用法详解,

Oracle数据IMP和EXP命令用法详解,


目录
  • 前言
  • 1. EXP(Export)
    • 举例
  • 2. IMP(Import)
    • 举例
  • 使用导入工具imp时可能出现的问题 :
    • (1) 数据库对象已经存在
    • (2) 数据库对象有主外键约束
    • (3) 权限不够
    • (4) 导入大表( 大于80M ) 时, 存储分配失败
    • (5) imp和exp使用的字符集不同
    • (6) imp和exp版本不能往上兼容
  • exp和imp与数据泵expdp和impdp的区别:
    • 总结 

      前言

      Oracle 的 EXP(Export)和 IMP(Import)是两个非常重要的命令,它们用于数据库的备份和恢复。下面我们将详细介绍这两个命令及其参数的用法。

      1. EXP(Export)

      EXP命令可以看作是一个搬运工人,他的工作就是将你指定的物品(数据)从Oracle数据库搬出,并打包成一个 .dmp 文件。这个过程就像是你要搬家,需要将你的所有物品打包好,准备搬到新家。

      以下是EXP命令的一般格式和常用参数:

      exp userid=<用户名>/<密码>@<数据库连接> file=<导出文件的路径和名称> owner=<要导出的用户名称> tables=<要导出的表名称> full=<是否全库导出>
      
      • userid:这是告诉搬运工人钥匙在哪(数据库连接信息),以及如何开门(用户名和密码)。

      • file:这是告诉搬运工人将物品搬到哪个箱子里(即导出文件的路径和名称)。

      • owner:这是指定要导出哪个公司的物品(即用户名称)。如果没有指定,那么搬运工人将打包你拥有权限的所有物品。

      • tables:这是指定要搬运哪些特定的物品(即表名称)。如果没有指定,那么就搬运全部的物品。

      • full:这是告诉搬运工人是否要打包整栋楼的物品(即是否全库导出)。如果设置为 y,则不论你是否拥有权限,只要能搬走的,他都会搬。

      举例

      假设我们有一个用户名为scott,密码为tiger,在数据库orcl中,我们想导出该用户下的所有表,并保存到D:\backup\scott.dmp

      exp scott/tiger@orcl file=D:\backup\scott.dmp owner=scott
      

      在这个命令中:

      • 必须的参数:userid(在这里是scott/tiger@orcl),file(在这里是D:\backup\scott.dmp
      • 可选的参数:ownertablesfull

      2. IMP(Import)

      IMP命令就像是EXP的反向操作,是另一位搬运工人,他的工作是从 .dmp 文件中取出物品(数据)并将它们放入Oracle数据库。这个过程就像是你搬到新家后,需要将你的物品从箱子中取出并放置到合适的位置。

      以下是IMP命令的一般格式和常用参数:

      imp userid=<用户名>/<密码>@<数据库连接> file=<导入文件的路径和名称> fromuser=<原用户> touser=<新用户> tables=<要导入的表名称> full=<是否全库导入> ignore=<是否忽略错误>
      
      • userid:这是告诉搬运工人钥匙在哪(数据库连接信息),以及如何开门(用户名和密码)。

      • file:这是告诉搬运工人在哪个箱子里取物品(即导入文件的路径和名称)。

      • fromuser:这是告诉搬运工人原来的物品是属于哪个公司的(即原用户)。

      • touser:这是告诉搬运工人将物品放到新公司的哪个地方(即新用户)。

      • tables:这是指定搬运工人取出箱子中的哪些特定物品(即表名称)。如果没有指定,那么就取出全部的物品。

      • full:这是告诉搬运工人是否要把箱子里的所有物品都取出并放到新家(即是否全库导入)。如果设置为 y,则不论是否需要,只要箱子里有,他都会取出来。

      • ignore=y:如果目标表已存在,将忽略错误,继续将数据导入到已存在的表中。

      举例

      假设我们想将上面导出的文件D:\backup\scott.dmp导入到用户scott,密码为tiger在数据库orcl中。

      命令如下:

      imp scott/tiger@orcl file=D:\backup\scott.dmp fromuser=scott touser=scott
      

      在这个命令中:

      • 必须的参数:userid(在这里是scott/tiger@orcl),file(在这里是D:\backup\scott.dmp
      • 可选的参数:fromusertousertablesfull希望以上的解释能帮助你理解EXP和IMP命令的工作方式。

      使用导入工具imp时可能出现的问题 :

      (1) 数据库对象已经存在

      一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;

      数据库对象已经存在, 按缺省的imp参数, 则会导入失败

      如果用了参数ignore=y, 会把exp文件内的数据内容导入

      如果表有唯一关键字的约束条件, 不合条件将不被导入

      如果表没有唯一关键字的约束条件, 将引起记录重复

      (2) 数据库对象有主外键约束

      不符合主外键约束时, 数据会导入失败

      解决办法: 先导入主表, 再导入依存表

      disable目标导入对象的主外键约束, 导入数据后, 再enable它们

      (3) 权限不够

      如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限

      (4) 导入大表( 大于80M ) 时, 存储分配失败

      默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上

      导入时, 如果不存在连续一个大数据块, 则会导入失败

      导出80M以上的大表时, 记得compress= N, 则不会引起这种错误

      (5) imp和exp使用的字符集不同

      如果字符集不同, 导入会失败, 可以注册表里NLS_LANG相关信息

      导入完成后再改回来

      --查询当前系统所使用的字符集
      select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
      
      --查询所有有关字符集的参数
      select * from v$nls_parameters; 
      

      修改系统的字符集:

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

      若此时数据库服务器已启动,则先执行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 ZHS16GBK; //跳过超子集检测  AL32UTF8;
      SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;AL32UTF8;
      

      流程为:关库,启动数据库到mount状态,进入数据库维护模式,此时只有system和sys用户可登录数据库。关闭DBMS调度程序和DBMS调度任务,关闭自动任务启动,跳过字符超子集检查,设定系统字符集,关库,重新启动数据库。

      (6) imp和exp版本不能往上兼容

      imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件

      根据情况我们可以用

      exp和imp与数据泵expdp和impdp的区别:

      1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。exp在客户端使用,要受到网速的影响,因此会比较慢。
      2、expdp和impdp是服务端的工具程序,他们只能在Oracle服务端使用,不能在客户端使用。
      3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
      4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。
      5、数据泵expdp和impdp导出可以使用parallel属性指定并行任务导出,parallel=2就是并行2个任务导出。当然,这个并不是越多越好,需要考虑服务器的性能和cpu的个数等等因素。还可以通过导出多个文件的方式提高性能,即使用dumpfile=expdp.dp1,expdp.dp2这种方式提高性能。需要用户根据实际情况设置
      6、exp导出时读取的是sql,通过加载sql查询结果到缓存,然后在写进目标文件,而expdp是直接读取的数据块,直接从数据块写进目标文件。

      总结 

      到此这篇关于Oracle数据IMP和EXP命令用法详解的文章就介绍到这了,更多相关Oracle IMP和EXP命令内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

      您可能感兴趣的文章:
      • Oracle 数据库导出(exp)导入(imp)说明
      • oracle中exp,imp的使用详解
      • Oracle EXP和IMP用法和介绍
      • Oracle数据库如何使用exp和imp方式导数据

      www.htsjk.Com true http://www.htsjk.com/oracle/47673.html NewsArticle Oracle数据IMP和EXP命令用法详解, 目录 前言 1. EXP(Export) 举例 2. IMP(Import) 举例 使用导入工具imp时可能出现的问题 : (1) 数据库对象已经存在 (2) 数据库对象有主外键约束 (3) 权限不...
      评论暂时关闭