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
日誌