【IMPDP】使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查

本文详细记录了使用IMPDP导入数据时遇到的一系列错误,包括ORA-39002、ORA-39070等,通过分析日志文件定位到问题在于数据库内的directory对象指向的目录路径与实际服务器上的路径不一致。最终通过重建directory对象解决了问题,避免了常见的权限错误陷阱。
impdp导数据时的ORA-39002,: invalid operation,ORA-39070,ORA-29283等错误         


用expdp命令导入数据时,发现报如下错误:

 ORA-39002: invalid operation
 ORA-39070: Unable to open the log file.
 ORA-29283: invalid file operation
 ORA-06512: at "SYS.UTL_FILE", line 475
 ORA-29283: invalid file operation

看到这个错误后,先想到的权限的问题,以为是数据库内的directory的权限没有赋给相关的用户,但是经过查询后发现已经给相关的用户赋予了read,write权限了。折腾了很久后发现原来是由于在数据库内创建directory时有个字母写错了,而服务器上根本就没有这个目录,因此就报这个错误了。

解决办法就是要么删除directory重建,使其对应的目录和服务器一致,要么就是在服务器上创建和之前directory指定的目录一致。我通过重建directory后,顺利将数据导入。

参考:

http://space.itpub.net/519536/viewspace-664406


今天在使用IMPDP完成数据导入的过程中遇到“ORA-39002、ORA-39070……”连续报错。
导致问题原因很简单,但是提示的错误信息内容比较“诡异”,为了朋友们少走弯路,简单记录一下这个问题的处理过程。

1.问题再现
sec@secDB /db_backup/dpump_dir$ impdp sec/sec directory=dpump_dir dumpfile=20100604020437_sec.dmp logfile=impdp.log

Import: Release 10.2.0.3.0 - 64bit Production on Friday, 04 June, 2010 14:39:16

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 475
ORA-29283: invalid file operation

2.问题分析
这里的“ORA-39070”提到的“Unable to open the log file.”初看非常的“诡异”,到底无法打开什么日志文件呢?难道是没有权限在这个目录下写文件?经过“touch”测试排除了这种可能性。
不管怎么说,这个问题与文件操作相关。顺着这个思路继续前行,终于发现原来数据库中的directory数据库对象所指向的目录为“/oradata/dpump_dir”,而在该操作系统中根本没有这个目录,因目录不存在,日志文件也就理所当然的无处可写。

不过这个报错的信息却是不够明显,如果能够给出更多的检查和明确的报错信息就更好了。

sys@ora10g> col owner for a6
sys@ora10g> col DIRECTORY_NAME for a20
sys@ora10g> col DIRECTORY_PATH for a30
sys@ora10g> select * from dba_directories where DIRECTORY_NAME = 'DPUMP_DIR';

OWNER  DIRECTORY_NAME       DIRECTORY_PATH
------ -------------------- ------------------------------
SYS    DPUMP_DIR            /oradata/dpump_dir

3.问题处理
发现问题后,处理方法就简单了许多,只需要重新创建directory数据库对象即可。
sys@sec> drop directory dpump_dir;

Directory dropped.

sys@sec> create directory dpump_dir as '/db_backup/dpump_dir';

Directory created.

sys@sec> grant read, write on directory dpump_dir to public;

Grant succeeded.

4.导致该问题的潜在原因
在10g环境中即使在创建directory数据库对象的过程中即使所引用的目录不存在,该命令也是可以正常创建的,这就是容易误操作的根本原因。
sys@ora10g> create directory dpump_dir_test as '/sec/ool/er';

Directory created.

小心陷阱。

5.小结
从该问题的处理过程中我们可以看到,在报错信息不实很明显的时候我们往往手足无措。越是在这样的场景,我们越应该沉着冷静,从整个操作的源头一步一步的去排查,终有柳暗花明之时。

Good luck.

secooler
10.06.04

### ORA-39002 错误原因及解决方案 ORA-39002 是一个通用错误,表示 Data Pump 操作中存在无效的参数或语法问题。具体到 impdp 导入出现该错误,通常与以下因素相关: #### 1. 参数文件或命令行参数配置错误 如果在执行 `impdp` 命令使用的参数文件或命令行参数格式不正确,可能导致 ORA-39002 错误。例如,参数名拼写错误、缺少必要的参数值或参数值格式不合法等[^1]。 #### 2. 权限不足 执行 `impdp` 的用户可能没有足够的权限来完成导入操作。例如,若需要将数据从一个模式导入到另一个模式(使用 `REMAP_SCHEMA` 参数),则执行导入的用户必须拥有 `IMP_FULL_DATABASE` 权限,或者目标模式的相应权限[^2]。 #### 3. 数据泵版本兼容性问题 源数据库和目标数据库之间的 Data Pump 版本不兼容也可能导致此错误。确保源数据库导出的 `.dmp` 文件能够被目标数据库正确解析,否则可能会触发 ORA-39002 或其他相关错误[^1]。 #### 解决方案 以下是针对 ORA-39002 错误的解决方案: #### 检查参数配置 仔细检查 `impdp` 命令中的参数是否正确。例如,确保所有必需的参数(如 `DIRECTORY` 和 `DUMPFILE`)都已正确指定,并且参数值符合预期格式。如果使用了参数文件,则验证文件内容是否无误。 ```bash impdp username/password@database DIRECTORY=dir_name DUMPFILE=dump_file_name LOGFILE=log_file_name ``` #### 验证用户权限 确认执行 `impdp` 的用户是否具备必要权限。对于跨模式导入,建议为用户授予 `IMP_FULL_DATABASE` 权限,或确保目标模式的所有者具有相应的对象权限[^2]。 ```sql GRANT IMP_FULL_DATABASE TO username; ``` #### 确保版本兼容性 检查源数据库和目标数据库的 Oracle 版本是否一致或兼容。如果版本不匹配,尝试升级目标数据库至与源数据库相同的版本,或使用较低版本的 Data Pump 工具进行导入[^1]。 #### 查看日志文件 通过 `LOGFILE` 参数生成的日志文件可以提供更多关于错误的详细信息。分析日志文件以定位具体的参数或权限问题[^2]。 --- ### 示例代码 以下是一个完整的 `impdp` 命令示例,包含常见参数配置: ```bash impdp system/manager@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=export.dmp LOGFILE=import.log REMAP_SCHEMA=source_schema:target_schema ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值