Oracle Instant Client (10.2.0.3), Gentoo 2008.0 e LDAP

Hoje, tive que instalar o suporte de Oracle na minha máquina, para poder usar o OCI8 com o PHP para poder desenvolver e aceder a base de dados Oracle… Após muita luta, não conseguia perceber porque é que o utilizador root conseguia trabalhar com o SQLPLUS e o meu utilizador não.

Numa antiga instalação da minha máquina, eu não tinha suporte de LDAP, e o sqlplus funcionava na perfeição com o meu utilizador.

Nesta nova instalação, apenas o utilizador root ao usar o sqlplus se ligava à base de dados.

Quando se instala o Oracle Instant Client, existem umas variáveis definidas em  /etc/env.d/50oracle-instantclient-basic

ORACLE_HOME=/usr/lib64/oracle/10.2.0.3/client
LDPATH=/usr/lib64/oracle/10.2.0.3/client/lib
#LD_LIBRARY_PATH=/usr/lib64/oracle/10.2.0.3/client/lib
C_INCLUDE_PATH=/usr/lib64/oracle/10.2.0.3/client/include
TNS_ADMIN=/etc/oracle/
ORACLE_SID=SAM
NLS_LANG=PORTUGUESE_PORTUGAL.WE8ISO8859P15
#SQLPATH=/usr/lib/oracle/10.2.0.3/client/lib

Estas variáveis são suficientes para que o sqlplus funcione.

Ao colocar naquela directoria, o ambiente fica definido globalmente, logo o valor das variáveis fica disponivel para qualquer utilizador que use a minha máquina.

Nota: Se der erro com o apache acerca da biblioteca libnnz10.so , é necessário que a variável LD_LIBRARY_PATH esteja definida para a directoria lib (valor da variável LDPATH)

Após todas as variáveis definidas, e instalado o sqlplus, chegou a hora de experimentar.

Executando o sqlplus como root, funciona tudo direitinho. Liga ao servidor e permite efectuar querys.

Com o meu utilizador, não se liga… fica indefinidamente a tentar ligar-se e não passa dali.

Após imensas pesquisas, lá cheguei a um forum que indica que poderá ser um problema do LDAP e explica como poderemos verificar o que o sqlplus está a fazer até que chega à prompt.

Este forum explica como podemos usar o comando strace para efectuar um strace ao comando sqlplus.

strace $ORACLE_HOME/bin/sqlplus

e vendo as informações que iam aparecendo no ecran, deparei-me com esta linha:

connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)

Como o meu utilizador está definido no LDAP, o sqlplus vai verificar a existencia do socket da aplicação nscd – name server cache daemon  (ou seja, se está a correr).

No meu caso, não precisava de ter o nscd a correr, porque a resolução do LDAP para os utizadores funciona na perfeição sem a aplicação, mas para o sqlplus ele precisa de estar a correr.

Assim, arranquei com o serviço, executei o sqlplus com o meu utilizador e finalmente funcionou…

 

Leave a Reply

Your email address will not be published. Required fields are marked *