ORA-12154: Erro Oracle TNS_ADMIN

ORA-12154 não pôde resolver o identificador de conexão especificado é um erro muito comum de acontecer durante o desenvolvimento. Já me deparei com este em vários momentos desde que comecei a utilizar o Oracle como Banco de Dados.

Muito complicado de se resolver uma vez que são muitos os motivos que levam a este erro, vou citar aqui como resolvi este erro, espero ajudar, leia com atenção.

Descrição do problema

Tudo começou quando tive que mudar o Oracle Provider de um dos projetos no qual trabalho. O sistema é 100% ado.net e portanto de dificil manutenção.

Como o antigo Oracle.Client da Microssofit que foi descontinuado em 2005 causou certa imcompatibilidade com o client Oracle 19C, precisei mudar e escolhi para isso o Provider Oracle.ManagedDataAccess.

O que é o ORA-12154?

O ORA-12154 é um erro muito comum, sempre relacionado a sua cópia local do arquivo tnsnames.ora e sua configuração de ouvinte.

Este erro me incomodou bastante pois gastei muita energia buscando na internet soluções e acreditem existem muitas dúvidas sobre e como resolver e para cada um tem uma solução diferente.

Aqui vou descrever o que resolveu de uma vez por todas o erro ORA-12154.

Como resolver o erro ORA-12154?

A primeira coisa a ser feita para resolver este erro é verificar se em seu computador já existe uma variavel de ambiente. Caso não possua crie a Variavel de ambiente TNS_ADMIN.

É bem simples, basta clicar na caixa de pesquisa na barra de ferramentas e digitar “Editar Variável de ambiente”. Caso necessite de ajuda veja este artigo Configurando o Oracle Instant Client.

O segundo passo é reiniciar sua máquina para ter certeza que a variavel foi adicionada e reconhecida por todo o sistema.

O terceiro passo é testar se o TNS esta funcionando, para isso abra o cmd e digite “tnsping” seguido do ALIAS do banco. Exemplo: tnsping nomedaconexao. As vezes a forma de copiar e colar no arquivo tns acaba danificando a estrutura ou acrescenta caracteres invalidos. Fique atento.

E por ultimo precisei adicionar estas linhas no web.config

<system.data>
		<DbProviderFactories>
			<!-- Remove in case this is already defined in machine.config -->
			<remove invariant="Oracle.ManagedDataAccess.Client"/>
			<remove invariant="Oracle.DataAccess.Client"/>
			<add name="ODP.NET, Managed Driver" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
		</DbProviderFactories>
	</system.data>
	<oracle.manageddataaccess.client>
		<version number="*">
			<settings>
				<!-- Set this path if you are using TNS aliases as connection strings (not recommended) -->
				<!-- Instead you can use "SERVER_NAME:PORT/SERVICE_NAME" as your data source -->
				<setting name="TNS_ADMIN" value="C:\oracle\product\10.2.0\client_2\network\ADMIN" />
			</settings>
			<edmMappings>
				<edmMapping dataType="number">
					<add name="bool" precision="1"/>
					<add name="byte" precision="2"/>
					<add name="int16" precision="5"/>
				</edmMapping>
			</edmMappings>
		</version>
	</oracle.manageddataaccess.client>

Conclusão

Em conclusão posso afirmar que o erro ORA-12154 apesar de ser bem genérico é possivel resolver seguindo os passos citados.

Primeiramente verifique a variável de ambiente que na maioria dos casos resolve o problema, em seguida verifique se o arquivo tnsnames.ora esta definido corretamente e em ultimo caso se atente a configuração opcional no web.config.

Existem ainda casos em que a simples mudança do Pool da aplicação no IIS para 32 bits. Isso não aconteceu comigo mas existem vários casos da internet com esta solução.

Leave a Reply