|
Навигация
|
Главная » Java Вызов shell из OracleИсточник: habrahabr igofed Буквально на днях появилась у меня очень интересная задачка - вызвать shell скрипт из триггера в Oracle. Самым простым выходом в данной ситуации является хранимая процедура на Java, но редакция Oracle для которой было необходимо произвести действия - XE, в которой таковая возможность отсутствует.Google выдает достаточно много советов по тому, как реализовать процедуру, ссылающуюся на C библиотеку, но в чистом виде такие инструкции у меня не заработали, пришлось несколько допиливать советы, в чем мне все также помогал Google. Ссылок на ресурсы, где я получал ответы, уже не помню, но всю цепочку действий попробую рассказать. Итак, начинается все с создания необходимой С библиотеки, которая внутри системы и будет вызывать shell. Код библиотеки элементарный:
После создания файла с исходным кодом из него необходимо скомпилировать саму либу, для чего воспользуемся gcc и ld. Допустим исходник имеет название shell.c.
Для меня, как для программиста на C# и Java оказалось сюрпризом, что чтобы все заработало либа должна быть собрана на операционке с той же разрядностью, что стоит на машине с Oracle. У нас появилась библиотека, умеющая выполнять в shell то, что ей передадут параметром - отлично. Слудующим шагом необходимо создать процедуру в Oracle. Начинаем этот шаг с того, что копируем получившуюся библиотеку в $ORACLE_HOME/bin - как показала практика, библиотека может не заработать, если будет находится по другому пути. В самом Oracle создаем внешнюю библиотеку, меняя $ORACLE_HOME на путь.
Имея библиотеку - создадим процедуру, которая будет вызывать функцию этой библиотеки.
На этом этапе в Oracle уже есть готовая процедура, которая вызывает shell, но для ее работы, возможно, потребуется донастроить сам Oracle - необходимо поправить листенер. Идем в$ORACLE_HOME/network/admin/, где открываем файл tnsnames.ora и проверяем в нем наличие описания для подключения по протоколу IPC, должно быть написано что-то вроде
Если такой строки нет, то создаем ее, если есть, то смотрим на значение KEY и запоминаем его. После чего открываем файл listener.ora, лежащий там же и проверяем наличие возможности подключения по протоколу IPC у листенера, к которому подключаетесь, настройка будет выглядеть как-то так:
Если такой настройки нет - добавляйте, если есть - сверьте значение KEY со значением из файла tnsnames.ora, они должны совпадать. Если менялся хоть один файл tnsnames.ora или listener.ora - необходимо перезагрузить листенер:
После осуществления этих нехитрых действий появляется возможность вызова shell из любой процедуры/функции/триггера в Oracle. Oracle объявляет о выпуске Oracle Solaris 11.1 и Oracle Solaris Cluster 4.1. ESET: киберпреступники атакуют компьютеры, перенаправляя пользователей на вредоносные ресурсы. Прикладные программы в Web. Oracle выпускает Oracle Database Appliance X3-2. IBM Rational Test Virtualization Server. Главная » Java |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |