主機名變動後不能啟動Oracle DBConsole服務的處理
問題描述:
在XP HOME上安裝完ORACLE 10G後, oracledbconsoleorcl 服務起不來。ORACLE_SID=orcl。用
EMCLT START DBCONSOLE命令報錯如下:D:/oracle/product/10.1.0/db_1/oc4j/j2ee/OC4J_DBConsole_ACER-LEO.mshome.net_orcl not found。
問題分析與解決:
主機名為:ACER-LEO.mshome.net,PING主機IP地址顯示192.168.0.219。檢視%ORACLE_HOME%目錄,發現確實不存在D:/oracle/product/10.1.0/db_1/oc4j/j2ee/OC4J_DBConsole_ACER-LEO.mshome.net_orcl。只存在D:/oracle/product/10.1.0/Db_1/192.168.0.219_orcl和D:/oracle/product/10.1.0/Db_1/oc4j/j2ee/OC4J_DBConsole_192.168.0.219_orcl。檢視其它機子上裝的ORACLE,發現其它機子用的是主機名而不是IP地址,如:D:/oracle/product/10.1.0/Db_1/FJTA-PC203_orcl和D:/oracle/product/10.1.0/Db_1/oc4j/j2ee/OC4J_DBConsole_FJTA-PC203_orcl。可見問題在於ACER-LEO.mshome.net與192.168.0.219的對應上。
經查該服務啟動時執行了D:/oracle/product/10.1.0/db_1/BIN/EmctlCommon.pm檔案,其中用到getLocalHostName函式生成主機名。本問題取巧的解決辦法是讓該函式返回值為IP址“192.168.0.219”,如此oracledbconsoleorcl服務就會去尋找D:/oracle/product/10.1.0/db_1/oc4j/j2ee/OC4J_DBConsole_192.168.0.219_orcl而不是D:/oracle/product/10.1.0/db_1/oc4j/j2ee/OC4J_DBConsole_ACER-LEO.mshome.net_orcl。
getLocalHostName函式修改如下:
sub getLocalHostName
{
my $localHost;
if(defined($ENV{EMHOSTNAME}))
{
$localHost = $ENV{EMHOSTNAME};
}
else
{
my $localHostCmd;
$localHostCmd = "$JAVA_HOME/bin/java ".
"-jar $ORACLE_HOME/jlib/emConfigInstall.jar ".
"getlocalhost";
$localHost = `$localHostCmd`;
$localHost=~ s/^/s+|/s+$//;
}
#add here
$localHost='192.168.0.219';
return $localHost;
}
結論:
WINDOWS下ORACLE安裝時使用主機名建立相應的目錄,有時候甚至用的是IP地址。如果機器名修改了或者其它原因導致目錄名與實際情況不一致,也就找不到服務檔案所在目錄,所以會出錯。