Какой лучший способ определить, какую версию клиента Oracle я использую?
Субъект говорит сам за себя: как лучше определить точную версию клиента Oracle, на котором я работаю? Все наши клиенты работают под управлением Windows.
Я нашел одно предложение запустить утилиту tnsping без параметров, которая отображает информацию о версии. Есть ли способ лучше?
Устанавливает ли клиент, помещает эту информацию в какой-либо текстовый файл?
13 ответов
Вы можете использовать v$session_connect_info
просмотр с идентификатором текущей сессии (SID
от USERENV
пространство имен в SYS_CONTEXT
).
например
SELECT
DISTINCT
s.client_version
FROM
v$session_connect_info s
WHERE
s.sid = SYS_CONTEXT('USERENV', 'SID');
Командная строка TNSPing покажет версию. Аналогично, sqlPlus.exe напечатает свою версию. Вы также можете перейти к файлам readme в каталоге 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 Inventory и ничего.
Проблема № 3: Клиент был установлен с использованием "Custom", а ODBC, OLEDB, ODP.Net и JDBC не были установлены.
Очевидный случай, не будет ODBC или JDBC-файла readme для очистки информации о версии.
Решение:
Единственное, что объединяет мгновенный клиент и полный клиент, - это файл 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, то нет проблем, просто позвоните 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
Другая система, эта имеет 10g клиента на D:\
FileVersion FileName
----------- --------
10.2.0.4.0 Production D:\oracle\product\10.2\BIN\oraclient10.dll
Предостережения / Вопросы
Это, очевидно, требует PowerShell, который является стандартным в Windows 7+ и Server 2008 R2+. Если у вас есть XP (что вам больше не нужно), вы можете легко установить PowerShell.
Я не пробовал это на 8i/9i или 12c. Если вы работаете с 8i/9i, то есть большая вероятность, что вы работаете и на старой ОС, и PowerShell и Heaven вам не помогут. Должен работать с 12с, так как вижу там такой файл
oraclient12.dll
это устанавливается. У меня просто нет клиента для Windows 12c, с которым можно играть.
В 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 - это INST_LOC
Start > Run > regedit > HKLM > Software > Oracle
Проверьте значение записи Inst_loc, которое будет местом установки программного обеспечения.
Вы можете использовать командную строку или вы можете перейти / исследовать домашнее местоположение оракула, а затем перейдите в каталог cd to bin, чтобы запустить lauch sqlplus, который предоставит вам информацию о версии клиента.
Вы можете использовать следующую команду в 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
Запустите установщик, нажмите "Установленные продукты...". Это даст вам более подробный список всех установленных компонентов клиентской установки, например, драйверов, 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 localhost
Показывает версию и если установлен 32 или 64 битный клиент, например:
Утилита TNS Ping для 64-битных Windows: версия 10.2.0.4.0 - выпуск 3 марта 2015 г. 16:47:26
Источник: https://decipherinfosys.wordpress.com/2007/02/10/checking-for-oracle-client-version-on-windows/
Перейдите в "Панель управления" -> "Администрирование" и откройте "Источники данных (ODBC)". По умолчанию откроется вкладка "Пользователь-DSN", нажмите "Добавить" и появится диалоговое окно:
Вы должны поставить точку с запятой в конце select * from v$version;
,
Таким образом, вы получите всю необходимую информацию...
Если вы ищете только Oracle, например, вы можете сделать как:
SQL> select * from v$version where banner like 'Oracle%';
Это другой, хотя и не обязательно "лучший" способ:
Определение вашей текущей версии
Чтобы определить, какая версия клиента Oracle установлена на вашем компьютере, запустите sql
*
плюс для подключения к DW. Имена папок могут несколько отличаться в зависимости от настроек Oracle, но должны совпадать. Запустить sql*
плюс выбратьstart > programs > Oracle > Oracle - OUDWclient > Application Development > sqlplus
, Введите имя пользователя DW, пароль и 'ordj' для имени хоста или имени службы. Это должно соединить вас с DW через sqlplus. На этом этапе вы можете написать свои собственные операторы SQL для извлечения информации из DW (если вы знали SQL). Версия клиента Oracle может быть определена в первой строке - "SQL*Plus: выпуск 10.2.0.1.0".
[Ссылка] Информация о клиенте Oracle http://www.ohio.edu/technology
Я предполагаю, что вы хотите сделать что-то программно.
Вы можете рассмотреть возможность использования getenv для извлечения значения из переменной среды ORACLE_HOME. Предполагая, что вы говорите на C или C++ или Pro*C.
Вы можете получить версию клиента oracle, выполнив эту команду sqlplus /nolog в cmd. Другой альтернативой будет перейти по пути 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>
Перейдите в ORACLE_HOME/bin и запуститефайл 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