Jeg har brug for at bestemme fra et program, hvilken version af Oracle der er installeret i hvert af Oracle Homes på en server. Da der muligvis ikke er oprettet nogen databaser i hjemmet endnu, skal jeg være i stand til at gøre dette uden for databasen (dvs. uden at oprette forbindelse til databasen). Det ville også være meget foretrukket at kunne gøre dette fra et eksternt program.
Dette er fra et Windows-program, der kører .Net (C #, hvis det betyder noget).
I læser i øjeblikket eksterne registreringsdatabasenøgler (ved hjælp af denne teknik: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ) for at finde alle Oracle Homes i henhold til denne metode . Dette fungerer fint, men jeg har kigget rundt omkring disse nøgler og kan ikke se nogen information om den nøjagtige version / frigivelse.
Navnet på selve Oracle Home er selvfølgelig 1) ikke en pålidelig indikator og 2 ) har ikke den nøjagtige version / frigivelse (for eksempel “10.2.0.4.0”). Dybest set leder jeg efter en måde at finde ud af, hvad Oracle Universal Installer fortæller dig på knappen Installerede produkter.
Jeg skal præcisere, at alle serverne kører Windows 2003-2008.
Kommentarer
Svar
Hvis databasehjemmene blev installeret korrekt, var den centrale opgørelse har en liste om dem. Den centrale opgørelse på Windows findes på C:\Program Files\Oracle\Inventory
. På Linux / UNIX-platforme kan placeringen af den centrale opgørelse findes i /etc/oraInst.loc
. I oversigten er der i ContentsXML\inventory.xml
en liste over installerede huse i XML-format, fx:
<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 liste og finde detaljerede oplysninger 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 ville 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
Ovenstående skal naturligvis køres på serveren.
Dette er det bedste tilfælde med korrekte installationer. Det værste tilfælde er, at boliger bruger separate beholdninger eller slet ikke bruger nogen beholdning, og du skal søge i alle filsystemer på serveren efter mulige Oracle-installationer.
Svar
En anden metode til at få vist Oracle-versionen kalder dbv-værktøjet. Dette fungerer kun til installation af databaseserver. Versionen af dette værktøj skal altid matche med versionen af databasen. Du skal først indstille det relevante miljø (PATH; ORACLE_HOME, LD_LIBRARY_PATH), så får du noget 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 linje indeholder frigivelsen
Kommentarer
- Dette ser ud til at fungere lokalt, er der nogen indbygget måde at påberåbe det eksternt?
- Nej, jeg don ' t mener det. På et Linux-system ville jeg bruge ssh til at prøve at logge ind på serveren.
C:\tnsping>>E:\tnspingoutput.txt
. Brug derefter sprog på højt niveau til at udtrække version fra tekstfilen