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
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.
C:\tnsping>>E:\tnspingoutput.txt
. Ensuite, utilisez un langage de haut niveau pour extraire la version du fichier texte