Ich muss aus einem Programm ermitteln, welche Version von Oracle in jedem Oracle Homes auf einem Server installiert ist. Da in der Startseite möglicherweise noch keine Datenbanken erstellt wurden, muss dies außerhalb der Datenbank möglich sein (d. H. Ohne Verbindung zur Datenbank herzustellen). Es wäre auch sehr vorzuziehen, dies von einem Remote-Programm aus tun zu können.
Dies ist von einem Windows-Programm, auf dem .Net (C #, falls dies wichtig ist) ausgeführt wird.
I. Ich lese derzeit Remote-Registrierungsschlüssel (mit dieser Technik: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ), um alle Oracle Homes gemäß zu finden diese Methode . Dies funktioniert einwandfrei, ich habe mich jedoch in diesen Schlüsseln umgesehen und sehe keine Informationen zur genauen Version / Version.
Der Name eines Oracle Home selbst ist natürlich 1) kein zuverlässiger Indikator und 2 ) hat nicht die genaue Version / Version (zum Beispiel „10.2.0.4.0“). Grundsätzlich suche ich nach einer Möglichkeit, um herauszufinden, was der Oracle Universal Installer Ihnen auf der Schaltfläche Installierte Produkte sagt.
Ich sollte klarstellen, dass auf allen Servern Windows 2003-2008 ausgeführt wird.
Kommentare
- Es wird schwierig. Schauen Sie sich das Oracle Universal-Installationsprogramm an. Jede Komponente hat ihre eigene Version. Sie können die -Version für eine gesamte Oracle Client-Installation nicht ermitteln – zumindest nicht für alle Nummern.
- Ich denke, tnaping und Sqlplus bieten die tatsächliche Version der Installation. In Windows können Sie die Eingabeaufforderung verwenden, um die Ausgabe von tnsping zu spoolen.
C:\tnsping>>E:\tnspingoutput.txt
. Verwenden Sie dann eine Hochsprache, um die Version aus der Textdatei zu extrahieren. - @WernfriedDomscheit Zuerst frage ich nicht nach der Client -Version, sondern nach den Server -Versionen. Zweitens können Sie bestimmen , dass es sich um die letzte Stufe eines Kindes unter einem Heim handelt (die einzelnen Komponenten sind untergeordnete Kinder). Ich mache es die ganze Zeit manuell mit Universal Installer. Ich möchte ' nicht die ganze Zeit die Zeit dafür aufwenden.
- Was passiert, wenn der Server unter Linux / Unix installiert ist? Ich denke die Mehrheit)? Dann hilft ein C # -Programm oder das Lesen der Registrierung nicht.
- @WernfriedDomscheit In meinem Fall handelt es sich bei allen um Windows-Server. Ich werde das in meiner Frage klarstellen.
Antwort
Wenn die Datenbankhäuser ordnungsgemäß installiert wurden, das zentrale Inventar hat eine Liste über sie. Das zentrale Inventar unter Windows befindet sich unter C:\Program Files\Oracle\Inventory
. Auf Linux / UNIX-Plattformen befindet sich der Speicherort des zentralen Inventars in /etc/oraInst.loc
. Im Inventar befindet sich in ContentsXML\inventory.xml
eine Liste der installierten Häuser im XML-Format, z. B.:
<INVENTORY> <VERSION_INFO> <SAVED_WITH>12.1.0.2.0</SAVED_WITH> <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER> </VERSION_INFO> <HOME_LIST> <HOME NAME="OraGI12Home1" LOC="/opt/oracle/grid12102" TYPE="O" IDX="1"/> <HOME NAME="OraDB12Home1" LOC="/opt/oracle/base/product/db12102ee" TYPE="O" IDX="2"/> <HOME NAME="OraDb11g_home1" LOC="/opt/oracle/base/product/db11204ee" TYPE="O" IDX="3"/> </HOME_LIST> </INVENTORY>
Sie können diese Liste analysieren und detaillierte Informationen mit opatch finden, zum Beispiel:
/opt/oracle/grid12102/OPatch/opatch lsinventory -oh /opt/oracle/grid12102 -details /opt/oracle/base/product/db12102ee/OPatch/opatch lsinventory -oh /opt/oracle/base/product/db12102ee -details /opt/oracle/base/product/db11204ee/OPatch/opatch lsinventory -oh /opt/oracle/base/product/db11204ee -details
Ein Windows-Beispiel wäre:
C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details
Das oben Genannte muss natürlich auf dem Server ausgeführt werden.
Dies ist das beste Szenario bei ordnungsgemäßer Installation. Im schlimmsten Fall verwenden Haushalte separate Inventare oder gar kein Inventar, und Sie müssen alle Dateisysteme auf dem Server nach möglichen Oracle-Installationen durchsuchen.
Antwort
Eine andere Methode zum Anzeigen der Oracle-Version ist das Aufrufen des Dienstprogramms dbv. Dies funktioniert nur bei Datenbankserverinstallationen. Die Version dieses Tools sollte immer mit der Version der Datenbank übereinstimmen. Sie sollten zuerst die entsprechende Umgebung festlegen (PATH; ORACLE_HOME, LD_LIBRARY_PATH), dann erhalten Sie so etwas wie
$ $ORACLE_HOME/bin/dbv DBVERIFY: Release 12.1.0.2.0 - Production on Sun Jan 01 12:00:00 2016 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. Keyword Description (Default) ---------------------------------------------------- FILE File to Verify (NONE) START Start Block (First Block of File) END End Block (Last Block of File) BLOCKSIZE Logical Block Size (8192) LOGFILE Output Log (NONE) FEEDBACK Display Progress (0) PARFILE Parameter File (NONE) USERID Username/Password (NONE) SEGMENT_ID Segment ID (tsn.relfile.block) (NONE) HIGH_SCN Highest Block SCN To Verify (NONE) (scn_wrap.scn_base OR scn)
Die erste Zeile enthält die Version
Kommentare
- Dies scheint lokal praktikabel zu sein. Gibt es eine integrierte Möglichkeit, es remote aufzurufen?
- Nein, ich habe ' glaubt das nicht. Auf einem Linux-System würde ich ssh verwenden, um mich beim Server anzumelden.