Preciso determinar em um programa qual versão do Oracle está instalada em cada um dos Oracle Homes em um servidor. Como pode não haver nenhum banco de dados criado na Página inicial ainda, preciso poder fazer isso fora do banco de dados (ou seja, sem me conectar ao banco de dados). Além disso, seria altamente preferível poder fazer isso de um programa remoto.
Isso é de um programa do Windows executando .Net (C #, se for o caso).
I estou lendo chaves de registro remotas (usando esta técnica: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ), para encontrar todos os Oracle Homes de acordo com este método . Isso funciona bem, no entanto, eu olhei em volta dessas chaves e não vi nenhuma informação sobre a versão / lançamento exatos.
O nome de um Oracle Home em si é, obviamente, 1) não um indicador confiável e 2 ) não tem a versão / liberação exata (por exemplo “10.2.0.4.0”). Basicamente, estou procurando uma maneira de descobrir o que o Oracle Universal Installer informa no botão Produtos Instalados.
Devo esclarecer, todos os servidores estarão executando o Windows 2003-2008.
Comentários
Resposta
Se os bancos de dados foram instalados corretamente, o inventário central tem uma lista sobre eles. O inventário central no Windows está localizado em C:\Program Files\Oracle\Inventory
. Em plataformas Linux / UNIX, a localização do inventário central pode ser encontrada em /etc/oraInst.loc
. No inventário, em ContentsXML\inventory.xml
, há uma lista de casas instaladas em formato XML, por exemplo:
<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>
Você pode analisar esta lista e encontrar informações detalhadas com opatch, por exemplo:
/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
Um exemplo do Windows seria:
C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details
O acima precisa ser executado no servidor, é claro.
Este é o melhor cenário, com instalações adequadas. Na pior das hipóteses, as casas usam inventários separados ou não usam nenhum inventário, e você precisa pesquisar todos os sistemas de arquivos no servidor para possíveis instalações do Oracle.
Resposta
Outro método para exibir a versão do Oracle é chamar o utilitário dbv. Isso funciona apenas para instalações de servidor de banco de dados. A versão desta ferramenta deve sempre corresponder à versão do banco de dados. Você deve definir o ambiente apropriado primeiro (PATH; ORACLE_HOME, LD_LIBRARY_PATH), então você obterá algo como
$ $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)
A primeira linha contém a versão
Comentários
- Isso parece viável localmente. Existe alguma maneira embutida de invocá-lo remotamente?
- Não, eu não ' t pensa assim. Em um sistema Linux, eu usaria ssh para tentar fazer o login no servidor.
C:\tnsping>>E:\tnspingoutput.txt
. Em seguida, use uma linguagem de alto nível para extrair a versão do arquivo de texto