2015-11-23 52 views
1

我正在嘗試導入Oracle轉儲文件,儘管在文件上授予了全局rwx權限,但運行導入時仍遇到權限錯誤。Oracle無法讀取全局訪問權限(777)轉儲文件

這裏的整個過程中,我通過運行:

# Create the dump directory with the dump file, and grant 777 permissions 
mkidr -p /home/vagrant/dump 
mv /home/vagrant/data.dmp /home/vagrant/dump 
chmod -R 777 /home/vagrant/dump 

# Check the file permissions 

# drwsrwsrwx. vagrant vagrant dump 
# -rwxrwxrwx. vagrant vagrant dump/data.dmp 

# Add the directory to Oracle 
sqlplus system/vagrant 
CREATE DIRECTORY DUMP_DIR AS '/home/vagrant/dump'; 
exit 

# Try importing the data 
impdp system/vagrant dumpfile=data.dmp directory=DUMP_DIR nologfile=y 

而讓鍵盤砸開始......

Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 
ORA-39001: invalid argument value 
ORA-39000: bad dump file specification 
ORA-31640: unable to open dump file "/home/vagrant/dump/data.dmp" for read 
ORA-27037: unable to obtain file status 
Linux-x86_64 Error: 13: Permission denied 
Additional information: 3 

注:我完全知道,這些權限和密碼可怕的是安全性,但由於我只是試圖對公開可用的數據集進行一些實驗分析,所以我並不在意。

+0

我不認爲'USERID'是'impdp'的有效參數。嘗試將其更改爲:'impdp system/vagrant dumpfile = ...'並查看是否有效? –

+0

沒有什麼區別。 – fny

+0

/home目錄如何?安裝數據庫的用戶是否具有讀取和執行權限? – Mihail

回答

0

我認爲問題在於您的腳本說mkidr而不是mkdir

這樣,你不會創建目錄,當你將文件移動到假定的目錄時,它只會重命名該文件,使其顯示(作爲文件,而不是目錄)/home/vagrant/dump具有正確的權限在開始時的d char),當然,你不能搜索它的文件,因爲它不是一個目錄,而是一個文件。這也將阻礙oracle成功執行CREATE DIRECTORY DUMP_DIR AS '/home/vagrant/dump';,因爲那裏有一個文件名稱。

順便說一句,要訪問一個文件,你不這樣做只需要讀取該文件的inode訪問,但在所有的目錄也執行權限x隨後沿路徑(在這種情況下/home/home/vagrant/home/vagrant/dump - - 這最後一個是一個文件,而不是一個目錄---)。在這種情況下,它是ora(用戶oracle運行)必須檢查的用戶。

我建議你模仿用戶ora並嘗試從數據庫運行的相同目錄中讀取文件,如果不起作用,則使用與數據庫運行相同的目錄並使用與打開文件相同的路徑。

+0

漂亮!不幸的是,這是一個錯字。我在SO問題中提出。 – fny

+0

然後按照我在答案中給出的其他提示...可以有解決方案。用戶oracle是否代表正在運行的文件在所有目錄中具有執行權限? –