サーバー上の各OracleホームにインストールされているOracleのバージョンをプログラムから判別する必要があります。ホームにはまだデータベースが作成されていない可能性があるため、データベースの外部で(つまり、データベースに接続せずに)これを実行できる必要があります。また、リモートプログラムからこれを実行できることが非常に望ましいでしょう。

これは、.Net(重要な場合はC#)を実行しているWindowsプログラムからのものです。

I現在、リモートレジストリキーを読み取っており(この手法を使用: https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys )、に従ってすべてのOracleホームを検索しています。 このメソッド。これは正常に機能しますが、これらのキーを調べたところ、正確なバージョン/リリースに関する情報は見当たりません。

Oracle Home自体の名前はもちろん1)信頼できる指標ではなく2 )正確なバージョン/リリース(たとえば「10.2.0.4.0」)がありません。基本的に、Oracle UniversalInstallerが[インストールされた製品]ボタンに何を表示するかを理解する方法を探しています。


明確にする必要があります。すべてのサーバーで、Windows2003-2008が実行されます。

コメント

  • 難しいでしょう。 Oracle Universalインストーラを見てください。各コンポーネントには、独自のバージョンがあります。 OracleClientのインストール全体でバージョンを判別することはできません。少なくともすべての番号についてはそうではありません。
  • tnapingとSqlplusがインストールの実際のバージョンを提供すると思います。 Windowsでは、コマンドプロンプトを使用して、tnspingの出力をスプールできます。 C:\tnsping>>E:\tnspingoutput.txt。次に、高級言語を使用してテキストファイルからバージョンを抽出します。
  • @WernfriedDomscheitまず、クライアントのバージョンではなく、サーバーのバージョンについて質問します。第二に、あなたはそれを決定できます、それはホームの下の最後のレベルの1人の子供です(個々のコンポーネントはより低いレベルの子供です)。私はいつもUniversalInstallerを使って手動でそれを行っています。 '常に手動で行うのに時間を費やしたくないだけです。
  • サーバーがLinux / Unixにインストールされているとどうなりますか(大多数だと思います)?その場合、C#プログラムやレジストリの読み取りは役に立ちません。
  • @WernfriedDomscheit私の場合、これらはすべてWindowsサーバーです。質問でそれを明確にします。

回答

データベースホームが適切にインストールされている場合、中央インベントリそれらについてのリストがあります。 Windowsの中央インベントリは、C:\Program Files\Oracle\Inventoryにあります。 Linux / UNIXプラットフォームでは、中央インベントリの場所は/etc/oraInst.locにあります。インベントリのContentsXML\inventory.xmlには、インストールされている家のリストがXML形式で表示されます。例:

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

このリストを解析して、たとえば次のようにopatchを使用して詳細情報を見つけることができます。

/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 

Windowsの例は次のようになります。

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

もちろん、上記はサーバー上で実行する必要があります。

これは、適切にインストールされた最良のシナリオです。最悪のシナリオは、家が別々の在庫を使用するか、在庫をまったく使用せず、サーバー上のすべてのファイルシステムでOracleのインストールの可能性を検索する必要があることです。

回答

Oracleバージョンを表示する別の方法は、dbvユーティリティを呼び出すことです。これは、データベースサーバーのインストールでのみ機能します。このツールのバージョンは、常にデータベースのバージョンと一致している必要があります。最初に適切な環境(PATH; ORACLE_HOME、LD_LIBRARY_PATH)を設定する必要があります。そうすると、次のようになります。

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

最初の行にはリリースが含まれています

コメント

  • これはローカルで機能するように見えますが、リモートで呼び出す組み込みの方法はありますか?
  • いいえ、ありません' tはそう思います。 Linuxシステムでは、sshを使用してサーバーへのログインを試みます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です