Oracle数据导入(IMP)和导出(EXP)命令用法详解

120

Oracle 是一种功能强大且广泛使用的数据库管理系统,广泛应用于企业级应用和数据存储。在日常的数据库管理工作中,数据的导入和导出是常见的操作。Oracle 提供了 IMP 和 EXP 命令,用于实现数据的导入和导出。这些命令不仅可以帮助用户在不同的数据库之间迁移数据,还可以用于备份和恢复数据。本文将详细解释 IMP 和 EXP 命令的用法,帮助读者更好地掌握这些工具的使用。

Oracle.webp

前言

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 命令的用法。IMP 命令用于数据导入,而 EXP 命令用于数据导出。掌握这些命令的使用方法,对于数据库管理员和开发人员来说非常重要。无论是数据迁移、备份恢复,还是日常的数据管理,IMP 和 EXP 都是不可或缺的工具。希望本文的内容对您有所帮助,让您在 Oracle 数据库管理中更加得心应手。

oracle exp imp
THE END
蜜芽
故事不长,也不难讲,四字概括,毫无意义。

相关推荐

Oracle数据库中保留小数点后两位的方法详解
在Oracle数据库的应用中,处理数值数据时常常需要精确控制小数点后的位数,尤其是在金融、统计等领域,数据的精度直接影响到业务的准确性和可靠性。保留小数点后两位的操作看...
2024-12-17 编程技术
158

甲骨文(Oracle Cloud)永久免费VPS服务器申请不通过的原因及解决方法
甲骨文(Oracle Cloud)作为领先的云计算服务提供商,为全球用户提供了丰富而强大的云服务。特别是永久免费VPS服务器,尤其受到广大站长的喜爱。然而,在实际申请过程中,一些用...
2024-10-23 站长之家
677

Oracle DECODE 丢失时间精度的原因与解决方案
在某些情况下,使用DECODE函数处理时间类型数据时,可能会遇到时间精度丢失的问题。这不仅影响数据的准确性,还可能导致业务逻辑的错误执行。本文将深入探讨Oracle DECODE函数...
2024-10-19 编程技术
146

如何在Oracle数据库中有效使用DECODE函数
在Oracle数据库的查询和编程中,DECODE函数是一个强大而灵活的工具,用于条件判断和数据转换。它类似于其他编程语言中的switch-case语句,能够根据指定的表达式返回不同的值。...
2024-10-15 编程技术
177

甲骨文(Oracle Cloud)永久免费VPS云服务器注册教程
在全球云计算市场中,甲骨文(Oracle Cloud)以其强大的数据库技术和企业级解决方案而闻名。为了吸引更多开发者和中小企业,甲骨文提供了永久免费的VPS云服务器,这无疑是一个极...
2024-09-30 电脑知识
2364

Windows系统中Oracle 11g数据库完全卸载图文教程
在使用Oracle 11g数据库的过程中,可能会因为各种原因需要将其从Windows系统中完全卸载。正确地卸载Oracle数据库是确保系统清洁以及未来能够顺利重新安装的关键步骤。本篇文章...
2024-06-05 电脑知识
161