Instalando o DBD – Oracle com o instant client + sdk

Frequentemente vejo em listas de perl a dificuldade de muitas pessoas em instalar o DBD::Oracle, ou porque não conseguem instalar o próprio client, ou porque não conseguem configurar o seu S.O.. Como já fiz isso várias vezes, resolvi compartilhar minha experiência em instalar o DBD::Oracle utilizando um client mais enxuto do Oracle, o ‘instant client’ + sdk.

A seguir, descrevo como é o processo de instalação do instant client do Oracle, explicando porque é melhor instalar o instant client do que o client completo, e explico também como instalar o DBD::Oracle, mostrando quais são os requisitos de ambiente para que o DBD::Oracle seja instalado sem problemas.

OBS1: Tudo isso é basado numa instalação que eu fiz do client para o Oracle 10g release 2. Mas deve valer também para o 11g, embora eu não tenha certeza.

OBS2: Eu fiz isso(da última vez) numa máquina de arquitetura de 64 bits com o Debian como Sistema Operacional. Não incluí notas de instalação em outras distribuições ou mesmo no Windows.

 

Instalando o instant client e por quê

A seguir descrevo os passos a serem seguidos para instalar o instant client. Mas antes acho importante ressaltar o porque de instalar o instant client ao invés do client completo do Oracle, e há vários motivos para isso:

 

  • O client não instala em todos os S.Os(me refiro ao client do 10g no Debian);
  • O client tem aproximadamente 470MB de tamanho contra cerca de 40MB do instant client;
  • O DBD::Oracle não usa absolutamente nada a mais do que está no instant client;

 

Mas o que é esse ‘instant client’?

O instant client é um conjunto de bibliotecas fornecidas pela Oracle para que os compiladores/interpretadores, como Perl, PHP, C/C++, Python, Ruby, JAVA dentre outros, possam se conectar a uma base de dados Oracle, e acessar recursos disponíveis nessa base de dados. O client completo inclui o instant client mais um conjunto enorme de ferramentas que não são necessárias para o DBD::Oracle, como por exemplo o enterprise manager.

 

Baixando o instant client

O instant client pode ser baixado do seguinte endereço: http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxx86_64soft.html

Repare que esta é uma instalação para computadores com arquitetura de 64bits, então cuidado para não instalar a versão incorreta! Veja aqui as outras arquiteturas disponiveis

Escolha a arquitetura apropriada, assim como a versão correta do cliente Oracle, no meu caso foi a versão 10.0.2.3. Certifiquem-se de que é a versão correta.

É necessário instalar instalar também os headers adicionais, pois o DBD::Oracle vai precisar quando for compilar, este é o SDK.

Os nomes dos links(pelo menos da última vez), que você deve clicar para baixar o instant client e o SDK são:

 

  • Instant Client Package – Basic Lite: Tem o source, que vem num arquivo zip e o rpm. Se você não usa RedHat, Suse, CentOS etc. Recomendo fortemente que não tente converter o rpm para deb(se for o caso), ou para qualquer outra versão de pacote. Pare de ser preguiçoso e compile!
  • Instant Client Package – SDK: Da mesma forma, tem o source e tem o rpm. Baixe o source!

 

Preparando o ambiente

Nesse exemplo, precisava-se do cliente funcionando para um usuário específico, que era o mesmo usuário da aplicação. Então resolvi instalar com o usuário da aplicação, dentro do home desse usuário, para evitar problemas de permissão. Como só esse usuário vai utilizar o client, não há problemas. No entanto, se a sua aplicação é executada por mais de um usuário, é melhor criar um usuário oracle, instalar o client dentro do home desse usuário, e incluir os usuários que vão utilizar o client no grupo do usuário oracle( E acertar as permissões, obviamente).

Uma vez escolhido o local onde o client será instalado, descompacte os arquivos do instant client e do SDK. Eles já gravarão os dados na mesma estrutura de diretórios(desde que sejam descompactados no mesmo diretório). O resultado será a seguinte estrutura de diretórios:

Dentro do diretório instantclient_10_2, crie a seguinte estrutura de diretórios:

$mkdir network/admin

Essa estrutura de diretório é necessária porque o DBD::Oracle vai perguntar qual é o caminho do arquivo TNS. Esse arquivo diz ao Oracle onde ele deve se conectar(podem ser vários locais), e resume tudo a um único nome, e isso ajuda na hora de definir a string de conexão, porque você não precisa passar host, sid e esse tipo de coisa, basta passar o TNS, o usuário e a senha.

Sobre a estrutura de diretórios, eu só escolhi essa estrutura, porque é a estrutura padrão do Oracle, mas poderia ter colocado em outro lugar. Porém, independentemente disso, é bom lembrar que o nome do arquivo tns deve ser ‘tnsnames.ora’, e esse arquivo deve conter a seguinte estrutura:

 

##MEUNOMEDECONEXAO##=
   (DESCRIPTION =
       (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = ##IPDABASE##)(PORT =##MINHAPORTA##))
       )
       (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ##NOMEDOSERVICO##)
       )
   )

Você deve se preocupar com três coisas aqui:

 

  • ##MEUNOMEDECONEXAO## – é o nome da conexão que se usará na string de conexão(SID);
  • ##IPDABASE ## – é o ip onde se encontra a base de dados(o servidor de banco de dados) Oracle;
  • ##NOMEDOSERVICO## – é o nome do serviço de conexão configurado na base(Consulte o administrador de banco de dados para saber isso);
  • ##MINHAPORTA## – normalmente é a porta 1521, mas você deve consultar o seu DBA para ter certeza.

Essa estrutura pode se repetir para definir vários locais de base de dados para se conectar. Se você tem uma base de testes, uma de homologação e uma e produção, por exemplo, é claro q vc vai ter que definir três estruturas iguais a essa(e mudar os parâmetros, que fique claro).

Salve esse arquivo em network/admin.

Acerte as permissões de diretórios e arquivos com os comandos chmod e chown(A não ser que esteja no Windows). Deixe todos os diretórios e arquivos abaixo do diretório instantclient_10_2(inclusive), com permissão para ler, e executar para o dono e para o grupo. E permissão de leitura para os outros.

 

Configurando variáveis de ambiente

A instalação do DBD::Oracle vai procurar por uma série de caminhos para bibliotecas que devem ser configuradas em variáveis de ambiente específicas. São elas:

 

  • ORACLE_HOME: é o caminho onde você instalou o instant client(é o caminho do diretório instantclient_10_2);
  • LD_LIBRARY_PATH: é o caminho para as bibliotecas do ORACLE. Nesse caso, é o mesmo caminho que está em $ORACLE_HOME;
  • ORACLE_OWNER: é o usuário que tem permissão de acessar o oracle, por isso todos os usuários que quiserem acessá-lo, devem estar no mesmo grupo;
  • ORACLE_SID: necessário somente se você não quiser fazer a conexão via TNS;
  • NLS_LANG: define o idioma e a codificação para se conectar ao banco, por exemplo: NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1.

Para definir as variáveis de ambiente de forma definitiva, salve as definições das variáveis dentro de /etc/profiles, usando o comando export. Exemplo abaixo:

 

 #Variáveis de ambiente do Oracle:
 ORACLE_HOME=/home/USUARIO/instantclient_10_2
 export ORACLE_HOME
 ...

Se você tem um usuário que acessa o Oracle apenas, pode definir no arquivo /home/USUARIO/.bashrc.

Reinicie a máquina ou carregue a sequência de inicialização com o init.

 

Incluindo as bibliotecas do oracle no ld.conf

Vá ao diretório /etc/ld.so.conf.d/

Agora crie um arquivo chamado 'oracle.conf'. Dentro dele inclua o caminho para as bibliotecas do Oracle. Para esse exemplo, ficaria assim:

/home/USUARIO/instantclient_10_2

Esse arquivo faz com que o sistema operacional inclua esse caminho na sua lista de caminhos para bibliotecas. Isso evita problemas com caminhos de libs que não poderiam não serem encontradas. Carregue o ld.so.conf, digitando:

sudo ldconfig

Seo sistema ‘reclamar’ que alguma biblioteca não é um link simbólico, então crie um link simbólico, usando o comando 'ln -s'. Para mais detalhes desse comando, verifique o manual digitando:

man ln

Pronto! Agora só falta instalar o DBD::Oracle. Para isso digite :

$sudo perl -MCPAN

-e 'install DBD::Oracle'

A instalação tentará encontrar o seu ORACLE_HOME. Como você instalou como sudo, é uma boa idéia que isto esteja configurado em /etc/profile ao invés do .bashrc do usuário, caso contrário, você terá que exportar as variáveis de ambiente para o usuário ‘root'(lembrando que sudo faz você executar um comando como usuário root), antes de instalar o DBD::Oracle.

O instalador pedirá o caminho do TNS. Passe o caminho, confirme o que estiver correto, e espere terminar a compilação. Se estiver tudo de acordo, não dará erro algum.

 

Testes

Se tudo estiver ‘OK’, faça dois testes:

 

  • Digite: $perl -e ‘use DBD::Oracle’. Se estiver tudo ok, perl não retornará nada e isso significa que ele encontrou DBD::Oracle dentro da estrutura de bibliotecas do perl;
  • Crie um script perl com o seguinte conteúdo:
      #! /usr/bin/perl -w
      use strict;
      use DBI;
      my $dbh = DBI->connect("DBI:Oracle:MEUNOMEDECONEXAO", USUARIO,SENHA, {AutoCommit => 0,
PrintError => 1, RaiseError => 0})|| die "Impossivel conectar ao oracle...n" . $DBI->errstr;
      my $sql = 'SELECT *
      from TABELADASUABASE';
      my $sth = undef;
      eval{   $sth = $dbh->prepare($sql);
            $sth->execute;
      };
      if($@ || $DBI->errstr){
         print "nErro ao executar a query '$sql' ".$DBI->errstr."n";
      }
      else{
         while(my $res = $sth->fetchrow_hashref){
            #imprima os seus dados aqui. Algo do tipo print $res->{campo};
         }
      }

Salve, e execute o script. Se correr algum erro, o script vai mostrar a você, caso contrário mostrará o o resultado da sua query, e isso significa que a instalação foi bem-sucedida.

Fonte: http://perl.org.br/Artigos/ReceitaAndreCarneiro2008x12x08

Deixe um comentário