如何从程序中找到 Oracle 的安装版本和发行版?

RBa*_*ung 4 oracle automation

我需要从程序中确定在服务器上的每个 Oracle 主目录中安装了哪个版本的 Oracle。由于可能尚未在 Home 中创建任何数据库,因此我需要能够在数据库之外执行此操作(即,无需连接到数据库)。此外,能够从远程程序执行此操作将是非常可取的。

这是来自运行 .Net(C#,如果重要的话)的 Windows 程序。

我目前正在读取远程注册表项(使用此技术:https : //stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys),以根据此方法查找所有 Oracle 主目录。这工作正常,但是,我环顾了这些键,并没有看到有关确切版本/发行版的任何信息。

Oracle Home 本身的名称当然是 1) 不是一个可靠的指标,并且 2) 没有确切的版本/发行版(例如“10.2.0.4.0”)。基本上,我正在寻找一种方法来找出 Oracle Universal Installer 在 Installed Products 按钮中告诉您的内容。


我应该澄清一下,所有服务器都将运行 Windows 2003-2008。

Bal*_*app 5

如果数据库主目录安装正确,中央清单就会有一个关于它们的列表。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>
Run Code Online (Sandbox Code Playgroud)

您可以解析此列表,并使用 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
Run Code Online (Sandbox Code Playgroud)

Windows 示例是:

C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details
Run Code Online (Sandbox Code Playgroud)

以上当然需要在服务器上运行。

这是最好的情况,安装正确。最坏的情况是,家庭使用单独的库存,或者根本不使用库存,您必须在服务器上的所有文件系统中搜索可能的 Oracle 安装。