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


70

主题说明了一切:确定我正在运行的oracle客户端的确切版本的最佳方法是什么?我们的客户都在运行Windows。

我发现一个建议,可以不带参数地运行tnsping实用程序,该实用程序会显示版本信息。有没有更好的办法?

客户端安装是否将此信息放置在任何类型的文本文件中?


1
什么才算是“更好的方法”?
skaffman

1
您还可以创建一个仅由组成的批处理文件,tnsping > version.txt并将其分发到所有客户端PC。
丹尼尔·桑顿

2
@skaffman-一种“更好的方式”将是甲骨文的一项正式活动
克里斯

Answers:


37

您可以v$session_connect_info针对当前会话ID(SID来自中的USERENV命名空间SYS_CONTEXT)使用视图。

例如

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

我,是oracle新手,如何从SQLDeveloper中找到“ userenv”?
RaMs_YearnsToLearn 2014年

1
'userenv'是该sys_context函数的特定名称空间,并且是一个常量。
乔什·波德

是否可以通过上面的查询判断是安装了32位还是64位?
唐纳德·李

@DonaldLi-可能来自network_service_banner现场,但我不确定这是否可靠
Josh Bode

32

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


当我运行sqlPlus.exe时,它将给我客户端版本11.0.1.0,而当我连接到数据库时,我会获得服务器版本11.0.3.0(64位)。我可以假设我的客户端是32位的,因为它没有声明64位吗?
TomG 2014年

@TomG:不,你不能。见stackoverflow.com/questions/13188670/...
mmey

1
sqlplus -V SQL * Plus:版本12.2.0.1.0生产
Straff

17

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

我在环境中看到的一个非常常见的问题是,我看到工作站和(应用程序)服务器都具有多个Oracle客户端,有时多达四个,并且可能具有不同的版本和体系结构。如果您依赖PATH和运行类似的实用程序SQLPLUS,则TNSPING您将获得两个不可接受的结果之一:

  • PATH成功解析了可执行文件,或者得到了一个版本结果
  • 或者,PATH无法解析可执行文件,您将不会获得任何结果。

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

问题2:Instant Client没有TNSPING,有时不包括SQL * Plus。

如果计算机具有Oracle Instant Client(而不是完整客户端),TNSPING则不包括在计算机中,它SQLPLUS是可选附件。因此不能依赖那些工具。此外,Instant Client有时是作为解压缩解决方案安装的,因此HKLM中没有Oracle库存,也没有。

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

显然,没有ODBC或JDBC自述文件可以从中获取版本信息。

解:

有一两件事,即时客户端和完整的客户端有一个共同点,就是被称为一个DLL文件oraclient10.dlloraclient11.dll一般:oraclient*.dll。因此,让我们遍历硬盘以找到它们并提取其版本信息。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

注意事项/问题

  • 显然,这需要PowerShell,这是Windows 7+和Server 2008 R2 +中的标准配置。如果您拥有XP(不再使用XP),则可以轻松安装PowerShell。

  • 我没有在8i / 9i或12c上尝试过。如果您运行的是8i / 9i,那么您很有可能也在旧操作系统上,并且没有PowerShell和Heaven帮助。它应该与12c一起使用,因为我看到有这样的文件oraclient12.dll被安装。我还没有Windows 12c客户端可以玩。


1
也可以检查oci.dllWindows上的属性。
Ivan Chau

“您可以看到其中一些是32位的,而其他一些是64位的” –只是因为它们已经安装在一个有用命名的文件夹结构下,但是...默认值为client_1和client_2 ...
oliver-clare

@ oliver-clare,合理的标注。一些额外的PowerShell命令应该能够打印出这些DLL的体系结构。练习留给读者。
约书亚·胡伯

9

在Unix中

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

> 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中的注册表位置变量为INST_LOC

Start > Run > regedit > HKLM > Software > Oracle

检查Inst_loc条目值,它将是软件的安装位置。

您可以使用命令提示符,也可以导航/浏览到oracle主目录,然后cd到bin目录下的lauch sqlplus,它将为您提供客户端版本信息。


7

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

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

6

运行安装程序,单击“已安装的产品...”。这将为您提供客户端安装的所有已安装组件的更详细列表,例如驱动程序,SQL * Plus等。

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

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

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

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

这为您提供了已安装客户端的整体版本。


2
...并且通常每个Oracle主目录都有一个安装程序实例(检查您的path变量),因此您可能需要启动多个安装程序才能查看所有已安装的客户端产品。
mike 2015年

5

转到“控制面板”->“管理工具”,然后打开“数据源(ODBC)”。默认情况下,将打开“用户-DSN”选项卡,单击“添加”,然后将弹出一个对话框:

在此处输入图片说明


如果使用ODBC连接到Oracle,则仅在Windows上有效
Albert Godfrind


2

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

这样,您将获得所需的所有信息...

例如,如果您正在寻找Oracle,则可以执行以下操作:

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

4
我认为这可能会获得服务器的版本,而不是客户端的版本。
FrustratedWithFormsDesigner 2012年

我得到ORA-01039:对视图的基础对象的特权不足。但我相信,如果我获得许可,那您是对的。实际上,问题是针对客户端而不是服务器。抱歉
Tom Stickel 2012年

2

这是另一种(但不一定是“更好”的)方式:

确定您的当前版本

要确定您的PC上安装了哪个Oracle客户端版本,请运行sql *plus连接到DW。文件夹名称可能会因您的Oracle设置而有所不同,但应该相似。要运行sql *plus,请选择 start > programs > Oracle > Oracle - OUDWclient > Application Development > sqlplus。输入您的DW用户名,密码和“ ordj”作为主机名或服务名。这应该通过sqlplus将您连接到DW。此时,您可以编写自己的sql语句以从DW中提取信息(如果您知道sql)。可以在第一行中确定Oracle客户端版本-“ SQL * Plus:10.2.0.1.0版”。

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


1

我假设您想以编程方式执行某些操作。

您可能会考虑使用getenv将值从ORACLE_HOME环境变量中拉出。假设您正在使用C或C ++或Pro * C。


在Windows中,通常不设置ORACLE_HOME-它在注册表中。即使是这样,典型的ORACLE_HOME设置也是您必须解析出版本号的路径(假设是默认安装-您可以将其安装在任何地方),并且该版本(至少10g)仅指定为“ 10.2.0'。
DCookie

是的,这就是我们提取它的方式。
EvilTeach

0

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

1
这并不能说明sqlplus客户端的实际Oracle版本。
艾伯特·戈德弗林德'16

0

您可以通过在cmd上运行此命令sqlplus / nolog来获取oracle客户端的版本。另一种选择是浏览到路径C:\ Program Files \ Oracle \ Inventory并打开“ Inventory.xml”文件,该文件将为您提供如下版本:

<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2019, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>12.2.0.1.4</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>

-4

只需运行此命令:从v $ version选择*


7
这将告诉我服务器的版本,而不是客户端的版本。
克里斯,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.