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 operationide
看到这个错误后,先想到的权限的问题,觉得是数据库内的directory的权限没有赋给相关的用户,可是通过查询后发现已经给相关的用户赋予了read,write权限了。折腾了好久后发现原来是因为在数据库内建立directory时有个字母写错了,而服务器上根本就没有这个目录,所以就报这个错误了。测试
解决办法就是要么删除directory重建,使其对应的目录和服务器一致,要么就是在服务器上建立和以前directory指定的目录一致。我经过重建directory后,顺利将数据导入。spa
参考:操作系统
http://space.itpub.net/519536/viewspace-664406.net
今天在使用IMPDP完成数据导入的过程当中遇到“ORA-3900二、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
日志