确定我正在运行哪个版本的Oracle客户端的最佳方式是什么?

这个主题说了这一切:什么是最好的方式来确定我正在运行的Oracle客户端的确切版本? 我们的客户都在运行Windows。

我发现一个build议,运行tnsping实用程序,没有参数,它显示版本信息。 有没有更好的办法?

客户端安装是否将这些信息放在任何文本文件中?

TNSPing命令行将显示版本。 同样,sqlPlus.exe将打印其版本。 您也可以转到客户端安装的“relnotes”目录中的自述文件。 版本10.2有一个名为README_jdbc.txt的文件,例如,它会告诉你哪个版本已经安装。

您可以针对当前会话标识( SYS_CONTEXT USERENV命名空间的SYS_CONTEXT )使用v$session_connect_info视图。

例如

 SELECT DISTINCT s.client_version FROM v$session_connect_info s WHERE s.sid = SYS_CONTEXT('USERENV', 'SID'); 

在Unix中

如果您不知道安装的Oracle产品的位置或版本,可以从通常logging在/etc/oraInst.loc中的清单中find它

 > cat /etc/oraInst.loc inventory_loc=/export/oracle/oraInventory **--> Inventory location** inst_group=dba > cd /export/oracle/oraInventory > cd ContentsXML 

这里查找文件inventory.xml

 > cat inventory.xml <?xml version="1.0" standalone="yes" ?> <!-- Copyright (c) 1999, 2010, Oracle. All rights reserved. --> <!-- Do not modify the contents of this file by hand. --> <INVENTORY> <VERSION_INFO> <SAVED_WITH>11.2.0.2.0</SAVED_WITH> <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER> </VERSION_INFO> <HOME_LIST> <HOME NAME="OraDB_11G" LOC="/export/oracle/product/11.2.0.2" TYPE="O" IDX="2"> 

一旦你知道安装位置

 export ORACLE_HOME=full path to install location export ORACLE_HOME=/export/oracle/product/11.2.0.2 export PATH=$ORACLE_HOME/bin:$PATH 

一个简单的“sqlplus”会给你安装客户端的版本。

 > sqlplus SQL*Plus: Release 11.2.0.1.0 Production on Fri Mar 23 14:51:09 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. Enter user-name: 

在上面的例子中,Oracle客户端的版本是11.2.0.1

在Windows中

Windows中的registry位置variables是INST_LOC

 Start > Run > regedit > HKLM > Software > Oracle 

检查将作为软件安装位置的Inst_loc条目值。

您可以使用命令提示符,或者您可以导航/探索到oracle的家庭位置,然后cd到bin目录来启动sqlplus,它会给你的客户端版本信息。

运行安装程序,单击“已安装的产品…”。 这将给你一个更详细的客户端安装的所有组件的列表,例如,驱动程序,SQL * Plus等。

典型的Oracle安装会将库存信息存储在C:\ Program Files \ Oracle \ Inventory中,但是确定安装的版本不仅仅是打开文本文件的问题。

这是AFAIK的权威,并显示可能已经应用的任何补丁(运行实用程序不会)。

编辑:CLI选项将使用OPatch实用程序:

 c:\> path=%path%;<path to OPatch directory in client home, eg, C:\oracle\product\10.2.0\client_1\OPatch> c:\>set ORACLE_HOME=<oracle home directory of client, eg, C:\Oracle\product\10.2.0\client_1> c:\>opatch lsinventory 

这给你安装的客户端的整体版本。

问题#1:安装了多个Oracle客户端。

我在我的环境中看到的一个非常常见的问题是,我看到包含多个Oracle客户端的工作站和(app)服务器,有时多达四个,可能还有不同的版本和体系结构。 如果您依赖PATH并运行SQLPLUSTNSPING这样的实用程序,您将得到两个不可接受的结果之一:

  • 您的PATH成功parsing可执行文件,并获得一个版本的结果
  • 或者, PATH没有parsing可执行文件,并且没有得到任何结果。

无论哪种方式,您都可能无视多个客户端安装。

问题#2:即时客户端没有TNSPING,有时不包括SQL * Plus。

如果计算机具有Oracle即时客户端(不是完整的客户端),则不包括TNSPINGSQLPLUS是可选的插件。 所以不能依靠这些工具在那里。 此外,即时客户端有时也被安装为解压缩解决scheme,所以没有Oracle Inventory,也没有HKLM。

问题#3:客户端安装使用“自定义”,并没有安装ODBC,OLEDB,ODP.Net和JDBC。

明显的情况下,将不会有ODBC或JDBC自述文件来从中删除版本信息。

解:

即时客户端和oraclient10.dll共同点是一个名为oraclient10.dlloraclient11.dll的DLL文件,通常是: oraclient*.dll 。 所以让我们遍历硬盘find它们并提取它们的版本信息。 PowerShell在这一点上是惊人的,可以在一行中做到这一点,让我想起家乡的Unix。 所以你可以通过编程或者甚至是远程来完成。

这里是单线(抱歉右边的滚动,但是这是单线的性质,呃?)。 假设您已经在PowerShell中:

 gci C:\,D:\ -recurse -filter 'oraclient*.dll' -ErrorAction SilentlyContinue | %{ $_.VersionInfo } | ft -Property FileVersion, FileName -AutoSize 

如果你不在PowerShell中,即你只是在一个CMD shell中,那么没有问题,只需调用powershell " ... " ,如下所示:

 powershell "gci C:\,D:\ -recurse -filter 'oraclient*.dll' -ErrorAction SilentlyContinue | %{ $_.VersionInfo } | ft -Property FileVersion, FileName -AutoSize" 

示例输出

这是我的一些系统的一些输出。 这个坏公民有3个Oracle 11.2.0.3客户端。 你可以看到其中一些是32位的,其他的是64位的:

 FileVersion FileName ----------- -------- 11.2.0.3.0 Production C:\NoSync\app\oracle\product\11.2\client_1\bin\oraclient... 11.2.0.3.0 Production C:\oracle\product\11.2.0\client_1\bin\oraclient11.dll 11.2.0.3.0 Production C:\oracle64\product\11.2.0\client_1\bin\oraclient11.dll 

另一个系统,这个在D上有10g客户端:\

 FileVersion FileName ----------- -------- 10.2.0.4.0 Production D:\oracle\product\10.2\BIN\oraclient10.dll 

注意事项/问题

  • 这显然需要Windows 7 +和Server 2008 R2 +中的标准PowerShell。 如果你有XP(你不应该再有),你可以轻松地安装PowerShell。

  • 我还没有尝试过8i / 9i或12c。 如果你正在运行8i / 9i,那么你很有可能在一个老的操作系统上运行,而且没有PowerShell和Heaven来帮助你。 它应该与12C,因为我看到有这样的文件oraclient12.dll得到安装。 我只是没有一个Windows 12C客户端玩。

您应该在select * from v$version;select * from v$version;末尾加上一个分号select * from v$version;

像这样你会得到你需要的所有信息…

如果您正在寻找Oracle,您可以这样做:

 SQL> select * from v$version where banner like 'Oracle%'; 

这是另一个,虽然不一定“更好”,方式:

确定您的当前版本

要确定在PC上安装了哪个Oracle客户端版本,请运行sql * plus连接到DW。 文件夹名称可能会根据您的Oracle安装程序而有所不同,但应相似。 要运行sql * plus,selectstart > programs > Oracle > Oracle - OUDWclient > Application Development > sqlplus 。 input您的DW用户名,密码和'ordj'作为主机名或服务名称。 这应该通过sqlplus连接到DW。 在这一点上,你可以编写自己的sql语句来从DW中获取信息(如果你知道sql的话)。 Oracle客户端版本可以在第一行中确定 – “SQL * Plus:版本10.2.0.1.0”。

[参考] Oracle客户端信息http://www.ohio.edu/technology

您可以在SQL Developer或SQLPLUS中的命令提示符中使用以下命令来查找版本号。

 select * from v$version; 

在我的情况下,它给了我下面提到的信息。

 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production "CORE 11.2.0.1.0 Production" TNS for 64-bit Windows: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production 

在Windows中 – >使用Command Promt:

tnsping本地主机

它显示版本,如果安装了32位的64位客户端,例如:

适用于64位Windows的TNS Ping实用程序:版本10.2.0.4.0 – 于03-MAR-2015 16:47:26生产

资料来源: https : //decipherinfosys.wordpress.com/2007/02/10/checking-for-oracle-client-version-on-windows/

转到“控制面板” – >“pipe理工具”,然后打开“数据源(ODBC)”。 默认情况下,打开“User-DSN”标签,点击“Add”,popup对话框:

在这里输入图像说明

我假设你想以编程方式做些事情。

您可以考虑使用getenv将值从ORACLE_HOME环境variables中提取出来。 假设你正在谈论C或C ++或Pro * C。

转到ORACLE_HOME / bin并运行“ file sqlplus ”。 看下面的输出。

 64-Bit:- cd /tech/oracle/product/v11/bin $ file sqlplus sqlplus: **ELF 64-bit** LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped 32-Bit $ cd /tech/oracle/product/11204_32bit/bin $ file sqlplus sqlplus: **ELF 32-bit** LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped 

运行这个:select * from v $ version