Man benötigt es nicht wirklich oft – aber wenn es defekt ist oder gar komplett fehlt wird das oraInventory auf einen Schlag plötzlich sehr wichtig. Ohne oraInventory kann man das Oracle weder Patchen noch Updaten. Eigentlich sollte es kein Problem sein das Verzeichnis einfach aus einem Backup wieder herzustellen. Eigentlich. Denn manchmal kommt es eben anders als man denkt. Man wollte z.B. nur schnell einen Oracle SBP einspielen und dann meldet der OPatch folgende Fehlermeldung:
OPatch failed to locate Central Inventory. Possible causes are: The Central Inventory is corrupted The oraInst.loc file specified is not valid. LsInventorySession failed: OPatch failed to locate Central Inventory. Possible causes are: The Central Inventory is corrupted The oraInst.loc file specified is not valid.
Es gibt nun zwei Möglichkeiten:
- Eine Neuinstallation der kompletten Oracle Software
- Das orainventory einfach wieder herstellen
(Bitte nicht auf die Idee kommen das Verzeichnis einfach von einer anderen Oracle Installation zu kopieren – das ist keine gute Idee!)
Da mir die erste Lösung zu viel Aufwand mit sich bringt bin ich eher ein Freund des zweiten Lösungsansatzes. Die Umsetzung funktioniert im Übrigen auch viel schneller.
Zunächst identifiziert man wo bei der Installation das oraInventory der eigentlich erwartet wird. Bei SAP Systemen ist das i.d.R. immer /oracle:
[orad01@sapserver ~]$ cat /etc/oraInst.loc inventory_loc=/oracle/oraInventory inst_group=dba [orad01@sapserver ~]$
In diesem Falle wäre das korrekte Verzeichnis also:
/oracle/oraInventory
Im Oracle Verzeichnis sieht es dann ggf. so aus:
[orad01@sapserver ~]$ ls -la /oracle insgesamt 32 drwxr-xr-x. 8 orad01 dba 4096 1. Mai 17:23 . dr-xr-xr-x. 21 root root 4096 30. Apr 21:35 .. drwxr-xr-x. 2 orad01 sapsys 4096 1. Mai 16:51 checkpoints drwxr-xr-x. 3 root root 4096 1. Mai 17:24 client drwxr-xr-x. 18 orad01 dba 4096 1. Mai 19:49 D01 drwxrwxr-x. 11 orad01 sapsys 4096 1. Mai 16:16 diag drwxrwxr-x. 3 root 1001 4096 1. Mai 15:46 stage [orad01@sapserver ~]$
Hier fehlt das oraInventory komplett. Möglich wäre auch, dass ein Teil des Verzeichnisses gelöscht wurde. Hier Beispielhaft der komplette Inhalt bei einer frischen Installation:
[orad01@sapserver /oracle]$ find oraInventory oraInventory oraInventory/ContentsXML oraInventory/ContentsXML/comps.xml oraInventory/ContentsXML/inventory.xml oraInventory/ContentsXML/libs.xml oraInventory/oui oraInventory/oui/srcs.lst oraInventory/logs oraInventory/logs/oraInstall2015-05-01_04-41-33PM.out oraInventory/logs/installActions2015-05-01_04-41-33PM.log oraInventory/logs/time2015-05-01_04-41-33PM.log oraInventory/logs/oraInstall2015-05-01_04-41-33PM.err [orad01@sapserver /oracle]$
Im ORACLE_HOME finden wir dann:
[orad01@sapserver ~]$ ls -al $ORACLE_HOME/oui insgesamt 60 drwxr-xr-x. 8 orad01 dba 4096 1. Mai 16:48 . drwxr-xr-x. 75 orad01 dba 4096 1. Mai 16:51 .. -rwxr-xr-x. 1 orad01 dba 323 17. Feb 2007 admin_langs.xml drwxr-xr-x. 3 orad01 dba 4096 1. Mai 16:48 bin -rw-r-----. 1 orad01 dba 6632 1. Mai 16:45 clusterparam.ini drwxr-xr-x. 2 orad01 dba 4096 1. Mai 16:45 instImages drwxr-xr-x. 4 orad01 dba 4096 1. Mai 16:45 jlib drwxr-xr-x. 3 orad01 dba 4096 1. Mai 16:48 lib -rwxr-xr-x. 1 orad01 dba 2110 17. Feb 2007 nlsrtlmap.xml -rw-r-----. 1 orad01 dba 6782 1. Mai 16:45 oraparam.ini drwxr-xr-x. 3 orad01 dba 4096 1. Mai 16:43 prov -rwxr-xr-x. 1 orad01 dba 748 17. Feb 2007 runtime_langs.xml drwxr-xr-x. 2 orad01 dba 4096 1. Mai 16:45 schema [orad01@sapserver ~]$
Über den Oracle Installer im ORACLE_HOME kann man das komplette oraInventory wieder herstellen:
$ORACLE_HOME/oui/bin/runInstaller -silent -attachHome ORACLE_HOME=$ORACLE_HOME ORACLE_HOME_NAME=112_64
Achtung. Ggf. muss ORACLE_HOME_NAME durch eine andere Angabe ersetzt werden, sofern der (typischer weise als symbolischer Link) Ordner nicht vorhanden ist (z.B. 11204, 11203, 11202 etc.)
Die Ausführung sieht dann so aus:
[orad01@sapserver /oracle]$ $ORACLE_HOME/oui/bin/runInstaller -silent -attachHome ORACLE_HOME=$ORACLE_HOME ORACLE_HOME_NAME=112_64 Oracle Universal Installer wird gestartet... Swap-Speicher wird geprüft: muss größer sein als 500 MB. Tatsächlich 20479 MB Erfolgreich The inventory pointer is located at /etc/oraInst.loc The inventory is located at /oracle/oraInventory 'AttachHome' war erfolgreich. [orad01@sapserver /oracle]$
Sofern die Aktion erfolgreich war findet sich an der entsprechenden Stelle im Filesystem das vermisste Verzeichnis. Einen kleinen Unterschied zum „Original“ gibt es dann aber doch:
Der Ordner
/oracle/oraInventory/oui/
existiert nicht. Das ist aber nicht weiter schlimm. Nach einer frischen Oracle Installation sieht der Inhalt so aus:
[orad01@sapserver oui]$ ls -al insgesamt 12 drwxrwx---. 2 orad01 dba 4096 1. Mai 16:43 . drwxrwx---. 5 orad01 dba 4096 1. Mai 16:48 .. -rw-rw----. 1 orad01 dba 359 1. Mai 16:43 srcs.lst [orad01@sapserver oui]$ cat srcs.lst < ? xml version="1.0" standalone="yes" ? > < !-- Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. - -> < !-- Do not modify the contents of this file by hand. - - > < SourceConfigs > < StagingAreas > < StgArea URL="/oracle/stage/112_64/database/install/../stage/products.xml" / > < / StagingAreas > < ServerConfigs > < / ServerConfigs > < / SourceConfigs > [orad01@sapserver oui]$
Dem O-/MOPATCH ist das jedoch egal. Mit dem Oracle SBP / Update kann jetzt fortgefahren werden. In den gesparten 30 Minuten Aufwand zur Neuinstallation kann man jetzt entspannt einen Kaffee trinken gehen 😉