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

 更新时间:2023年11月25日 11:03:51   作者:没有实现不了的梦  
这篇文章主要给大家介绍了关于Oracle数据IMP和EXP命令用法详解的相关资料,我们可以使用Oracle自带的exp、imp命令来进行数据库备份,imp和exp称之为导入导出,这种方式也能快速的导入导出table或数据库,需要的朋友可以参考下

前言

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命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle中正则表达式的使用实例教程

    Oracle中正则表达式的使用实例教程

    大家对正则表达式应该都不会陌生,从linux下的命令到Java等编程语言,正则表达式无处不在,虽然我们实际使用不一定太多,但是当我们要处理字符串时,它确实是一个强大的工具。这篇文章主要给大家介绍了关于Oracle中正则表达式使用的相关资料,需要的朋友可以参考下。
    2017-10-10
  • Oracle数据表保留一条重复数据简单方法

    Oracle数据表保留一条重复数据简单方法

    最近开发的时候遇到一个任务,需要对重复的数据进行筛选,所以下面这篇文章主要给大家介绍了关于Oracle数据表保留一条重复数据的简单方法,需要的朋友可以参考下
    2023-11-11
  • 使用oracle修改表字段长度的步骤

    使用oracle修改表字段长度的步骤

    这篇文章主要介绍了如何使用oracle修改表字段长度,本文仅仅简单介绍了如何使用oracle修改表字段长度,而oracle提供了大量能使我们快速便捷地处理数据的函数和方法,需要的朋友可以参考下
    2023-07-07
  • Oracle 用户密码有效期的sql语句

    Oracle 用户密码有效期的sql语句

    这篇文章主要介绍了Oracle 用户密码有效期的sql语句的相关资料,需要的朋友可以参考下
    2016-01-01
  • Oracle 10g client 安装图解教程

    Oracle 10g client 安装图解教程

    这篇文章主要介绍了Oracle 10g client 安装图解教程,需要的朋友可以参考下
    2017-03-03
  • Oracle插入数据时出现ORA-00001:unique constraint问题

    Oracle插入数据时出现ORA-00001:unique constraint问题

    这篇文章主要介绍了Oracle插入数据时出现ORA-00001:unique constraint问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Oracle Index 的三个问题

    Oracle Index 的三个问题

    Oracle Index 的三个问题...
    2007-03-03
  • oracle基础教程之多表关联查询

    oracle基础教程之多表关联查询

    在实际开发中每个表的信息都不是独立的,而是若干个表之间存在一定的联系,如果用户查询某一个表的信息时,可能需要查询关联表的信息,这就是多表关联查询,这篇文章主要给大家介绍了关于oracle基础教程之多表关联查询的相关资料,需要的朋友可以参考下
    2023-12-12
  • 怎么才能限制SQL Server只能让指定的机器连接

    怎么才能限制SQL Server只能让指定的机器连接

    怎么才能限制SQL Server只能让指定的机器连接...
    2007-03-03
  • Oracle12c图形化&静默安装踩坑的方法步骤

    Oracle12c图形化&静默安装踩坑的方法步骤

    这篇文章主要介绍了Oracle12c图形化&静默安装踩坑的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论