Oracle导出导入dmp文件(转)

本文介绍了Oracle数据库的导出导入命令exp和imp的基本用法,包括如何将整个数据库、特定用户的所有表或指定表导出到dmp文件,以及如何将这些文件重新导入到数据库。还讲解了如何处理导入过程中遇到的问题,例如表已存在的情况。
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。

执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
DOS中可以执行时由于 在oracle 8i 中  安装目录\ora81\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 将数据库中的表inner_notify、notify_staff_relat导出
    exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)

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
   imp aichannel/aichannel@HUST full=y  file=file= d:\data\newsmgnt.dmp ignore=y
   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
   在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)

基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

注意:
操作者要有足够的权限,权限不够它会提示。
数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

附录一:
给用户增加导入数据权限的操作
第一,启动sql*puls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
      imp userid=system/manager full=y file=*.dmp
      或者 imp userid=system/manager full=y file=filename.dmp

执行示例:
F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp

屏幕显示
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation.  All rights reserved.

连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

经由常规路径导出由EXPORT:V08.01.07创建的文件
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)
. 正在将AICHANNEL的对象导入到 AICHANNEL
. . 正在导入表                  "INNER_NOTIFY"          4行被导入
准备启用约束条件...
成功终止导入,但出现警告。
附录二:
Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.
  先建立import9.par,
  然后,使用时命令如下:imp parfile=/filepath/import9.par
  例 import9.par 内容如下:
        FROMUSER=TGPMS       
        TOUSER=TGPMS2     (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)          
        ROWS=Y
        INDEXES=Y
        GRANTS=Y
        CONSTRAINTS=Y
        BUFFER=409600
        file==/backup/ctgpc_20030623.dmp
        log==/backup/import_20030623.log

<think>我们正在讨论Oracle数据库在Linux系统中的导出(export)导入(import)操作,特别是使用dmp文件。根据用户需求,我们需要提供相关的命令和注意事项。 首先,Oracle的传统导出导入工具是`exp`和`imp`,但它们在较新的版本中已被数据泵(Data Pump)工具`expdp`和`impdp`所取代。不过,用户可能仍然需要`exp`和`imp`,尤其是在处理旧版本数据库或特定需求时。 ### 1. 使用传统工具`exp`和`imp` #### 导出(Export)命令 在Linux终端中,使用`exp`命令导出数据: ```bash exp userid=用户名/密码@数据库实例名 file=导出文件路径.dmp log=日志文件路径.log [其他参数] ``` 例如,导出整个数据库(需要具有DBA权限的用户): ```bash exp system/oracle@orcl file=/home/oracle/full_db.dmp log=/home/oracle/full_db.log full=y ``` 导出特定用户(模式)的数据: ```bash exp scott/tiger@orcl file=/home/oracle/scott.dmp log=/home/oracle/scott.log owner=scott ``` 导出特定表: ```bash exp scott/tiger@orcl file=/home/oracle/emp.dmp log=/home/oracle/emp.log tables=emp,dept ``` #### 导入(Import)命令 使用`imp`命令导入数据: ```bash imp userid=用户名/密码@数据库实例名 file=导入文件路径.dmp log=日志文件路径.log [其他参数] ``` 例如,导入整个数据库(需要DBA权限): ```bash imp system/oracle@orcl file=/home/oracle/full_db.dmp log=/home/oracle/full_db_imp.log full=y ``` 导入特定用户的数据(如果目标数据库已有该用户,需要确保有足够的权限和表空间): ```bash imp scott/tiger@orcl file=/home/oracle/scott.dmp log=/home/oracle/scott_imp.log fromuser=scott touser=scott ``` 导入特定表: ```bash imp scott/tiger@orcl file=/home/oracle/emp.dmp log=/home/oracle/emp_imp.log tables=emp,dept ``` ### 2. 使用数据泵工具`expdp`和`impdp` 数据泵工具是Oracle推荐的方式,性能更好,功能更强大。但需要注意的是,数据泵要求使用目录对象(Directory Object)来指定导出/导入文件的位置。 #### 导出(Data Pump Export) 首先,创建或确认一个目录对象(例如:`DATA_PUMP_DIR`是Oracle预定义的目录,通常指向`$ORACLE_BASE/admin/$ORACLE_SID/dpdump/`)。也可以自定义目录: ```sql CREATE OR REPLACE DIRECTORY exp_dir AS '/home/oracle/dpump'; GRANT READ, WRITE ON DIRECTORY exp_dir TO system; ``` 然后,在Linux终端中使用`expdp`命令: ```bash expdp userid=用户名/密码@数据库实例名 directory=目录对象名 dumpfile=导出文件名.dmp logfile=日志文件名.log [其他参数] ``` 例如,导出整个数据库(需要具有`EXP_FULL_DATABASE`角色的用户): ```bash expdp system/oracle@orcl directory=exp_dir dumpfile=full_db.dmp logfile=full_db.log full=y ``` 导出特定模式(用户): ```bash expdp system/oracle@orcl directory=exp_dir dumpfile=scott.dmp logfile=scott.log schemas=scott ``` 导出特定表: ```bash expdp scott/tiger@orcl directory=exp_dir dumpfile=emp.dmp logfile=emp.log tables=emp,dept ``` #### 导入(Data Pump Import) 使用`impdp`命令: ```bash impdp userid=用户名/密码@数据库实例名 directory=目录对象名 dumpfile=导入文件名.dmp logfile=日志文件名.log [其他参数] ``` 例如,导入整个数据库(需要`IMP_FULL_DATABASE`角色): ```bash impdp system/oracle@orcl directory=exp_dir dumpfile=full_db.dmp logfile=full_db_imp.log full=y ``` 导入特定模式(如果目标数据库没有该用户,导入时会自动创建,但需要确保有足够的权限和表空间;也可以将模式导入到另一个模式中): ```bash impdp system/oracle@orcl directory=exp_dir dumpfile=scott.dmp logfile=scott_imp.log schemas=scott ``` 或者将模式scott导入到新用户scott_new中: ```bash impdp system/oracle@orcl directory=exp_dir dumpfile=scott.dmp logfile=scott_imp.log remap_schema=scott:scott_new ``` 导入特定表: ```bash impdp scott/tiger@orcl directory=exp_dir dumpfile=emp.dmp logfile=emp_imp.log tables=emp,dept ``` ### 注意事项 1. **权限问题**:确保执行导出导入的用户具有相应的权限(如`EXP_FULL_DATABASE`、`IMP_FULL_DATABASE`)。 2. **字符集**:导出导入时,如果源数据库和目标数据库的字符集不一致,可能会导致乱码问题。通常,在导入前应确保目标数据库的字符集与源数据库兼容。 3. **版本兼容性**:`exp`/`imp`和`expdp`/`impdp`的版本最好与数据库版本一致。低版本导出高版本数据库可能会遇到问题,反之亦然。 4. **空间问题**:确保目标数据库有足够的表空间来容纳导入的数据。 5. **数据泵目录**:使用数据泵时,必须使用目录对象,且Oracle进程(实际是服务器进程)必须对该目录有读写权限(注意:是操作系统目录的权限,而不仅仅是数据库目录对象的权限)。 6. **网络传输**:数据泵还支持通过网络直接导入导出(如`NETWORK_LINK`参数),无需生成dmp文件。 ### 常见错误 - **IMP-00051**:可能由于导出文件损坏或版本不兼容导致[^2]。 - **IMP-00008**:可能由于导出文件损坏或表空间不存在等问题[^2]。 - 如果使用传统导出工具导出有空分区的表,可能会遇到导出文件损坏的问题(文档ID 1604983.1)[^2]。 ### 结束导出/导入进程 在数据泵运行过程中,可以通过以下命令进入交互模式(按Ctrl+C): ```bash Export> stop_job # 暂停作业 Export> start_job # 启动作业 Export> kill_job # 终止作业 ``` 对于传统工具`exp`/`imp`,如果运行在后台,可以使用`kill`命令终止进程[^3]。 ### 参考信息 - 关于数据泵的交互命令,可以在数据泵交互模式下输入`help`查看[^3]。 - RMAN也可以执行一些SQL命令,但主要用于备份恢复[^4]。 §§相关问题§§ 1. 如何解决Oracle导入过程中出现的IMP-00051和IMP-00008错误? 2. 数据泵(expdp/impdp)与传统工具(exp/imp)的主要区别是什么? 3. 在Oracle中如何创建和管理目录对象? 4. 如何监控Oracle数据泵作业的进度?</think>### Oracle Linux 导出导入 dmp 文件命令指南 #### 一、导出命令 (`exp` 和 `expdp`) 1. **传统导出工具 `exp`** ```bash exp userid=用户名/密码@服务名 file=导出路径.dmp log=日志路径.log [参数] ``` **常用参数**: - `tablespaces=表空间名`:导出指定表空间(如 `tablespaces=users`) - `owner=用户名`:导出指定用户的所有对象 - `tables=表名`:导出指定表(如 `tables=emp,dept`) - `full=y`:全库导出(需 DBA 权限) **示例**: ```bash exp userid=system/oracle@orcl file=/backup/full.dmp log=/backup/exp.log full=y ``` 2. **数据泵导出 `expdp`(推荐)** ```bash expdp userid=用户名/密码@服务名 directory=目录对象名 dumpfile=文件名.dmp logfile=日志名.log [参数] ``` **关键步骤**: - 创建目录对象(需 DBA 权限): ```sql CREATE OR REPLACE DIRECTORY exp_dir AS '/u01/backup'; GRANT READ, WRITE ON DIRECTORY exp_dir TO 用户名; ``` - **常用参数**: - `schemas=用户名`:导出指定用户 - `tables=表名`:导出指定表 - `full=y`:全库导出 - `parallel=4`:并行加速 **示例**: ```bash expdp system/oracle@orcl directory=exp_dir dumpfile=hr_schema.dmp logfile=hr_exp.log schemas=hr ``` --- #### 二、导入命令 (`imp` 和 `impdp`) 1. **传统导入工具 `imp`** ```bash imp userid=用户名/密码@服务名 file=导入路径.dmp log=日志路径.log [参数] ``` **常用参数**: - `fromuser=源用户` `touser=目标用户`:用户映射 - `tables=表名`:导入指定表 - `ignore=y`:忽略创建错误 - `full=y`:全库导入 **示例**: ```bash imp system/oracle@orcl file=/backup/hr.dmp log=imp.log fromuser=hr touser=hr_new ``` 2. **数据泵导入 `impdp`(推荐)** ```bash impdp userid=用户名/密码@服务名 directory=目录对象名 dumpfile=文件名.dmp logfile=日志名.log [参数] ``` **关键参数**: - `remap_schema=源用户:目标用户`:用户映射(如 `remap_schema=hr:hr_new`) - `remap_tablespace=源表空间:目标表空间`:表空间映射 - `table_exists_action=replace`:表存在时覆盖 - `transform=segment_attributes:n`:忽略存储参数 **示例**: ```bash impdp system/oracle@orcl directory=exp_dir dumpfile=hr_schema.dmp logfile=imp.log remap_schema=hr:hr_new ``` --- #### 三、注意事项与常见问题 1. **权限要求**: - `exp/imp` 需要操作系统文件读写权限 - `expdp/impdp` 需数据库目录对象权限 2. **字符集问题**: 确保源库和目标库字符集一致(查询:`SELECT * FROM nls_database_parameters`),否则乱码。 3. **空间检查**: 导入前验证目标表空间大小: ```sql SELECT tablespace_name, sum(bytes)/1024/1024 "Free(MB)" FROM dba_free_space GROUP BY tablespace_name; ``` 4. **中断处理**: - **数据泵作业暂停/恢复**: ```bash impdp attach=作业名 # 连接后输入 STOP_JOB 暂停 / START_JOB 恢复 ``` - 强制终止进程(慎用): ```bash kill -9 <OS进程ID> # 需清理残留会话[^3] ``` 5. **常见错误**: - **IMP-00051**:导出文件损坏或版本不兼容[^2] - **IMP-00008**:表空间不存在 → 提前创建目标表空间 - **ORA-39155**:目录对象路径权限不足 → 检查 `ls -ld /u01/backup` --- #### 四、最佳实践 1. **导出前检查**: ```sql SELECT object_type, COUNT(*) FROM dba_objects WHERE owner='HR' GROUP BY object_type; ``` 2. **导入后验证**: ```sql SELECT table_name, num_rows FROM all_tables WHERE owner='HR_NEW'; ``` 3. **性能优化**: - 使用 `parallel=4` 并行处理 - 设置 `cluster=n` 禁用集群(单机环境) - 开启大数据模式:`options=group`(仅限 `expdp`) > 提示:Oracle 12c+ 推荐使用数据泵(`expdp/impdp`),传统工具(`exp/imp`)在 19c 后已弃用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值