摘要:福爾壽司ForSource的辦案手札 Case 1. OraOsp.dll無法載入
現場:
AP環境:
- VM架設的server 2k3 sp2
- IIS 6.0
- ODP .NET 9.2.0.4.01
DB環境
- VM架設的server 2k3 sp2
- Oracle 9i
案件說明:
AP主機上建立了一個網站,
在原本只裝ODP的情況下可以正常的登入(帳戶資料存在DB主機的Oracle上面)。
某天,系統的排程需要用到SQLLDR.EXE這支程式。
因此需要安裝Oracle Client ,但是安裝完成之後,網站就無法登入。
出現「無法載入DLL(OraOps9.dll)」錯誤訊息。
(圖片加工移除機敏資料)
線索:
- 「無法載入DLL(OraOps9.dll)」
辦案過程:
以前沒有使用Oracle的經驗,所以有問題當然都是直接拜google。
在網路上確是口徑一致的指向以下的方法。
- 以Administrator許可權登錄Windows
- 找到ORACLE_HOME目錄,例如 C:\Oracle\ora92
- 右鍵功能表,選擇 “屬性”
- 在“屬性”框上,點擊 “安全” 頁
- 在組和用戶名稱列表中點擊“Authenticated Users” 項
- 在該用戶的許可權列表中,將“讀取和運行”的選擇框的勾去掉
- 再次點擊“讀取和運行”的選擇框,將它的勾打上
- 點擊“高級”按鈕並在許可權專案中確定“Authenticated Users” 是否擁有“讀取並運行”許可權並應用於“該文件夾,及子文件夾和文件”. 如果不是,雙擊這項,確保許可權應用於 “該文件夾,及子文件夾和文件”. 該項非常重要你一定要核查.
- 一直點擊“確定” 按鈕,直到關閉所有視窗
- 建議重啟作業系統, 確保所有的修改生效.
看起來蠻多人遇到相同的問題,而且透過上述的方法得到了解決。
但是網路上也還有人表示按表操作卻仍然失敗的窘境(其實就是我= =)。
因為權限有問題的可能性比較高,仔細比較只裝ODP與安裝了Oracle Client的兩個ora92資料夾權限,
發現只裝ODP的資料夾權限如下。
比起同時安裝了Oracle Client與ODP的資料夾權限
多了好多的使用者,這時候不僅懷疑起網路的解法(錯誤的第一步)。(盛X如:殊不知~~這個決策,竟將偵辦方向帶進了五里霧中~~~)
陸續替ora92資料夾新增了ASP.NET Machine Account、NETWORK SERVICE、Users等帳戶,並開起相關權限(錯誤的第二步)。
結果,仍舊無法登入,甚至火大直接開起EveryOne完全控制的權限(錯誤的第三步),這是非常糟糕的作法,
但想說就全部都給你,看你還不載入嗎?
結果還真的依舊是「無法載入DLL(OraOps9.dll)」。= =
此時,甚至開始考慮不是權限的問題了(越陷越深)。
重新拜google大神,卻似乎沒有別的作法。大概卡了整兩個禮拜,
已經是半放棄的狀態下,重新開啟ora92的權限設定,不論怎麼設仍無法登入,忽然想起線索中提到的OraOps9.dll,
徹底搜尋了整部電腦,確定只有一個OraOps9.dll,但是就是無法載入,這樣看來還是權限問題了(網路上早就說過n遍了…)
開啟OraOps9.dll的權限,意外的竟然和心中預期的不同,完全沒有後來自已加的那些哩哩叩叩帳號…難道當初設定時沒有套用到子資料夾與檔案嗎?
開啟ora92資料夾的進階,發現之前都沒有勾選下圖紅框之處
「以顯示於此套用到子物件的項目,取代所有子項物件上的權限項目」
打勾,套用,出現以下設定安全性資料的畫面(帳號當然是網路上流傳的Authenticated Users)
設定完成後,重新開機,成功登入!!!破案!!!
心得:
- 盡信網路不如沒有網路,但是在懷疑之前先想清楚為什麼別人會成功?
- 只看父層的資料夾權限是不夠的,還要看看裡面的子資料夾與項目。
- 用VM,重置設定真的很方便,沒有VM的話這個問題我可能會重灌N遍測試機。
- 隨時記錄自己測試過的結果,不要犯同樣的錯。(這次測試我照表操課不下10次,若有記錄或許會及早更正測試方法與步驟,也興起開始寫blog的想法)
助手馬生筆2011.08.26
案外案:
安裝Oracle Client時發生錯誤,導致無法安裝。
解決方式:
暫時停止IIS伺服器,在命令提示字元執行「iisreset /stop」指令。
安裝完畢,記得執行「iisreset /start」重新啟動。