Как в ORACLE добавить библиотеку?

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

23.05.2018
Всем привет!

Есть задача, нужно в ORACLE привинтить библиотеки DLL,
но я раньше с таким не сталкивался, в интернете ищу но как реализовать непонимаю. ORACLE стоит на Windows серевере.

Есть 21 файл DLL написаные на C, напарник на DELPHI может инициализировать их, он делает инициализацию корневой библиотеки, а она в свою очередь бежит по всему списку и проверяет все ли на месте и дальше он спокойно может с ней работать, мне нужно сделать то же самое но на ORACLE.

Читал что сначала нужно в TNSLISTENER.ORA на сервере дописать инициализацию через ExtProc, неполучилось(. Как надо, незнаю(.

Немогу понять что за чем и куда, как настроить и как потом увидеть что оно работает.

Может кто подключал библиотеки DLL к ORACLE, подскажите что нужно сделать?

Всем спасибо за ответы по теме!

Update 29.05.2018
Ок, прочитав комментарии у меня появился новый вопрос.
Как нужно написать на JAVA хранимую процедуру которая будет использовать внешнюю DLL библиотеку написаную на С?
Нужно передать из оракла файл в библиотеку, библиотека должна подшаманить файл и вернуть его обратно ораклу для дальнейшей работы.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

И еще одна ремарка. Нужно оценить объем блобов, которые будут храниться в БД. И сравнить с общим размером БД. Если это окажутся величины ± одного порядка, то я могу посоветовать изначально задуматься над решением хранения блобов вне БД. Иначе бекапы и восстановление из них начинают занимать уж очень неприличное время. Все зависит от объема, нужно смотреть по месту... Миграция впоследствии займет значительно больше усилий и времени...

По поводу хороших мест где прочитать по технической реализации вам уже подсказали, у меня только ещё один вопрос — вы уверены что оно вам надо и вы самым удачным (архитектурно) методом решаете свою проблему? Нельзя какой-то пре- или пост-процессинг внешний сделать, инициируемый не из сторед процедуры. Опять таки — кто то же эту процедуру дёргает извне? Та же делфа может или ещё кто-то и прикрутить вашу ДЛЛку туда?
Мой субъективный опыт кричит внутри и возмущается что явно что-то пошло не так в архитектуре приложения :)
// и поверьте, я очень люблю оракл как средство разработки — но не всё же в него тулить!

Я работаю на APEX, через него нужно взять от пользователя файл, БЛОБ зашифровать через DLL, и результат положить в базу, или обратно взять из базы БЛОБ, расшифровать через DLL, и выдать пользователю. DLL исполняет криптографические функции, я их незнаю, как мне сделать по другому если я незнаю функции шифрования которые прописаны в ЛИБЕ?

dbfs?
oracle-base.com/articles/11g/dbfs-11gr2
Можно загружать отдельно и по ходу «енкриптить» каким-то внешним приложением.
Если прям необходимо информацию держать в базе, и иметь возможность делать выборки и все такое (хотя какие там выборки для блобов), то dbms_crypto + BLOB/CLOB, если доступны опции, в частности, Oracle Advanced Security, то хранить securefiles LOB, или вообще использовать TDE, и шифровать всю таблицу/табличное пространство/базу. Это будет и «секьюрно», и относительно удобно. Шифровать через длл, загружая при этом всю херню в базу — это вот прям про удаление гландов не через рот.

Делали по этой инструкции habr.com/post/149956 все работает

хороший вариант, может у меня получится, если получиться, подправлю и отпишу

Если я правильно понял, то реализация использования внешних процедур на С описана в книге Тома Кайта «Оracle для профессионалов», глава 18. Русскоязычная версия имеет отличный перевод, легко гуглится в интернете.

И обратите внимание на следующее (цитата из этой же книги):

При разработке приложений баз данных я использую очень простую мантру:

если можно, сделай это с помощью одного оператора SQL;
если это нельзя сделать с помощью одного оператора SQL, сделай это в PL/SQL;
если это нельзя сделать в PL/SQL, попытайся использовать хранимую процедуру на языке Java;
если это нельзя сделать в Java, сделай это в виде внешней процедуры на языке C;
если это нельзя реализовать в виде внешней процедуры на языке C, надо серьезно подумать, зачем это вообще делать...

Вы находитесь на предпоследнем шаге, и это повод задуматься о том, что возможно принят неверный подход. Но если с подходом и его правильностью проблем нет — то Кайт в помощь. Лично я за свою профессиональную деятельность никогда до этого этапа не доходил, хранимки на Джаве был мой максимум :)

библиотеку не я писал, и что там внутри и как его реализовать по другому не представляю, работаю ORACLE разработчиком только год, с JAVA не работал, книгу главу 18 читал но толком не понял и написал сюда. Сейчас сижу и ломаю голову что и куда прописать, что и куда скопировать.

И все-таки, предлагаю Вам сначала разобраться с тем функционалом, который нужно будет реализовать в Oracle, используя эту библиотеку. Нужно иметь в виду, что Oracle DB не является аппликейшен-сервером или местом запуска каких-либо скриптов (тем более, если внутренности этих скриптов неизвестны). Практически всегда есть возможность реализовать требования теми средствами, которые наиболее оптимальны именно для этой базы, либо не реализовывать вообще.

Понятно, что Вам поставили задачу прикрутить вот эту либу к Ораклу, чтобы не париться и использовать какой-то функционал. А потом окажется, например, что этот функционал парсит JSON/XML файлы и что-то с ними делает. А для этих целей в Oracle есть совсем другие средства, т.к. иначе через некоторое время у Вас возникнет проблема производительности этой либы, и С-шник потом будет говорить что-то наподобие: «вот, этот Oracle тупит в самых простейших операциях, смотри, как быстро все работает на нормальном окружении»...

P.S. По теме, к сожалению, ничем помочь не могу. Но лично для меня очевидно, что после успешного решения этой задачи у Вас с высокой степенью вероятности появяться другие, более сложные задачи. Это если Ваш ДБА не плюнет и не скажет, что база не место для таких экспериментов в принципе...

а возможно ли пользоватся DLL библиотекой через JAVA?

Підписатись на коментарі