Páginas

terça-feira, 24 de maio de 2011

Configurando conexão com Oracle através de TNS - básico

Havia trabalhado com Oracle alguns anos atrás, e pra mim esse SGBD tem muita coisa desconhecida... Precisei pegar um projeto onde que usa esse banco de dados. Meu primeiro "desafio" foi entender como fazer para configurar o client do Oracle para poder conectar a aplicação ASP.NET na base de dados. Isso deve ser o básico do básico para quem trabalha com Oracle, mas como pra mim é novidade, decidi deixar isso documentado no blog já que a idéia original dele é ser uma knowledge base pessoal (apesar que eu admito, não sou tão frequente com os posts como eu gostaria de ser).

Bom, em primeiro lugar, eu precisei baixar os componentes client do Oracle. Isso eu fiz baixando os componentes do Instant Client e os colocando na pasta C:\oracle\instantclient_10_2\ (o link de onde baixei está logo abaixo). Esse Instant Client é um conjunto de componentes que permite a execução de aplicações que consomem bases Oracle sem a necessidade de fazer a instalação completa do cliente, através de setup, CD, etc.

Em seguida, eu precisei entender como configurar um arquivo chamado tnsnames.ora. Que raios que era isso? Bom, trata-se de um arquivo contendo as definições de endereços de servidores para a conexão. O arquivo tnsnames.ora me foi enviado por e-mail,e para configurá-lo foi necessário os seguintes passos:
  1. Colocar este arquivo no disco local. Acabei colocando em C:\oracle\instantclient_10_2\network\admin\. Note que é importante este arquivo estar dentro da pasta network\admin (o que vem antes pode variar).
  2. Criar uma variável de ambiente chamada ORACLE_HOME. Como valor, coloquei o caminho C:\oracle\instantclient_10_2 (pasta onde se encontrava o diretório network\admin).
Pronto, com isso minha aplicação funcionou!

Links interessantes:
Obs. Se alguém que conhece mais o Oracle e quiser acrescentar alguma coisa, por favor comente!

[]'s

ATUALIZAÇÃO (18/01/2012): Olá. Um detalhe que é legal citar aqui também é quando temos uma aplicação rodando no IIS que acessa o Oracle e dá erro ORA-12154: TNS:could not resolve the connect identifier specified. Nas ocorrências que tive disso, bastou dar permissão de leitura para o usuário que roda o ASP.NET para ele poder ler o arquivo tnsnames.ora lá na pasta onde este arquivo se encontra.

6 comentários:

  1. O que é variavel de ambiente???

    ResponderExcluir
    Respostas
    1. É uma variável que pertence ao sistema operacional, e que geralmente guarda informações de caminhos de aplicativos, parametrizações, informações, etc. No exemplo que citei acima, a variável ORACLE_HOME define o caminho da pasta onde estão instalados os componentes do cliente do Oracle e os arquivos de configuração.
      No Windows, você pode ver as variáveis de ambiente clicando com o botão direito sobre o My Computer e indo em Properties. Depois, vá até a aba Advanced, e clique no botão Environment Variables.
      []'s

      Excluir
  2. Onde habilita essa permissão no IIS ?
    Estou com esse problema

    ResponderExcluir
    Respostas
    1. Na verdade a permissão não é no IIS, mas sim na pasta onde se encontra o arquivo tnsnames.ora. Isso porque o usuário que está rodando o processo do ASP.NET não conseguia ler este arquivo, e consequentemente não dava para ele pegar as informações de conexão.

      Veja nas configurações do seu site qual é o app pool que está rodando. Aí veja neste app pool qual é o usuário que está configurado nele. Aí você vai na pasta que está o arquivo TNS (no meu caso era C:\oracle\instantclient_10_2\network\admin), acessa as propriedades dela com o botão direito e na aba de segurança você adiciona o usuário com permissão para ler.

      []'s

      Excluir
  3. Respostas
    1. Este arquivo TNS é um arquivo texto que segue um padrão, você pode olhar neste link para ver como criar um do zero http://www.orafaq.com/wiki/Tnsnames.ora

      =
      (DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(Host = )(Port = ))
      )
      (CONNECT_DATA =
      (SERVICE_NAME = )
      )
      )

      Mas geralmente eu costumo copiar de algum servidor que já tenha o Oracle configurado e funcionando.

      []'s

      Excluir