Como instalar Perl DBD :: Oracle com Oracle Instant Client no macOS Catalina
Estou executando o macOS Catalina 10.15.7 e preciso instalar o Oracle Instant Client para executar um script Perl que se conecta a um banco de dados.
1. Instalação do Oracle Instant Client
Baixei os pacotes de que precisava:
- Pacote Básico de Luz (DMG)
- Pacote SDK (DMG)
- Pacote ODBC (DMG)
Do Instant Client 19.8 e seguiu as instruções de instalação sem problemas (apenas copiando e colando)
Os arquivos são extraídos em
/Users/username/Downloads/instantclient_19_8
2. Ambiente ORACLE_HOME
Em seguida, configurei ORACLE_HOME para /Users/username/Downloads/instantclient_19_8
export ORACLE_HOME=/Users/username/Downloads/instantclient_19_8
3. Instalando DBD::Oracle
Quando tentei instalar DBD::Oracle
, recebi o seguinte erro:
$ cpanm DBD::Oracle
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
Configuring DBD-Oracle-1.80 ... N/A
! Configure failed for DBD-Oracle-1.80. See /Users/username/.cpanm/work/1608142485.48272/build.log for details.
O conteúdo do arquivo de log:
$ cat /Users/username/.cpanm/work/1608142485.48272/build.log
cpanm (App::cpanminus) 1.7044 on perl 5.032000 built for darwin-thread-multi-2level
Work directory is /Users/username/.cpanm/work/1608142485.48272
You have make /usr/bin/make
You have LWP 6.47
You have /usr/bin/tar: bsdtar 3.3.2 - libarchive 3.3.2 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.6
You have /usr/bin/unzip
Searching DBD::Oracle () on cpanmetadb ...
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz
-> OK
Unpacking DBD-Oracle-1.80.tar.gz
Entering DBD-Oracle-1.80
Checking configure dependencies from META.json
Checking if you have Config 0 ... Yes (5.032000)
Checking if you have Encode 0 ... Yes (3.06)
Checking if you have Math::BigInt 0 ... Yes (1.999818)
Checking if you have Devel::Peek 0 ... Yes (1.28)
Checking if you have Test::More 0 ... Yes (1.302177)
Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (7.44)
Checking if you have Data::Dumper 0 ... Yes (2.174)
Checking if you have DBI 1.623 ... Yes (1.643)
Checking if you have Test::NoWarnings 0 ... Yes (1.04)
Configuring DBD-Oracle-1.80
Running Makefile.PL
Using DBI 1.643 (for perl 5.032000 on darwin-thread-multi-2level) installed in /usr/local/Cellar/perl/5.32.0/lib/perl5/site_perl/5.32.0/darwin-thread-multi-2level/auto/DBI/
Configuring DBD::Oracle for perl 5.032000 on darwin (darwin-thread-multi-2level)
If you encounter any problem, a collection of troubleshooting
guides are available under lib/DBD/Oracle/Troubleshooting.
'DBD::Oracle::Troubleshooting' is the general troubleshooting
guide, while platform-specific troubleshooting hints
live in their labelled sub-document (e.g., Win32
hints are gathered in 'lib/DBD/Oracle/Troubleshooting/Win32.pod').
Trying to find an ORACLE_HOME
Your DYLD_LIBRARY_PATH env var is set to ''
The ORACLE_HOME environment variable is not set and I couldn't guess it.
It must be set to hold the path to an Oracle installation directory
on this machine (or a machine with a compatible architecture).
See the appropriate troubleshooting guide for your OS for more information.
ABORTED!
-> N/A
-> FAIL Configure failed for DBD-Oracle-1.80. See /Users/username/.cpanm/work/1608142485.48272/build.log for details.
Eu li aqui que ORACLE_HOME
deve ser definido como o valor do diretório que contém o /bin
diretório, mas não consigo encontrar nenhum /bin
.
Respostas
O macOS está sempre mudando, mas no Mojave instalei o Instant Client a partir dos DMGs e fiz:
brew install perl
ln -s $HOME/Downloads/instantclient_19_8 $HOME/instantclient
export DYLD_LIBRARY_PATH=$HOME/instantclient
cpan -i -T DBI
cpan -i -T DBD::Oracle
Em geral, nunca defina ORACLE_HOME para Instant Client. (Isso pode fazer com que os arquivos de configuração incorretos sejam lidos). ORACLE_HOME é usado para um banco de dados 'completo' ou instalação completa do cliente, não para o Instant Client. No entanto, alguns instaladores ainda fazem referência à variável para localizar arquivos de compilação, portanto, você precisará dela - pelo menos no momento da compilação. DBD :: Oracle irá pesquisar internamente por Instant Client e usar $ HOME / instantclient se $ ORACLE_HOME não estiver definido.
O macOS gradualmente removeu a utilidade de DYLD_LIBRARY_PATH, uma vez que não é propagado para subshells. Isso significa que não pode ser usado de forma confiável. No Mojave, descobri que poderia copiar as bibliotecas do Instant Client para $ HOME / lib / e não precisava definir DYLD_LIBRARY_PATH.
Nota lateral: se você estiver usando DBD :: Oracle, você não precisa do pacote ODBC do Instant Client.