記一次ORA-06512、ORA-29283

一、背景簡介

上午應(yīng)用找來,給了倆錯誤,錯誤信息如下

ORA-06512: 在 "SYS.UTL_FILE", line 536
ORA-29283: 文件操作無效

以上報錯簡單來說,就是調(diào)用 sys.utl_file 輸出文件,但是輸出的目錄不存在,進(jìn)一步溝通發(fā)現(xiàn),用戶輸出的目錄是一個掛載的共享的 windows 文件夾,沒錯,是在 linux 上掛了一個 windows 的文件夾。

二、解決過程

首先嘗試直接將 windows 上的文件夾掛載上去

mount -t cifs //目標(biāo)機(jī)器/目標(biāo)目錄 /test -o username=xxxx

但是這樣掛載存在一個問題,就是文件的權(quán)限為 755 ,而 mount 命令只有 root 才能執(zhí)行,這意味著 oracle 對文件夾沒有寫的權(quán)限,oracle 輸出文件至掛載的 windows 需要寫的權(quán)限,換用以下掛載方式。

mount -t cifs //目標(biāo)機(jī)器/目標(biāo)目錄 /test -o username=xxxx,dir_mode=0777,file_mode=0777

至此,文件夾正確掛載好。
注意,每個節(jié)點都需要掛載

三、補(bǔ)充知識
1. 關(guān)于 oracle 里的文件夾

oracle 數(shù)據(jù)庫并不能直接輸出文件到 os 上的文件夾,而是通過創(chuàng)建數(shù)據(jù)庫內(nèi)部和 os 上的實際文件夾之間的關(guān)聯(lián)輸出文件,如

create or replace directory test  as '/test';

以上命令可在 oracle 數(shù)據(jù)庫內(nèi)部創(chuàng)建一個名叫 test 的目錄,與其實際關(guān)聯(lián)的 os 目錄為 /test,要使目錄正常可用,os 上必須實際存在這個目錄且可用。

select * from dba_directories;

以上命令可以查詢 oracle 數(shù)據(jù)庫里所有的目錄和與之對應(yīng)的 os 目錄。

2. 關(guān)于掛載

此次問題根本原因在于主機(jī)被重啟了,而由于掛載需要輸入口令,用戶并沒有將掛載命令寫入 /etc/fstab 目錄,導(dǎo)致主機(jī)重啟后未能重新掛上。

remoteHost:/目錄 /本地目錄 nfs intr,hard,bg,vers=3 0 0

以上為 /etc/fstab 中一條。

umount /test

卸載的命令,/test 為待卸載的目錄

mount
df -h

直接輸 mount 命令 或者 df -h 可以查看掛載情況。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容