linux下expdp和impdp命令

本文详细介绍Oracle数据库中数据的导出与导入操作流程。包括创建逻辑目录、授予用户权限、使用expdp与impdp命令进行数据的导出与导入,并提供按用户、表名等多种导出方式及数据还原的方法。
 一、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
>select * from dba_directories;
删除定义目录
>drop directory dir_name;



二、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
>create or replace directory dpdata1 as 'd:\test\dump';


三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
>grant read,write on directory dpdata1 to scott;
查询schemas
>select username,default_tablespace from dba_users;



四、导出数据
1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;

五、还原数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;


——查询schemas对应的表的总数--#验证导入的表总数
SQL> select count(*) from dba_tables where OWNER='CWBASE2_9999';

--查看expdp job的状态
SQL> select job_name,operation,job_mode,state from user_datapump_jobs;

--停止作业
Export> stop_job
是否确实要停止此作业 ([Y]/N): yes

--用job_name再次连接到job
C:\Users\Administrator.DavidDai>expdp system/oracle attach=davedump
-- ATTACH用于在客户会话与已存在导出作用之间建立关联. 如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选
--启动JOB
Export> start_job

--按下CTRL+C 组合,退出交互模式
Export>
Export> status

-- 查看状态
Export> status

Export> help

引自:http://787141854-qq-com.iteye.com/blog/1510573

<think>我们正在讨论的是如何使用impdp命令将数据导入到Oracle数据库,以及解决在使用过程中可能遇到的问题。根据引用内容,impdpOracle提供的数据泵导入工具,用于将expdp导出的dmp文件导入到数据库中。下面将详细介绍impdp的使用方法常见问题解决。 ### 1. **impdp命令的基本使用方法** impdp命令的基本语法如下: ```bash impdp username/password@connect_identifier DIRECTORY=directory_name DUMPFILE=dumpfile_name.dmp [可选参数] ``` 其中: - `username/password`:数据库用户名密码。 - `@connect_identifier`:连接标识符(如网络服务名)。 - `DIRECTORY`:指定存放dmp文件的目录对象(需预先创建)。 - `DUMPFILE`:指定要导入的dmp文件名。 **示例:导入整个数据库** ```bash impdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=y ``` **常用参数说明**: - `SCHEMAS`:指定要导入的模式(用户),如`SCHEMAS=scott`。 - `TABLES`:指定要导入的表,如`TABLES=employees,departments`。 - `REMAP_SCHEMA`:将对象从一个模式映射到另一个模式,如`REMAP_SCHEMA=source_user:target_user`。 - `REMAP_TABLESPACE`:将表空间从一个映射到另一个,如`REMAP_TABLESPACE=source_ts:target_ts`。 - `EXCLUDE`:排除某些对象,如`EXCLUDE=TABLE:"IN ('TEMP')"`。 - `INCLUDE`:只包含指定的对象,如`INCLUDE=TABLE:"LIKE 'EMP%'"`。 - `CONTENT`:指定导入的内容,可选`DATA_ONLY`(仅数据)、`METADATA_ONLY`(仅元数据)或`ALL`(全部)。 - `LOGFILE`:指定日志文件名,如`LOGFILE=import.log`。 ### 2. **常见问题及解决方法** #### (1) **导入失败:版本不兼容** - **问题描述**:使用高版本的expdp导出的dmp文件,无法导入到低版本的Oracle数据库中。 - **解决方法**: - 使用与目标数据库版本相同或更低的expdp工具重新导出。 - 在导出时指定版本号,如`expdp ... VERSION=11.2`(假设目标数据库是11gR2)[^2]。 #### (2) **目录对象不存在或权限不足** - **问题描述**:执行impdp时提示“ORA-39002: invalid operation”或“ORA-39087: directory name DPUMP_DIR is invalid”。 - **解决方法**: - 创建目录对象并授权: ```sql CREATE DIRECTORY dpump_dir AS '/path/to/dumpfile'; GRANT READ, WRITE ON DIRECTORY dpump_dir TO username; ``` - 确保Oracle进程对该目录有操作权限(Linux下使用`chown`或`chmod`)[^1]。 #### (3) **表空间不存在** - **问题描述**:导入时提示表空间不存在(如“ORA-00959: tablespace 'USERS' does not exist”)。 - **解决方法**: - 在导入前创建缺失的表空间。 - 使用`REMAP_TABLESPACE`参数将原表空间映射到目标数据库中存在的表空间: ```bash impdp ... REMAP_TABLESPACE=source_ts:target_ts ``` #### (4) **数据冲突(唯一约束违反)** - **问题描述**:导入数据时因违反唯一约束(如主键)而失败。 - **解决方法**: - 使用`TABLE_EXISTS_ACTION`参数: - `APPEND`:向现有表中追加数据(不删除原有数据)。 - `TRUNCATE`:先清空表再导入数据。 - `REPLACE`:先删除表再重建并导入。 - `SKIP`:跳过已存在的表(默认行为)。 ```bash impdp ... TABLE_EXISTS_ACTION=TRUNCATE ``` #### (5) **字符集不匹配** - **问题描述**:导入后出现中文乱码或字符集错误。 - **解决方法**: - 确保源数据库目标数据库的字符集一致(查询:`SELECT * FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET'`)。 - 若字符集不同,需在导入前修改目标库字符集(风险高,需谨慎)或重新导出为兼容字符集。 #### (6) **大文件导入超时** - **问题描述**:导入大型dmp文件时连接中断。 - **解决方法**: - 使用`PARALLEL`参数提高并行度(如`PARALLEL=4`)。 - 增加数据库的`JOB_QUEUE_PROCESSES`参数值(允许更多并行作业): ```sql ALTER SYSTEM SET JOB_QUEUE_PROCESSES=20; ``` ### 3. **高级用法示例** #### 仅导入元数据(表结构) ```bash impdp scott/tiger@orcl DIRECTORY=dpump_dir DUMPFILE=meta.dmp CONTENT=METADATA_ONLY ``` #### 重命名导入的表 ```bash impdp system/password@orcl DIRECTORY=dpump_dir DUMPFILE=data.dmp REMAP_TABLE=scott.emp:employees_new ``` ### 总结 impdpOracle数据迁移中的核心工具,熟练掌握其参数错误处理方法可大幅提升运维效率。关键点包括: 1. **目录权限**:确保目录对象存在且用户有读写权限。 2. **版本兼容性**:导出导入的Oracle版本需匹配或向下兼容。 3. **冲突处理**:利用`TABLE_EXISTS_ACTION`灵活应对数据冲突。 4. **日志分析**:通过日志文件(如`import.log`)定位问题根源[^1][^3]。 §§相关问题§§ 1. 如何监控impdp导入作业的进度? 2. 使用impdp导入时如何过滤特定表的数据? 3. expdp/impdp与传统的exp/imp工具有哪些主要区别? [^1]: 本文介绍了在使用impdp命令导入数据时可能遇到的一些常见问题,并提供了相应的源代码示例。 [^2]: Oracle数据库迁移是企业级应用中常见的需求,而 expdp/impdp exp/imp 命令Oracle 数据库迁移过程中不可或缺的工具。 [^3]: 在10g之前,传统的导出导入分别使用EXP工具IMP工具,从10g开始,不仅保留了原有的EXPIMP工具,还提供了数据泵导出导入工具EXPDPIMPDP。 [^4]: impdp oracle集群,oracle导入命令impdp中cluster选项的作用。</think>### Oracle impdp命令使用指南及问题解决 `impdp`(Data Pump Import)是Oracle提供的高性能数据导入工具,用于将`expdp`导出的dmp文件导入数据库。相比传统`imp`工具,它支持并行操作、作业监控更细粒度的对象过滤[^2][^3]。 --- ### 一、基本使用方法 #### 1. 最小化命令示例 ```bash impdp username/password@db_service DIRECTORY=data_pump_dir DUMPFILE=export.dmp ``` #### 2. 核心参数说明 | 参数 | 作用 | 示例 | |------|------|------| | `DIRECTORY` | 指定dmp文件存放目录 | `DIRECTORY=dp_dir` | | `DUMPFILE` | 导入文件名 | `DUMPFILE=hr_schema.dmp` | | `SCHEMAS` | 指定导入的用户 | `SCHEMAS=hr,finance` | | `TABLES` | 指定导入的表 | `TABLES=employees,departments` | | `REMAP_SCHEMA` | 用户映射 | `REMAP_SCHEMA=source_user:target_user` | | `REMAP_TABLESPACE` | 表空间映射 | `REMAP_TABLESPACE=old_ts:new_ts` | | `PARALLEL` | 并行度设置 | `PARALLEL=4` (提升大文件导入速度) | | `EXCLUDE`/`INCLUDE` | 对象过滤 | `EXCLUDE=VIEW, PACKAGE` | #### 3. 完整示例(含元数据映射) ```bash impdp system/pwd@orclpdb DIRECTORY=dpump_dir DUMPFILE=full_export.dmp LOGFILE=imp_log.txt REMAP_SCHEMA=hr:hr_new REMAP_TABLESPACE=users:users_new PARALLEL=4 ``` --- ### 二、常见问题及解决方案 #### 1. **版本不兼容错误** ```log ORA-39142: 不兼容的版本号 5.1 ``` **解决方法**: - 导出时指定版本:`expdp ... VERSION=12.1`[^1] - 升级目标数据库至相同或更高版本 #### 2. **目录对象权限问题** ```log ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 ``` **解决方法**: ```sql -- 创建目录对象 CREATE DIRECTORY dpump_dir AS '/u01/dumps'; -- 授予权限 GRANT READ, WRITE ON DIRECTORY dpump_dir TO imp_user; ``` #### 3. **表空间不存在** ```log ORA-00959: 表空间 'OLD_TBS' 不存在 ``` **解决方法**: ```bash # 添加表空间映射参数 REMAP_TABLESPACE=old_tbs:new_tbs ``` #### 4. **数据冲突错误** ```log ORA-31693: 表数据对象失败... ORA-00001: 违反唯一约束条件 ``` **解决方法**: - 追加数据:`TABLE_EXISTS_ACTION=APPEND` - 清空表:`TABLE_EXISTS_ACTION=TRUNCATE` - 替换表:`TABLE_EXISTS_ACTION=REPLACE` #### 5. **字符集不匹配** ```log ORA-02374: 转换错误 ``` **解决方法**: ```sql -- 检查字符集 SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET'; ``` - 若字符集不同,需在导出前转换或修改数据库字符集 --- ### 三、高级技巧 1. **监控导入作业** ```sql SELECT job_name, state FROM dba_datapump_jobs; SELECT * FROM dba_datapump_sessions; ``` 2. **交互式命令控制** ```bash # 启动后按Ctrl+C进入交互模式 Import> STATUS # 查看状态 Import> STOP_JOB # 暂停作业 Import> CONTINUE_CLIENT # 继续作业 ``` 3. **网络导入(无需dmp文件)** ```bash impdp ... NETWORK_LINK=db_link SCHEMAS=hr ``` --- ### 四、性能优化建议 1. **并行处理**:`PARALLEL=CPU核数*2` 2. **禁用日志**:`TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y` 3. **分批导入**:使用`INCLUDE`分多次导入 4. **调整内存**: ```sql ALTER SYSTEM SET STREAMS_POOL_SIZE=1G; ``` > 提示:大库导入建议使用`expdp/impdp`替代传统`exp/imp`,速度可提升10倍以上[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值