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

  • Det blir vanskelig. Ta en titt på Oracle Universal-installasjonsprogrammet, hver komponent har sin egen versjon. Du kan ikke bestemme versjonen på en hel Oracle Client-installasjon – i det minste ikke for alle tallene.
  • Jeg tror tnaping og Sqlplus gir den faktiske versjonen av installasjonen. I Windows kan du bruke ledeteksten til å spole utdataene fra tnsping. C:\tnsping>>E:\tnspingoutput.txt. Bruk deretter språk på høyt nivå for å trekke ut versjonen fra tekstfilen
  • @WernfriedDomscheit Først spør jeg ikke om Client -versjonen, men server -versjonene. For det andre, du kan bestemme det, det er det siste nivået ett barn under et hjem (de enkelte komponentene er barn på lavere nivå). Jeg gjør det manuelt med Universal Installer hele tiden. Jeg vil bare ikke ' ikke bruke tiden på å gjøre det manuelt hele tiden.
  • Hva skjer når serveren er installert på Linux / Unix (som er Jeg tror flertallet)? Da hjelper ikke et C # -program eller å lese registeret.
  • @WernfriedDomscheit I mitt tilfelle er de alle Windows-servere. Jeg vil avklare det i spørsmålet mitt.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *