Devo determinare da un programma quale versione di Oracle è installata in ciascuna delle Oracle Homes su un server. Poiché potrebbero non esserci ancora database creati nella Home, devo essere in grado di farlo al di fuori del database (cioè, senza connettermi al database). Inoltre, sarebbe altamente preferibile essere in grado di farlo da un programma remoto.
Questo è da un programma Windows che esegue .Net (C #, se è importante).
I sto attualmente leggendo chiavi di registro remote (utilizzando questa tecnica: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ), per trovare tutte le Oracle Homes secondo questo metodo . Funziona bene, tuttavia, ho guardato intorno a quelle chiavi e non vedo alcuna informazione sulla versione / release esatta.
Il nome di una Oracle Home stessa è ovviamente 1) non un indicatore affidabile e 2 ) non ha la versione / release esatta (ad esempio “10.2.0.4.0”). Fondamentalmente sto cercando un modo per capire cosa ti dice Oracle Universal Installer nel pulsante Prodotti installati.
Dovrei chiarire, tutti i server eseguiranno Windows 2003-2008.
Commenti
Risposta
Se le case del database sono state installate correttamente, linventario centrale ha un elenco su di loro. Linventario centrale su Windows si trova in C:\Program Files\Oracle\Inventory
. Sulle piattaforme Linux / UNIX, la posizione dellinventario centrale è disponibile in /etc/oraInst.loc
. Nellinventario, in ContentsXML\inventory.xml
, è presente un elenco di case installate in formato XML, ad esempio:
<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>
Puoi analizzare questo elenco e trovare informazioni dettagliate con opatch, ad esempio:
/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
Un esempio di Windows potrebbe essere:
C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details
Ovviamente quanto sopra deve essere eseguito sul server.
Questo è lo scenario migliore, con installazioni adeguate. Lo scenario peggiore è che le case usano inventari separati o non usano affatto inventario e devi cercare tutti i filesystem sul server per possibili installazioni Oracle.
Risposta
Un altro metodo per visualizzare la versione Oracle è chiamare lutilità dbv. Funziona solo per le installazioni del server di database. La versione di questo strumento dovrebbe sempre corrispondere alla versione del database. Dovresti prima impostare lambiente appropriato (PATH; ORACLE_HOME, LD_LIBRARY_PATH), quindi otterrai qualcosa come
$ $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)
La prima riga contiene la versione
Commenti
- Sembra utilizzabile localmente, esiste un modo integrato per richiamarlo da remoto?
- No, non ' t la pensa così. Su un sistema Linux userei ssh per provare ad accedere al server.
C:\tnsping>>E:\tnspingoutput.txt
. Quindi utilizza un linguaggio di alto livello per estrarre la versione dal file di testo