被這個OracleDBconsole服務無法啟動的問題折磨了兩個星期了,今天很幸運,在網上無意間看到了一位大俠的思路,雖然錯誤的情況並不完全相同,但他的思路完全可以搬過來用。
環境:Windows XP, 裝Oracle 11g,裝完數據庫軟件、新建一個數據庫(數據庫的SID為orcl20120825),但是無法進入網頁版的企業管理器(EM),提示是“403,服務器拒絕了您的訪問請求”。因為數據庫的ID是orcl20120825,因此對應的Windows服務名為OracleDbConsoleorcl20120825,原因不多說了,想必遇到過這個問題的朋友都知道,就是這個服務沒有啟動,所以進不了企業管理器。嘗試啟動這個服務,提示“Windows 不能在 本地計算機 啟動 OracleDBConsoleorcl。有關更多信息,查閱系統事件日志。如果這是非 Microsoft 服務,請與服務廠商聯系,並參考特定服務錯誤代碼 2。”
至於具體的原因,網上有很多人討論,大概是計算機名改變、IP地址更改等情況,就不分別討論了。具體的出錯原因,只有計算機自己才能回答,所以,還是先問cmd吧~
那就在cmd中啟動企業管理器試試吧:
1.C:\Documents and Settings\Administrator>emctl start dbconsole
這是啟動控制台的命令,它當然報錯:
Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.
雖然並不十分清楚,但可以肯定的是,不能啟動的原因一定和ID、SID之類的變量有關,也許是數據庫的名稱,也許是計算機的名稱,也許是某個文件的名稱。繼續~
2.既然cmd說要給數據庫設置一個ORACLE_UNQNAME,於是在網上搜了一下,大概是這個命令:
C:\Documents and Settings\Administrator>set ORACLE_UNQNAME=orcl20120825
敲了回車沒反應,額,,,於是再敲個分號,,,
C:\Documents and Settings\Administrator>;
還是沒反應,,,算了,就當是已經設置過了吧,那么再嘗試着啟動一下企業管理器:
C:\Documents and Settings\Administrator>emctl start dbconsole
繼續報錯,不過這次的內容具體一點了:
OC4J Configuration issue. E:\app\Administrator\product\11.2.0\dbhome_1/oc4j/j2ee /OC4J_DBConsole_180.111.140.106_orcl20120825 not found.
很顯然,是因為Oracle找不到提示的這個文件或文件夾而報錯。那么理所當然得,可以去提示中給出的目錄看一看,如下圖:
果然,在這個目錄下並沒有OC4J_DBConsole_180.111.140.106_orcl20120825這個文件夾或者文件。但是,注意到該目錄下有一個和提示中的文件名非常相似的文件夾
OC4J_DBConsole_localhost_orcl20120825,只有中間的部分不同。到這一步,情況開始明朗了。
很顯然,180.111.140.106看上去是個外網地址,似乎是出現在動態分配IP的情況下,可以驗證一下,重新開一個cmd,>ipconfig,如下圖:
果然,這是個動態分配的本機IP地址。而上文目錄中的OC4J_DBConsole_localhost_orcl20120825文件夾,中間的localhost也代表了本機,到這一步,基本可以得出EM不能啟動的原因了,大概是因為Oracle默認會用localhost去標識一些變量或文件,但是在后來的某個操作中,因為電腦已經處在連上外網的狀態,因此有了一個動態的IP,於是Oracle改用這個動態IP去標識一些變量或者文件,所以就造成了一些有關聯的文件或者系統設置出現了文件名前后不一致的問題。
故障原因找到了,接下來開始解決。這里就要借用那位大俠的思路了:
1.根據以往在Windows下折騰的經驗,可以猜測OC4J_DBConsole_localhost_orcl20120825文件夾和OC4J_DBConsole_180.111.140.106_orcl20120825文件夾中的內容是一樣的,只是文件夾的名稱不同而已。那既然提示說要找這個名字的文件夾,那是不是可以直接把OC4J_DBConsole_localhost_orcl20120825文件夾重命名,把它文件名中的localhost改成180.111.140.106呢?也許可以,但為了保險起見,還是先復制一份,再重命名。如下圖:
於是,該目錄下就有了名為OC4J_DBConsole_180.111.140.106_orcl20120825的文件夾。接下來,在cmd中繼續執行上一次的命令,嘗試啟動EM
:
C:\Documents and Settings\Administrator>emctl start dbconsole
雖然還是報錯,並且和上一個報錯信息很相似:
EM Configuration issue. E:\app\Administrator\product\11.2.0\dbhome_1/180.111.140.106_orcl20120825 not found.
同樣是提示在某路徑下找不到某文件的提示,那么重復上一步的做法,到這次提示的目錄中去看一下,如下圖:
同樣地,在這個目錄下果然沒有提示中的180.111.140.106_orcl20120825文件夾,但是又出現了一個文件名極其相似的文件夾:localhost_orcl20120825,很顯然也是前文所說的IP地址改變造成的文件命名前后不一致的原因。復制上一步的思路,猜測180.111.140.106_orcl20120825文件夾中的內容和localhost_orcl20120825中的內容是一樣的,於是復制一個localhost_orcl20120825文件夾並重命名為180.111.140.106_orcl20120825,如下圖:
於是,該目錄下就有了名為180.111.140.106_orcl20120825的文件夾。接下來,在cmd中繼續執行上一次的命令,嘗試啟動EM:
C:\Documents and Settings\Administrator>emctl start dbconsole
雖然還是報錯,並且和上一個報錯信息很相似:
Unable to determine local host vide E:\app\Administrator\product\11.2.0\dbhome_1/180.111.140.106_orcl20120825/sysman/config/emd.properties : No such file or directory
這次的提示更具體了,是在指定的目錄下找不到指定的文件。那么,重復上一步的做法,到提示中給出的目錄下去看一看,如下圖:
這次情況稍微有點小復雜,180.111.140.106_orcl20120825/sysman/目錄下只有一個opmn文件夾,並沒有提示中的config文件夾,也沒有和“config”名稱相似的文件夾,怎么辦呢?
舉一反三!既然上文猜測180.111.140.106_orcl20120825文件夾和localhost_orcl20120825文件夾中的內容一致,那么自然而然就可以想到回上一步的localhost_orcl20120825文件夾中去看一看:如下圖:
在localhost_orcl20120825中的sysman目錄下,可以看到其實里面的內容和180.111.140.106_orcl20120825下sysman目錄中的內容並不相同,但兩者都有一個opmn文件夾,並且localhost_orcl20120825\sysman目錄下多了四個文件夾,並且其中一個名為config,而上一步報錯提示的路徑中就有config目錄,並且這個config文件夾中就有一個和上一步報錯提示中同名的emd.properties的文件,於是類似地重復之前的思路,把localhost_orcl20120825\sysman目錄下的config、emd、log、recv復制到180.111.140.106_orcl20120825\sysman目錄下(因為opmn文件夾還不知道有什么用處,所以先不動它)。這樣,180.111.140.106_orcl20120825\sysman下的目錄結構就和localhost_orcl20120825\sysman下的目錄結構相同了,如下圖:
接下來,在cmd中繼續執行上一次的命令,嘗試啟動EM:
C:\Documents and Settings\Administrator>emctl start dbconsole
額,,,貌似沒報錯:
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0
Copyright (c) 1996, 2010 Oracle Corporation. All rights reserved.
https://localhost:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 11g Database Control ...OracleDBConsoleorcl20
120825 服務正在啟動 ...............................................
OracleDBConsoleorcl20120825 服務已經啟動成功。
啟動了!
再去Windows服務中看一下:
這個服務果然啟動了!
不放心,再用瀏覽器進EM試試:
↓↓↓
↓↓↓
至此,解決了一塊長久以來的心病!