Jag måste bestämma från ett program vilken version av Oracle som är installerad i vart och ett av Oracle Homes på en server. Eftersom det kanske inte finns några databaser skapade i hemmet än, måste jag kunna göra detta utanför databasen (dvs. utan att ansluta till databasen). Det skulle också vara att föredra att kunna göra detta från ett fjärrprogram.
Detta kommer från ett Windows-program som kör .Net (C #, om det betyder något).
I läser för närvarande fjärrregisternycklar (med den här tekniken: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ), för att hitta alla Oracle Homes enligt den här metoden . Detta fungerar bra, men jag har tittat runt de nycklarna och ser ingen information om den exakta versionen / utgåvan.
Namnet på ett Oracle Home självklart är naturligtvis 1) inte en pålitlig indikator och 2 ) har inte den exakta versionen / release (till exempel ”10.2.0.4.0”). I grund och botten letar jag efter ett sätt att ta reda på vad Oracle Universal Installer säger till dig med knappen Installerade produkter.
Jag bör klargöra att alla servrar kör Windows 2003-2008.
Kommentarer
Svar
Om databashemmen var korrekt installerade, var den centrala inventeringen har en lista om dem. Den centrala inventeringen i Windows finns på C:\Program Files\Oracle\Inventory
. På Linux / UNIX-plattformar finns platsen för det centrala inventeringen i /etc/oraInst.loc
. I inventeringen, i ContentsXML\inventory.xml
, finns en lista över installerade hem i XML-format, t.ex.:
<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 analysera listan och hitta detaljerad information med opatch till exempel:
/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
Ett Windows-exempel skulle vara:
C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details
Ovanstående måste naturligtvis köras på servern.
Detta är det bästa fallet med korrekta installationer. Det värsta fallet är att hem använder separata inventeringar eller inte använder någon inventering alls, och du måste söka i alla filsystem på servern efter möjliga Oracle-installationer.
Svar
En annan metod för att visa Oracle-versionen är att ringa dbv-verktyget. Detta fungerar bara för installationer av databasservern. Versionen av det här verktyget ska alltid matcha versionen av databasen. Du bör ställa in lämplig miljö först (PATH; ORACLE_HOME, LD_LIBRARY_PATH), sedan får du något 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örsta raden innehåller release
Kommentarer
- Det här ser fungerande lokalt ut, finns det något inbyggt sätt att åberopa det på distans?
- Nej, jag don ' t tror det. På ett Linux-system skulle jag använda ssh för att försöka logga in på servern.
C:\tnsping>>E:\tnspingoutput.txt
. Använd sedan språk på hög nivå för att extrahera version från textfilen