确定我正在运行哪个版本的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
并运行SQLPLUS
或TNSPING
这样的实用程序,您将得到两个不可接受的结果之一:
- 您的
PATH
成功parsing可执行文件,并获得一个版本的结果 - 或者,
PATH
没有parsing可执行文件,并且没有得到任何结果。
无论哪种方式,您都可能无视多个客户端安装。
问题#2:即时客户端没有TNSPING,有时不包括SQL * Plus。
如果计算机具有Oracle即时客户端(不是完整的客户端),则不包括TNSPING
, SQLPLUS
是可选的插件。 所以不能依靠这些工具在那里。 此外,即时客户端有时也被安装为解压缩解决scheme,所以没有Oracle Inventory,也没有HKLM。
问题#3:客户端安装使用“自定义”,并没有安装ODBC,OLEDB,ODP.Net和JDBC。
明显的情况下,将不会有ODBC或JDBC自述文件来从中删除版本信息。
解:
即时客户端和oraclient10.dll
共同点是一个名为oraclient10.dll
, oraclient11.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