Ik moet vanuit een programma bepalen welke versie van Oracle is geïnstalleerd in elk van de Oracle Homes op een server. Aangezien er mogelijk nog geen databases in Home zijn gemaakt, moet ik dit buiten de database kunnen doen (d.w.z. zonder verbinding te maken met de database). Het zou ook zeer de voorkeur hebben om dit vanuit een programma op afstand te kunnen doen.
Dit is van een Windows-programma met .Net (C #, als dat ertoe doet).
I lees momenteel registersleutels op afstand (met behulp van deze techniek: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ) om alle Oracle Homes te vinden volgens deze methode . Dit werkt prima, maar ik heb rond die sleutels gekeken en zie geen informatie over de exacte versie / release.
De naam van een Oracle Home zelf is natuurlijk 1) geen betrouwbare indicator en 2 ) heeft niet de exacte versie / release (bijvoorbeeld “10.2.0.4.0”). In principe ben ik op zoek naar een manier om erachter te komen wat de Oracle Universal Installer u vertelt in de knop Geïnstalleerde producten.
Ik zou moeten verduidelijken dat alle servers Windows 2003-2008 zullen draaien.
Reacties
Antwoord
Als de database-homes correct zijn geïnstalleerd, wordt de centrale inventaris heeft een lijst over hen. De centrale inventaris op Windows bevindt zich op C:\Program Files\Oracle\Inventory
. Op Linux / UNIX-platforms is de locatie van de centrale inventaris te vinden in /etc/oraInst.loc
. In de inventaris, in ContentsXML\inventory.xml
, staat een lijst met geïnstalleerde huizen in XML-indeling, bijvoorbeeld:
<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>
U kunt deze lijst ontleden en gedetailleerde informatie vinden met opatch, bijvoorbeeld:
/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
Een Windows-voorbeeld zou zijn:
C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details
Het bovenstaande moet natuurlijk op de server worden uitgevoerd.
Dit is het beste scenario, met de juiste installaties. In het ergste geval gebruiken huizen aparte inventarissen, of helemaal geen inventaris, en je moet alle bestandssystemen op de server doorzoeken op mogelijke Oracle-installaties.
Antwoord
Een andere methode om de Oracle-versie weer te geven, is het aanroepen van het hulpprogramma dbv. Dit werkt alleen voor databaseserverinstallaties. De versie van deze tool moet altijd overeenkomen met de versie van de database. Je moet eerst de juiste omgeving instellen (PATH; ORACLE_HOME, LD_LIBRARY_PATH), dan krijg je zoiets als
$ $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)
De eerste regel bevat de release
Opmerkingen
- Dit ziet er lokaal werkbaar uit, is er een ingebouwde manier om het op afstand aan te roepen?
- Nee, dat doe ik niet ' t denkt van wel. Op een Linux-systeem zou ik ssh gebruiken om te proberen in te loggen op de server.
C:\tnsping>>E:\tnspingoutput.txt
. Gebruik vervolgens taal op hoog niveau om de versie uit het tekstbestand te extraheren.