Je dois déterminer à partir dun programme quelle version dOracle est installée dans chacun des Oracle Homes sur un serveur. Comme il se peut quaucune base de données ne soit encore créée dans la maison, je dois pouvoir le faire en dehors de la base de données (cest-à-dire sans me connecter à la base de données). De plus, il serait hautement préférable de pouvoir le faire à partir dun programme distant.

Il sagit dun programme Windows exécutant .Net (C #, si cela compte).

I Je lis actuellement des clés de registre à distance (en utilisant cette technique: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys ), pour trouver toutes les maisons Oracle selon cette méthode . Cela fonctionne bien, cependant, jai regardé autour de ces clés et je ne vois aucune information sur la version / version exacte.

Le nom dun Oracle Home lui-même nest bien sûr 1) pas un indicateur fiable et 2 ) na pas la version / release exacte (par exemple « 10.2.0.4.0 »). Fondamentalement, je cherche un moyen de comprendre ce que linstallateur Oracle Universal vous dit dans le bouton Produits installés.


Je dois préciser que tous les serveurs exécuteront Windows 2003-2008.

Commentaires

  • Ça va être difficile. Jetez un œil au programme dinstallation dOracle Universal, chaque composant a sa propre version. Vous ne pouvez pas déterminer la version sur une installation Oracle Client entière – du moins pas pour tous les nombres.
  • Je pense que tnaping et Sqlplus fournissent la version réelle de linstallation. Dans Windows, vous pouvez utiliser linvite de commande pour spouler la sortie de tnsping. C:\tnsping>>E:\tnspingoutput.txt. Ensuite, utilisez un langage de haut niveau pour extraire la version du fichier texte
  • @WernfriedDomscheit Premièrement, je ne parle pas de la version du Client , mais des versions du serveur . Deuxièmement, vous pouvez le déterminer, cest le dernier niveau un enfant sous un foyer (les composants individuels sont des enfants de niveau inférieur). Je le fais manuellement avec Universal Installer tout le temps. Je ne ' pas vouloir passer le temps à le faire manuellement tout le temps.
  • Que se passe-t-il lorsque le serveur est installé sur Linux / Unix (ce qui est Je pense que la majorité)? Alors un programme C # ou la lecture du registre naide pas.
  • @WernfriedDomscheit Dans mon cas, ce sont tous des serveurs Windows. Je clarifierai cela dans ma question.

Réponse

Si la base de données a été installée correctement, linventaire central a une liste à leur sujet. Linventaire central sous Windows se trouve à C:\Program Files\Oracle\Inventory. Sur les plates-formes Linux / UNIX, lemplacement de linventaire central se trouve dans /etc/oraInst.loc. Dans linventaire, dans ContentsXML\inventory.xml, il y a une liste des maisons installées au format XML, par exemple:

<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> 

Vous pouvez analyser cette liste et trouver des informations détaillées avec opatch par exemple:

/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 exemple Windows serait:

C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details 

Ce qui précède doit être exécuté sur le serveur bien sûr.

Cest le meilleur des cas, avec des installations appropriées. Dans le pire des cas, les foyers utilisent des inventaires séparés, ou nutilisent aucun inventaire du tout, et vous devez rechercher dans tous les systèmes de fichiers du serveur déventuelles installations Oracle.

Réponse

Une autre méthode pour afficher la version dOracle consiste à appeler lutilitaire dbv. Cela ne fonctionne que pour les installations de serveur de base de données. La version de cet outil doit toujours correspondre à la version de la base de données. Vous devez dabord définir lenvironnement approprié (PATH; ORACLE_HOME, LD_LIBRARY_PATH), puis vous obtiendrez quelque chose comme

 $ $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 première ligne contient la version

Commentaires

  • Cela semble réalisable localement, y a-t-il un moyen intégré de linvoquer à distance?
  • Non, je ne ' Je le pense. Sur un système Linux, jutiliserais ssh pour essayer de me connecter au serveur.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *