Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Бока
Member

Откуда:
Сообщений: 694
Коллеги,

Я нашел некоторый способ определять версии всех Oracle Homes, но этот способ имеет определенные недостатки. Способ следующий:
- на клиент-компьютере ->
- Registry -> HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\inst_loc ->
- идти в указанную в "inst_loc" директорию ->
- затем идти в под-дирректорию "ContentsXML" ->
- затем анализировать текст фаила "inventory.xml".

Вот пример текста этого inventory.xml:

<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 2005 Oracle Corporation. All rights Reserved -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>10.2.0.1.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraClient10g_home1" LOC="F:\oracle\product\10.2.0\client_1" TYPE="O" IDX="2"/>
<HOME NAME="OraDb11g_home1" LOC="E:\Oracle11g\product\db_1" TYPE="O" IDX="3"/>
<HOME NAME="OraClient10g_home3" LOC="F:\oracle\product\10.2.0\client_3" TYPE="O" IDX="5"/>
<HOME NAME="OraDb10g_home1" LOC="E:\oracle\product\10.2.0\db_1" TYPE="O" IDX="1" REMOVED="T"/>
<HOME NAME="OraClient10g_home2" LOC="F:\oracle\product\10.2.0\client_2" TYPE="O" IDX="4" REMOVED="T"/>
</HOME_LIST>
</INVENTORY>

В этом примере OraClient10g_home1, OraDb11g_home1, OraClient10g_home3 это действующие на данном компьютере Оracle Homes, причем инсталлированные в указанном порядке. А два последних OraDb10g_home1, OraClient10g_home2 с пометкой REMOVED="T" были разинсталлированы в указанном порядке.

Правильно ли я предполагаю, что:
- строка "<SAVED_WITH>10.2.0.1.0</SAVED_WITH>" указывает версию default-ного Oracle Home на компе ?
- следующий в списке первым OraClient10g_home1 является default-ным ?

Может быть есть более элегантный и точный способ определения версии КАЖДОГО из инсталированных на компе Oracle Homes а также определения DEFAULT-ного Oracle Home ?
13 мар 08, 11:09    [5404127]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
ERROR MESSAGE
Member

Откуда: Москва
Сообщений: 376
Расскажи-ка нам, друже, что такое с твоей ткочки зрения "DEFAULT-ный Oracle Home"?
И како именно ты собираешься использовать в своей работе
"великое знание" того, что "вот етот хоум" и есть тот самый "DEFAULT-ный Oracle Home"?
13 мар 08, 13:56    [5405523]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Консерва
Member

Откуда:
Сообщений: 2794
Бока
Фигней не страдай, плиз. Спасибо.
13 мар 08, 14:23    [5405745]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
eml78
Member

Откуда:
Сообщений: 648
Бока
Может быть есть более элегантный и точный способ определения версии КАЖДОГО из инсталированных на компе Oracle Homes

На мой взгляд более точный способ - это смотреть реестр (в виндах, в линуксе х.з.)
У меня написано так (на Delphi)

procedure ReadHomes(Homes: TStrings);
var
  i: integer;
  Reg: TRegistry;
  List: TStringList;
  S: string;
begin
  Homes.Clear;
  Reg := TRegistry.Create(KEY_READ);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('\Software\Oracle') then
    begin
      List := TStringList.Create;
      try
        Reg.GetKeyNames(List);
        for i := 0 to List.Count - 1 do
        begin
          S := Copy(List[i], 1, 4);
          if SameText(S, 'HOME') or SameText(S, 'KEY_') then
            if Reg.OpenKeyReadOnly('\Software\Oracle\' + List[i]) then
              Homes.Add(Reg.ReadString('ORACLE_HOME_NAME') + '=' + Reg.ReadString('ORACLE_HOME'));
        end;
      finally
        List.Free;
      end;
    end;
  finally
    Reg.Free;
  end;
end;
Далее зная путь, версию можно определить по версии файлов (например, для клиентов см. %ORACLE_HOME%\Bin\oci.dll)

Бока
а также определения DEFAULT-ного Oracle Home ?

А тут вопрос в том, что ты под этим понимаешь.
Если опять же речь о клиенте, то DEFAULT-ный Oracle Home это будет тот HOME, исполняемые файлы которого при вызове sqlplus или exp будут использоваться (и тут ответ очевиден - см. переменную PATH, тот путь который идет раньше и будет использован (кстати именно так оракловый инсталятор и трактует команду сделать Home Default - меняет порядок путей в переменной PATH).
13 мар 08, 15:01    [5406115]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
ERROR MESSAGE
Расскажи-ка нам, друже, что такое с твоей ткочки зрения "DEFAULT-ный Oracle Home"?
И како именно ты собираешься использовать в своей работе
"великое знание" того, что "вот етот хоум" и есть тот самый "DEFAULT-ный Oracle Home"?


зря вы так на него.
например, microsoft odbc driver for oracle как-то определяет с каким home работать, но точно не по ключу DEFAULT_HOME. нужно смотреть что делает утилита Home selector ..
13 мар 08, 15:14    [5406219]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Borland
Member

Откуда: $HOME
Сообщений: 15839
Pir
нужно смотреть что делает утилита Home selector ..

Где?? В 10-ке???
-----
Все великие дела совершаются в командной строке
13 мар 08, 15:16    [5406235]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
Borland
Pir
нужно смотреть что делает утилита Home selector ..

Где?? В 10-ке???
-----
Все великие дела совершаются в командной строке

нет, это всё к 9 версии относится
13 мар 08, 15:17    [5406243]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Borland
Member

Откуда: $HOME
Сообщений: 15839
Бока

<HOME NAME="OraClient10g_home1" LOC="F:\oracle\product\10.2.0\client_1" TYPE="O" IDX="2"/>
<HOME NAME="OraDb11g_home1" LOC="E:\Oracle11g\product\db_1" TYPE="O" IDX="3"/>
<HOME NAME="OraClient10g_home3" LOC="F:\oracle\product\10.2.0\client_3" TYPE="O" IDX="5"/>
<HOME NAME="OraDb10g_home1" LOC="E:\oracle\product\10.2.0\db_1" TYPE="O" IDX="1" REMOVED="T"/>
<HOME NAME="OraClient10g_home2" LOC="F:\oracle\product\10.2.0\client_2" TYPE="O" IDX="4" REMOVED="T"/>
</HOME_LIST>
</INVENTORY>

В упор не вижу 9-ку...ослеп наверно
-----
Все великие дела совершаются в командной строке
13 мар 08, 15:22    [5406295]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
это был пример существования понятия default home, внимательнее читайте :)
13 мар 08, 15:26    [5406343]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Borland
Member

Откуда: $HOME
Сообщений: 15839
Pir
это был пример существования понятия default home, внимательнее читайте :)

Да нету такого понятия. Скорее, есть текущий хоум - тот, путь к которому указан первым из всех оракловых в переменной PATH
-----
Все великие дела совершаются в командной строке
13 мар 08, 15:36    [5406430]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Бока
Member

Откуда:
Сообщений: 694
eml78
Бока
Может быть есть более элегантный и точный способ определения версии КАЖДОГО из инсталированных на компе Oracle Homes

На мой взгляд более точный способ - это смотреть реестр (в виндах, в линуксе х.з.)
У меня написано так (на Delphi)

procedure ReadHomes(Homes: TStrings);
var
  i: integer;
  Reg: TRegistry;
  List: TStringList;
  S: string;
begin
  Homes.Clear;
  Reg := TRegistry.Create(KEY_READ);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('\Software\Oracle') then
    begin
      List := TStringList.Create;
      try
        Reg.GetKeyNames(List);
        for i := 0 to List.Count - 1 do
        begin
          S := Copy(List[i], 1, 4);
          if SameText(S, 'HOME') or SameText(S, 'KEY_') then
            if Reg.OpenKeyReadOnly('\Software\Oracle\' + List[i]) then
              Homes.Add(Reg.ReadString('ORACLE_HOME_NAME') + '=' + Reg.ReadString('ORACLE_HOME'));
        end;
      finally
        List.Free;
      end;
    end;
  finally
    Reg.Free;
  end;
end;
Далее зная путь, версию можно определить по версии файлов (например, для клиентов см. %ORACLE_HOME%\Bin\oci.dll)
Спасибо, похоже это то что надо, только надо будет переделать на VB и PB.

Может быть подскажете каким API надо пользоваться, чтобы прочитать номер версии из проперти файла oci.dll ?

eml78
Бока
а также определения DEFAULT-ного Oracle Home ?

А тут вопрос в том, что ты под этим понимаешь.
Если опять же речь о клиенте, то DEFAULT-ный Oracle Home это будет тот HOME, исполняемые файлы которого при вызове sqlplus или exp будут использоваться (и тут ответ очевиден - см. переменную PATH, тот путь который идет раньше и будет использован (кстати именно так оракловый инсталятор и трактует команду сделать Home Default - меняет порядок путей в переменной PATH).
Да, речь именно о клиенте.

Может быть подскажете каким API надо пользоваться, чтобы прочитать значение system variable "path" в Windows ?
А может быть даже есть API, который может выделить из значения этой переменной все Oracle Home директории ?
13 мар 08, 15:41    [5406482]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Бока
Member

Откуда:
Сообщений: 694
ERROR MESSAGE
Расскажи-ка нам, друже, что такое с твоей ткочки зрения "DEFAULT-ный Oracle Home"?
Смотри пост eml78 и мой коммент к нему.

ERROR MESSAGE
И како именно ты собираешься использовать в своей работе
Мы вызываем из аппликаций на VB и PB Oracle Import утилиту (imp.exe). В определенных случаях несответствия Oracle версии, в которой был сделан Export файл, версии Oracle Client-а и версии базы данных на Oracle Server-е, Oracle Import утилита может падать.

ERROR MESSAGE
"великое знание" того, что "вот етот хоум" и есть тот самый "DEFAULT-ный Oracle Home"?
В указанных выше случаях наша аппликация должна сообщить пользователю о несответствии версий и выдать соответствующие рекомендации.
13 мар 08, 15:58    [5406612]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
eml78
Member

Откуда:
Сообщений: 648
Бока
Может быть подскажете каким API надо пользоваться, чтобы прочитать номер версии из проперти файла oci.dll ?

Это вам MSDN курить надо в сторону
GetFileVersionInfo
VerQueryValue и т.п.
Бока
Может быть подскажете каким API надо пользоваться, чтобы прочитать значение system variable "path" в Windows ?

Опять же MSDN:
GetEnvironmentVariable
\System\CurrentControlSet\Control\Session Manager\Environment
Там есть ньюансы для разных платформ.
Бока
А может быть даже есть API, который может выделить из значения этой переменной все Oracle Home директории ?

Еще можно использовать компоненты типа ODAC - они сами часть проблем решают.

А еще проще указывайте полный путь для утилит и тогда вам не придется парится с дефолтным HOME.

Кстати вот интересный вопрос а когда в sqlplus путь пишешь так
SQL> @?/rdbms/admin/xdbpatch
То для ? какой путь берется (если установлено несколько серверов на одном компе)?
14 мар 08, 12:35    [5410181]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
eml78
Кстати вот интересный вопрос а когда в sqlplus путь пишешь так
SQL> @?/rdbms/admin/xdbpatch
То для ? какой путь берется (если установлено несколько серверов на одном компе)?
Тот, который соответствует Oracle Home, из которого был вызван SQL*Plus
Разве нет?
14 мар 08, 12:50    [5410309]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Бока
Member

Откуда:
Сообщений: 694
eml78
Бока
Может быть подскажете каким API надо пользоваться, чтобы прочитать номер версии из проперти файла oci.dll ?

Это вам MSDN курить надо в сторону
GetFileVersionInfo
VerQueryValue и т.п.
Бока
Может быть подскажете каким API надо пользоваться, чтобы прочитать значение system variable "path" в Windows ?

Опять же MSDN:
GetEnvironmentVariable
\System\CurrentControlSet\Control\Session Manager\Environment
Там есть ньюансы для разных платформ.
Бока
А может быть даже есть API, который может выделить из значения этой переменной все Oracle Home директории ?

Еще можно использовать компоненты типа ODAC - они сами часть проблем решают.
Спасибо.

eml78
А еще проще указывайте полный путь для утилит и тогда вам не придется парится с дефолтным HOME.
Хорошая мысль. Как раз для того, чтобы выяснить полный путь из Home директории с подходящей для Export файла версией Oracle, и понадобятся вышеуказанные API.

eml78
Кстати вот интересный вопрос а когда в sqlplus путь пишешь так
SQL> @?/rdbms/admin/xdbpatch
То для ? какой путь берется (если установлено несколько серверов на одном компе)?
Я проверил: оказалось именно так, как написал SQL*Plus выше.
19 мар 08, 15:12    [5430688]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
dba123
Guest
автор
Коллеги,

Я нашел некоторый способ определять версии всех Oracle Homes, но этот способ имеет определенные недостатки. Способ следующий:
также не без недостатков:
select * from sysman.MGMT_INV_CONTAINER;
19 мар 08, 16:22    [5431321]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
Proteus
Member

Откуда:
Сообщений: 1348
всегда подходил к этому вопросу так
1) список и версии из реестра
2) Default_home - тот который левее всех остальных в переменной окружения path
19 мар 08, 16:57    [5431604]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
АС Пушкин
Guest
Proteus

тот который левее


Левее всех левЫх. 0_о
19 мар 08, 17:47    [5432115]     Ответить | Цитировать Сообщить модератору
 Re: Как определить какова версия каждого из Oracle Homes на компе и какой из них default ?  [new]
SergNsk
Member

Откуда: Новосибирск
Сообщений: 311
Я еще такое находил, но не пользовался
Oracle Locator Express
http://www.dbmotive.com/oracle_home_selector.php
20 мар 08, 06:38    [5433541]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить