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

  • Het zal moeilijk worden. Kijk eens naar Oracle Universal installer, elk onderdeel heeft zijn eigen versie. U kunt de versie niet bepalen op een volledige Oracle Client-installatie – althans niet voor alle cijfers.
  • Ik denk dat tnaping en Sqlplus de daadwerkelijke versie van de installatie bieden. In Windows kunt u de opdrachtprompt gebruiken om de uitvoer van tnsping te spoolen. C:\tnsping>>E:\tnspingoutput.txt. Gebruik vervolgens taal op hoog niveau om de versie uit het tekstbestand te extraheren.
  • @WernfriedDomscheit Ten eerste vraag ik niet naar de Client -versie, maar naar de server -versies. Ten tweede, je kunt het bepalen, het is het laatste kind van niveau 1 onder een Home (de individuele componenten zijn kinderen van een lager niveau). Ik doe het de hele tijd handmatig met Universal Installer. Ik ' wil gewoon geen tijd besteden om het altijd handmatig te doen.
  • Wat gebeurt er als de server is geïnstalleerd op Linux / Unix (wat Ik denk dat de meerderheid)? Dan helpt een C # -programma of het lezen van het register niet.
  • @WernfriedDomscheit In mijn geval zijn het allemaal Windows-servers. Ik zal dat in mijn vraag verduidelijken.

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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *