(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Вызов 32-bit внешних процедур из PL/SQL на Oracle 11g R2 64-bit

Источник: habrahabr
AndyBW

Сразу скажу, что теперь можно одновременно использовать как 32 так и 64 разрядные внешние процедуры, а разобравшись в проблеме конфигурирование выполняется весьма несложно.

Столкнувшись с необходимостью организовать работу библиотек используемых ранее на 32 разрядом Oracle обнаружил, что в новой версии Oracle данный аспект сильно изменен в отличие от предшествующих версий.


Конфигурирование было выполнено для следующих компонентов:
• Windows 2008 R2 64-bit
• Oracle 11g R2 64-bit
• Oracle Instant Client 11.2.0.2 32-bit

Вот перечень некоторых отличий настройки от предшествующих версий Oracle:
• extproc32.exe - теперь не используется;
• оснастку Instant Client теперь необходимо устанавливать в отдельный ORACLE_HOME;
• появился новый конфигурационный файл настройки extproc - %ORACLE_HOME%\hs\admin\extproc.ora;
• файлы логов LISTNER размещаются в - %ORACLE_HOME%\diag\tnslsnr\[hostname].

Приступим к настройке Oracle


Первое, что необходимо сделать - выполнить выборочную установку 32-bit Oracle Instant Client. Достаточно выбрать для установки: Oracle Database Utilities и Oracle Net Listener. В качестве пути установки я установил: [диск]:\oracle\product\11.2.0\client_32. В завершении установки автоматически будет запущен Net Configuration Assistant - которым, рекомендуется воспользоваться, что бы избежать впоследствии возможных ошибок, как например использование утилиты netca, которая будет запущена для конфигурирования прослушивателя (LISTNER) из ORACLE_HOME по умолчанию, а он окажется 64-разрядный.

Опишу процесс настройки нового прослушивателя через Net Configuration Assistant:

• В окне конфигурации выбрать пункт: Listener configuration и далее
• Выбрать Add и далее
• Задать имя LISTENER_32 и далее
• Из колонки Selected Protocols убрать протокол TCP и добавить протокол IPC и далее
• Ввести в поле IPC Key value: IPC_EXT32 и далее
• Отказаться от конфигурирования другого прослушивателя и далее, далее, готово

После завершения работы Net Configuration Assistant, можно проверить сформировавшийся файл конфигурации прослушивателя %ORACLE_HOME%\client_32\NETWORK\ADMIN\listener.ora, выглядеть он должен так, как указано в примере, разве что за исключением пути до директории Oracle:

LISTENER_32 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = IPC_EXT32))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
  )

SID_LIST_LISTENER_32 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = callout32)
      (ORACLE_HOME = [диск]:\oracle\product\11.2.0\client_32)
      (PROGRAM = extproc)
    )
  )

ADR_BASE_LISTENER_32 = [диск]:\oracle

В завершении конфигурации прослушивателя необходимо сконфигурировать сервисы, выполнив, например, services.msc. Вновь созданный прослушиватель, по умолчанию не запускается автоматически, что логично будет исправить.
В том числе, нужно дополнить файл конфигурации tnsnames.ora, причем это можно сделать в основном инстансе установленной БД, например: %ORACLE_HOME%\dbhome_1\NETWORK\ADMIN\tnasnames.ora. Файл конфигурации необходимо дополнить следующей записью:

extproc_connection_data32b =
     (DESCRIPTION =
        (ADDRESS = (PROTOCOL = IPC)(KEY = IPC_EXT32))
        (CONNECT_DATA =
        (SID = callout32)
        )
     )

Последнее, о чем стоит упомянуть в описании системной конфигурации - это новый файл конфигурации extproc.ora. Данный файл необходимо сконфигурировать как в 32-bit, так и в 64-bit инстансах Oracle. Конфигурационный файл, оснащен вполне исчерпывающим описанием конфигурации, и я лишь приведу пример настройки. Самое простое, это указать значение параметра EXTPROC_DLLS=ANY; либо указать точный путь, используя опцию ONLY:[MY_PATH\my.dll].

Особенности конфигурирования библиотеки Oracle


Для 64-bit библиотек всё остается, без каких либо изменений, но для указания Oracle, какие библиотеки необходимо запустить, используя 32-bit extproc, необходимо создать символическую ссылку и переконфигурировать скрипт создания библиотеки.

Создадим символическую ссылку:

CREATE DATABASE LINK AGENT_LINK_32B USING 'extproc_connection_data32b';

Используя пример, изменим скрипт создания объекта библиотеки:
CREATE OR REPLACE LIBRARY MY_SCHEMA.MY_NAME IS '[диск]:\oracle\product\11.2.0\client_32\BIN\my.dll' AGENT "agent_link_32b";

На этом особенности конфигурировния библиотек заканчиваются.

Настройка переменных окружения


Я не выполнял тестирования с использованием переменных окружения, таких как TNS_ADMIN, ORACLE_HOME, LD_LIBRARY_PATH и прочих. В моем случае в переменных окружения они отсутствуют, а переменная окружения Path содержит последовательно путь до 64-bit инстанса базы данных, а затем до 32-bit инстанс клиента.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 12.11.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Personal Edition Named User Plus License
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Standard Edition 2 Processor License
Oracle Database Standard Edition 2 Named User Plus License
TeeChart for .NET Standard Business Edition 2017 single license
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Мастерская программиста
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100