André Carlucci

Skeptic .net development

Oracle sem Oracle Client com o novo ODP.NET com driver gerenciado

Se você tem uma aplicação .NET que utiliza Oracle como banco de dados com certeza já sofreu com incompatibilidade de versões de dll, instalações diferentes com x32 e x64, oracle clients não compatíveis, etc. Isso já causou tantas horas de manutenção para gente que se nossos clientes permitissem, já teríamos mudado para SqlServer faz tempo.

Recentemente a Oracle lançou o ODP 11.2.0.3.50 beta, que vem com (finalmente) um driver em código gerenciado para .net. Isso significa que:

  • Mesmo assembly para x32 e x64 (AnyCPU)
  • Deploy mais simples: adiós freaking oracle client e suas 200 versões
  • Deploy menor: uma única dll de menos de 10 megas

Vamos ver um exemplo de como funciona

Baixe o arquivo ODP.NET_Managed_1120350_Beta.zip. A maneira mais prática de configurar sua máquina para usar o odp é executando os 2 .bats que vem com o zip. Basicamente eles vão:

  • Configurar seu machine.config com a DbProviderFactory do novo driver e performance counters
  • Copiar o driver para o GAC
  • Adicionar intelli-sense para a seção de configuração no web/app.config do driver
  • Adicionar uma entrada de registro no Event Viewer do Windows.

Lembre-se, você precisa executar esses bats no command prompt de administrador para eles funcionarem.

Feito isso, abra o visual studio, crie um projeto de console application e adicione a dll Oracle.ManagedDataAccess.dll como referência.

Vamos fazer um pequeno teste:

E pronto, aparecendo um “X” na tela, você conseguiu conectar com o Oracle. Bem melhor, não?

Mas e o Tnsnames.ora?

Neste exemplo eu usei uma maneira de conectar ao oracle chamada TNS Easy Connect.
Nesta forma, ao invés de colocar no data source o alias de sua entrada no arquivo tnsnames.ora, você coloca diretamente o ip:porta do seu banco de dados, precedido de duas barras // e depois o “service name” do banco. Recomendo fortemente utilizar o easy connect.

Caso você tenha que usar o tnsnames.ora de qualquer jeito, basta especificar no web/app.config de sua aplicação o caminho para onde este arquivo se encontra. Ex:

[xml]
<configuration>
<oracle.manageddataaccess.client>
<version number=”*”>
<settings>
<setting name=”TNS_ADMIN” value=”C:\oracle\client\network\admin”/>
</settings>
</version>
</oracle.manageddataaccess.client>
</configuration>
[/xml]

Caso você não tenha usado os “.bats” que vieram no zip, não esqueça de adicionar a seção do OraceManagedDataAccess em seu app/web.config:

[xml]
<section name=”oracle.manageddataaccess.client”
type=”OracleInternal.Common.ODPMSectionHandler,
Oracle.ManagedDataAccess,
Version=4.112.3.50,
Culture=neutral,
PublicKeyToken=89b483f429c47342″ />
[/xml]

Lembre-se, o driver é BETA

Essa é a única parte ruim: o driver ainda é beta. Isso significa que não seria assim tão indicado sair utilizando o mesmo em produção. Faça seus testes, avalie e vamos torcer para que o release final venha o quanto antes.