Upgrading Oracle Clusterware: [INS-40406] The installer detects no existing Oracle Grid Infrastructure software on the system

Upgrading Oracle Grid Infrastructure 11.2 (it’s just another marketing name for the Oracle Clusterware, formerly known as Cluster Ready Services CRS) usually is easy: The runInstaller offers an upgrade mode, and discovers nodes and versions without further effort.

But what, if not? The message will be “[INS-40406] The installer detects no existing Oracle Grid Infrastructure software on the system” and runInstaller just refuses to continue.

Finally I found out, that the culprit may be in the
“$ORACLE_BASE/../oraInventory/ContentxXML/inventory.xml” file. The Clusterware home may not be flagged as CRS there (CRS=”true” missing):

<HOME NAME="Ora11g_gridinfrahome2" LOC="/u01/app/11.2.0/grid"
                                 TYPE="O" IDX="6" CRS="true">
      <NODE NAME="bs-klugdb1"/>
      <NODE NAME="bs-klugdb2"/>

To repair it, the GI runInstaller has an UpdateNodeList parameter, so the command in this case looked like:

./runInstaller -updateNodeList
              ORACLE_HOME="/u01/app/11.2.0/grid" CRS=true

Well, that’s it. Easy if you know, and worth 3 hours of nighttime research, if not.

Have a good uptime

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

9 Responses to “Upgrading Oracle Clusterware: [INS-40406] The installer detects no existing Oracle Grid Infrastructure software on the system”

  1. Oracle dba Says:

    [oracle@vmlinux1 bin]$ ./runInstaller -updateNodeList ORACLE_HOME=”/u01/app/oracle/product/crs” CRS=true
    Starting Oracle Universal Installer…

    No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed.
    The inventory pointer is located at /etc/oraInst.loc
    The inventory is located at /etc/oraInventory
    The Oracle home ‘/u01/app/oracle/product/crs’ could not be detached as it does not exist.
    ‘UpdateNodeList’ failed.

  2. Oracle dba Says:

    While upgrading RAC to we are facing the same error(INS-40406) but:

    In our case CRS=true is there in inventory.xml file
    And getting the above error while running ./runInstaller:

  3. usn Says:

    Is the specified Oracle Home in the oraInventory?

  4. Oracle dba Says:

    Following are the contents which are present in

  5. Oracle dba Says:

  6. Oracle dba Says:

    How to paste XML file here…???
    I want to paste inventory.xml file content.

  7. usn Says:

    Unfortunately this blog has a suboptimal comment editor. I’m working on it, but in the meantime you can try to paste a screenshot.

  8. Madhu Says:

    Thank you, so much!
    I wasted more than an hour, searching Oracle Support and looking for logs, and analysis, until I found your blog.


  9. rommel Says:

    Thank you!! I was writing a backup script for many clusterware 11.1 and 11.2 installations (ugly installations because no ofa, no standard.. all different ) so my problem was to determine in a string way where is ORACLE_HOME of clusterware. i have to say that i had only few installations without CRS=”true”. So, a simple shell function (sorry but error msgs and comments are in italian ):

    function logga {
    echo “["$(date "+%F %T")"]: “$@”.” | tee -a $LOG

    function ricavaCrsHome {
    # cancello in caso di pre-sporcatura da parte di un chiamante.
    unset CRS_HOME;
    # step preliminare: se non ce oraInst.loc vuol dire che non nulla ed ho sbagliato server.
    if [ ! -f /etc/oraInst.loc ] ; then
    logga “HALT: Su questo server manca /etc/oraInst.loc. Siamo sicuri che ci sia un qualche prodotto ORACLE??”
    exit 1;
    # ora mi prendo la crs_home
    INVENTARIO=$(grep inventory_loc /etc/oraInst.loc | sed ‘s/^.*=//’)”/ContentsXML/inventory.xml”
    if [[ ! -f $INVENTARIO ]] ; then
    logga “HALT: Non trovo l’inventario inventory.xml che, stando oraInst.loc dovrebbe essere in $INVENTARIO”
    exit 2;
    export CRS_HOME=$(grep ‘CRS=”true”‘ $INVENTARIO | sed -nr ‘s|^.* LOC=”(.*)” TYPE.*$|\1|p’)
    #ora verifico che la varibile ricavata CRS_HOME sia corretta.
    if [[ -z $CRS_HOME ]] ; then
    logga “HALT: Cercando in $INVENTARIO non ho trovato nessuna riga con CRS=true. Quindi non trovo la home del cluster”
    exit 3;
    # vediamo se e’ almeno una cartella:
    if [ ! -d $CRS_HOME ] ; then
    logga “$CRS_HOME non e’ una cartella valida. (quantomeno per me, $USER)”
    exit 4;
    # vediamo se ci sono gli eseguibili aspettati.
    if [ ! -x ${CRS_HOME}/bin/olsnodes ] || [ ! -x $CRS_HOME/bin/crs_stat ] || [ ! -x $CRS_HOME/bin/crs_start ] || [ ! -x $CRS_HOME/bin/crs_stop ] ; then
    logga “$CRS_HOME non e’ la vera CRS_HOME oppure non ho i permessi per usarla.”
    exit 6;

Leave a Reply