Jeg må bestemme fra et program hvilken versjon av Oracle som er installert i hvert av Oracle Homes på en server. Siden det ikke kan være noen databaser opprettet i hjemmet ennå, må jeg kunne gjøre dette utenfor databasen (dvs. uten å koble til databasen). Det ville også være å foretrekke å kunne gjøre dette fra et eksternt program.
Dette er fra et Windows-program som kjører .Net (C #, hvis det betyr noe).
I leser for øyeblikket eksterne registernøkler (ved hjelp av denne teknikken: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ), for å finne alle Oracle Homes i henhold til denne metoden . Dette fungerer fint, men jeg har sett meg rundt disse tastene og ser ikke informasjon om den eksakte versjonen / utgivelsen.
Navnet på selve Oracle Home er selvfølgelig 1) ikke en pålitelig indikator og 2 ) har ikke den eksakte versjonen / utgivelsen (for eksempel «10.2.0.4.0»). I utgangspunktet leter jeg etter en måte å finne ut hva Oracle Universal Installer forteller deg med knappen Installerte produkter.
Jeg bør avklare, alle serverne vil kjøre Windows 2003-2008.
Kommentarer
Svar
Hvis databasehjemmene ble installert riktig, var den sentrale beholdningen har en liste om dem. Den sentrale beholdningen på Windows ligger på C:\Program Files\Oracle\Inventory
. På Linux / UNIX-plattformer kan du finne plasseringen til den sentrale beholdningen i /etc/oraInst.loc
. I inventaret, i ContentsXML\inventory.xml
, er det en liste over installerte hjem i XML-format, f.eks:
<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>
Du kan analysere denne listen og finne detaljert informasjon med opatch for eksempel:
/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
Et Windows-eksempel vil være:
C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details
Ovennevnte må selvfølgelig kjøres på serveren.
Dette er det beste tilfellet, med riktige installasjoner. Det verste tilfellet er at hjem bruker separate beholdninger, eller ikke bruker noe inventar i det hele tatt, og du må søke i alle filsystemene på serveren etter mulige Oracle-installasjoner.
Svar
En annen metode for å vise Oracle-versjonen er å ringe til dbv-verktøyet. Dette fungerer bare for installasjon av databaseserver. Versjonen av dette verktøyet skal alltid samsvare med versjonen av databasen. Du bør angi riktig miljø først (PATH; ORACLE_HOME, LD_LIBRARY_PATH), så får du noe sånt som
$ $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)
Den første linjen inneholder utgivelsen
Kommentarer
- Dette ser ut til å fungere lokalt, er det noen innebygd måte å påberope det eksternt?
- Nei, jeg vet ikke ' t mener det. På et Linux-system vil jeg bruke ssh for å prøve å logge på serveren.
C:\tnsping>>E:\tnspingoutput.txt
. Bruk deretter språk på høyt nivå for å trekke ut versjonen fra tekstfilen