CSS for code highlight

05 августа 2022

Установка модуля DBD::Oracle на Perl5 в Linux Mint 18.3

Для подключения к БД Oracle из скриптов потребовалось установить DBD::Oracle для Perl5 на Linux Mint 18.3. Методом познания ошибок в поисковике, через тернии к звездам, так сказать, получилось установить модуль. В итоге хочу поделиться опытом, может кому-то пригодится.

Кому не интересно много читать, можно сразу промотать вниз к рецепту.

Первое что необходимо - это установить клиент Oracle, см. предыдущую заметку - "Установка Oracle InstantClient 11.2 на Linux Mint 18 / Ubuntu 16". Для того чтобы работал DBD::Oracle, необходимо установить модуль DBI.

cpan install DBI

Все встало без проблем.
PS: ставлю от пользователя, поэтому все модули ставятся в папку пользователя

$HOME/perl5/lib/...

Теперь ставим DBD::Oracle

cpan install DBD::Oracle

Вот тут-то проблемы (ошибки) и начались:

...
...
Running Mkbootstrap for DBD::Oracle ()
chmod 644 "Oracle.bs"
"/usr/bin/perl" -p -e "s/~DRIVER~/Oracle/g" /home/sergey/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/DBI/Driver.xst > Oracle.xsi
"/usr/bin/perl" "/home/sergey/perl5/lib/perl5/ExtUtils/xsubpp"  -typemap "/usr/share/perl/5.22/ExtUtils/typemap" -typemap "typemap"  Oracle.xs > Oracle.xsc && mv Oracle.xsc Oracle.c
x86_64-linux-gnu-gcc -c  -I/home/sergey/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/DBI -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g   -DVERSION=\"1.83\" -DXS_VERSION=\"1.83\" -fPIC "-I/usr/lib/x86_64-linux-gnu/perl/5.22/CORE"  -Wall -Wno-comment -DUTF8_SUPPORT -DORA_OCI_VERSION=\"11.2.0.4\" -DORA_OCI_102 -DORA_OCI_112 Oracle.c
In file included from Oracle.xs:1:0:
Oracle.h:37:17: fatal error: oci.h: Нет такого файла или каталога
compilation terminated.
Makefile:415: ошибка выполнения рецепта для цели «Oracle.o»
make: *** [Oracle.o] Ошибка 1
  ZARQUON/DBD-Oracle-1.83.tar.gz
  /usr/bin/make -- NOT OK

Не может найти заголовочные *.h файлы клиента Oracle. Необходимо скачать sdk инстант клиента - instantclient-sdk-linux.x64-11.2.0.4.0.zip распаковать папку include из архива, в которой *.h файлы в папку клиента

mkdir /tmp/orasdk && cd $_
wget https://github.com/f00b4r/oracle-instantclient/raw/master/instantclient-sdk-linux.x64-11.2.0.4.0.zip
sudo unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip *include* -d /opt/oracle

PS: Заголовочные файлы можно распаковать и в другое место, но тогда перед запуском cpan необходимо указать путь к файлам, например:

export C_INCLUDE_PATH="/usr/local/include/oracle/11.2.0.4.0/"

Пробуем снова установить модуль DBD::Oracle, выдает ошибку, что не находит библиотеку libclntsh, исправляем:

cd $ORACLE_HOME
sudo ln -s libclntsh.so.11.1 libclntsh.so
sudo ln -s libocci.so.11.1 libocci.so

Пробуем снова, может ругнуться что нет модуля Test::NoWarnings и так же установка не проходит тесты модуля. Ставим недостающий модуль:

cpan install Test::NoWarnings

Форсируем установку моудля DBD::Oracle с пропуском тестирования

cpan force notest install DBD::Oracle

Наконец-то все установилось!!!

Делаем проверку, подключаемся к базе Oracle, пишем скрипт:

#!/usr/bin/perl
use DBD::Oracle;

my $dbh = DBI->connect("dbi:Oracle://db_host:db_port/SID", 'schema','password');

my $banner = $dbh->selectall_arrayref(q{
select banner from v$version
})->[0][0];

print "$banner\n";

$dbh->disconnect;

Либо однострочником:

perl -MDBD::Oracle -e 'print DBI->connect("dbi:Oracle:TNS",'schema','password')->selectall_arrayref(q{select banner from v$version})->[0][0]'

Результат:

Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production

В итого, для установки имеем примерно следующую последовательность действий:

# 1. Устанавливем InstantClient 11.2

# 2. Устанавливем InstantClient 11.2 SDK
mkdir /tmp/orasdk && cd $_
wget https://github.com/f00b4r/oracle-instantclient/raw/master/instantclient-sdk-linux.x64-11.2.0.4.0.zip
sudo unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip *include* -d /opt/oracle

# 3. Делаем симлинки на библиотеки
cd $ORACLE_HOME
sudo ln -s libclntsh.so.11.1 libclntsh.so
sudo ln -s libocci.so.11.1 libocci.so

# 4. Устанавливаем модули perl из cpan
cpan install DBI
cpan install Test::NoWarnings
cpan force notest install DBD::Oracle

Ссылки:
- CPAN
- DBI
- DBD::Oracle

Комментариев нет:

Отправить комментарий

Последнее...

CURL вместо Postman / Swagger