主题说明了一切:确定我正在运行的oracle客户端的确切版本的最佳方法是什么?我们的客户都在运行Windows。
我发现一个建议,可以不带参数地运行tnsping实用程序,该实用程序会显示版本信息。有没有更好的办法?
客户端安装是否将此信息放置在任何类型的文本文件中?
Answers:
您可以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');
'userenv'
是该sys_context
函数的特定名称空间,并且是一个常量。
network_service_banner
现场,但我不确定这是否可靠
TNSPing命令行将显示版本。同样,sqlPlus.exe将打印其版本。您也可以转到客户端安装的“ relnotes”目录中的自述文件。例如,版本10.2的文件名为README_jdbc.txt,它将告诉您已安装的版本。
问题#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.dll
,oraclient11.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客户端可以玩。
oci.dll
Windows上的属性。
如果您不知道安装的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中的注册表位置变量为INST_LOC
Start > Run > regedit > HKLM > Software > Oracle
检查Inst_loc条目值,它将是软件的安装位置。
您可以使用命令提示符,也可以导航/浏览到oracle主目录,然后cd到bin目录下的lauch sqlplus,它将为您提供客户端版本信息。
您可以在命令提示符下的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
运行安装程序,单击“已安装的产品...”。这将为您提供客户端安装的所有已安装组件的更详细列表,例如驱动程序,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
这为您提供了已安装客户端的整体版本。
在Windows中->使用命令提示符:
tnsping本地主机
它显示版本以及是否已安装32位或64位客户端,例如:
适用于64位Windows的TNS Ping实用工具:版本10.2.0.4.0-于2015年3月3日生产16:47:26
资料来源:https : //decipherinfosys.wordpress.com/2007/02/10/checking-for-oracle-client-version-on-windows/
您应该在末尾加上分号select * from v$version;
。
这样,您将获得所需的所有信息...
例如,如果您正在寻找Oracle,则可以执行以下操作:
SQL> select * from v$version where banner like 'Oracle%';
这是另一种(但不一定是“更好”的)方式:
确定您的当前版本
要确定您的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
转到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
您可以通过在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>