1. 程式人生 > >主機名變動後不能啟動Oracle DBConsole服務的處理

主機名變動後不能啟動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地址。如果機器名修改了或者其它原因導致目錄名與實際情況不一致,也就找不到服務檔案所在目錄,所以會出錯。