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

  • Vai ser difícil. Dê uma olhada no instalador Oracle Universal, cada componente tem sua própria versão. Você não pode determinar a versão em uma instalação inteira do Oracle Client – pelo menos não para todos os números.
  • acho que tnaping e Sqlplus fornecem a versão real da instalação. No Windows, você pode usar o prompt de comando para fazer o spool da saída do tnsping. C:\tnsping>>E:\tnspingoutput.txt. Em seguida, use uma linguagem de alto nível para extrair a versão do arquivo de texto
  • @WernfriedDomscheit Primeiro, não estou perguntando sobre a versão do cliente , mas sim as versões do servidor . Em segundo lugar, você pode determiná-lo, é o último nível um filho de um Lar (os componentes individuais são filhos de nível inferior). Eu faço isso manualmente com o Universal Installer o tempo todo. Eu apenas não ' não quero perder tempo fazendo isso manualmente o tempo todo.
  • O que acontece quando o servidor é instalado no Linux / Unix (que é Eu acho que a maioria)? Então, um programa C # ou ler o registro não ajuda.
  • @WernfriedDomscheit No meu caso, todos são servidores Windows. Esclarecerei isso em minha pergunta.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *