Для подключения к БД 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
Комментариев нет:
Отправить комментарий