unable the sqlstate specified solucion ora not name error developer could database oracle ora-12541 ora-12154

database - the - tns could not resolve service name



Error Ora 12154 (9)

Recientemente implementé una aplicación web en uno de mis servidores de desarrollo. Estoy usando Oracle, asp.net y c #. Cuando ejecuto la aplicación en el servidor todo funciona bien, pero cuando trato de ejecutar la aplicación fuera del servidor (usando mi pc, por ejemplo) obtengo este error:

ORA-12154: TNS:could not resolve the connect identifier specified

Si ejecuto la aplicación en mi pc con Visual Studio, funciona bien.

Oracle está instalado en el servidor "A" y la aplicación está en el servidor "B". El servidor "A" está en un dominio y el servidor "B" en otro dominio. Mi PC está en el mismo dominio y tiene el servidor "A".

En mi pc puedo encontrar el archivo tnsname.ora en C: / oracle / product / 10.2.0 / client_1 / NETWORK / ADMIN, pero en el Servidor "B" no puedo encontrarlo

¿alguna idea? Gracias por la ayuda.


¿Has probado esto ya? (desde http://ora-12154.ora-code.com/ )

ORA-12154: TNS: no se pudo resolver el identificador de conexión especificado
Causa: se solicitó una conexión a una base de datos u otro servicio utilizando un identificador de conexión, y el identificador de conexión especificado no se pudo resolver en un descriptor de conexión utilizando uno de los métodos de nomenclatura configurados. Por ejemplo, si el tipo de identificador de conexión utilizado era un nombre de servicio de red, entonces el nombre de servicio de red no podría encontrarse en un repositorio de métodos de denominación, o el repositorio no podría ser localizado o alcanzado.
Acción: - Si usa nombres locales (archivo TNSNAMES.ORA):

  • Asegúrese de que "TNSNAMES" figure como uno de los valores del parámetro NAMES.DIRECTORY_PATH en el perfil de Oracle Net (SQLNET.ORA)

  • Verifique que exista un archivo TNSNAMES.ORA y que esté en el directorio correcto y que esté accesible.

  • Compruebe que el nombre del servicio de red utilizado como el identificador de conexión existe en el archivo TNSNAMES.ORA.

  • Asegúrese de que no haya errores de sintaxis en ningún lugar del archivo TNSNAMES.ORA. Busque paréntesis sin par o personajes callejeros. Los errores en un archivo TNSNAMES.ORA pueden hacerlo inutilizable.

  • Si usa nombres de directorio:

  • Verifique que "LDAP" figure como uno de los valores del parámetro NAMES.DIRETORY_PATH en el perfil de Oracle Net (SQLNET.ORA).

  • Verifique que el servidor de directorio LDAP esté activo y que esté accesible.

  • Verifique que el nombre del servicio de red o el nombre de la base de datos utilizado como el identificador de conexión esté configurado en el directorio.

  • Verifique que el contexto predeterminado que se está utilizando sea correcto especificando un nombre de servicio de red totalmente calificado o un DN de LDAP completo como el identificador de conexión

  • Si está usando nombres de conexión fácil:

  • Verifique que "EZCONNECT" aparezca como uno de los valores del parámetro NAMES.DIRETORY_PATH en el perfil de Oracle Net (SQLNET.ORA).

  • Asegúrese de que el host, el puerto y el nombre del servicio especificados sean correctos.

  • Intente adjuntar el identificador de conexión entre comillas. Consulte la Guía de administradores de Oracle Net Services o la guía específica del sistema operativo Oracle para obtener más información sobre cómo nombrar.


¿ORACLE_HOME está configurado en el servidor B?


Adivina: un cliente oracle no está instalado en el Servidor B.

Si tiene un cliente Oracle instalado, puede colocar un archivo tnsnames en cualquier ubicación (como un directorio en un recurso compartido de red). Para hacer esto, configure una variable de sistema TNS_ADMIN (Propiedades del sistema-> Avanzado-> Variables de entorno en XP) en el directorio que contiene sus archivos de nombres.

Para mí, por ejemplo, tengo una variable de sistema: TNS_ADMIN - C: / oracle / ora92 / network / ADMIN


La resolución de errores TNS puede ser un verdadero dolor. Un par de cosas a tener en cuenta.

La mayoría de los entornos de desarrollo (como Visual Studio) conservan su propia copia de la información de conexión de TNS y no usan el archivo TNSNAMES.ora. El archivo donde se guarda esta información no tiene que llamarse TNSNAMES.ora, ese es solo el nombre predeterminado. Que puede ser la razón por la que no puedes encontrarlo en el Servidor B.

Si tiene el software de cliente Oracle (o una base de datos Oracle ) puede usar tnsping para verificar si su archivo TNSNAMES.ora está configurado correctamente.

Los problemas más frecuentes con una configuración de archivo TNSNAMES.ora son el uso del nombre de servicio incorrecto y / o el uso del nombre de host incorrecto. Es posible que necesite cambiar el "ODB_A" a "ODB_A.WORLD" o viceversa, según la configuración de SQL NET. Para Oracle 10, este último es el valor predeterminado de SQL NET. Para este último, debe usar ping para ver el servidor "A" y saber si necesita usar "SERVERA" o "SERVERA.DOMIN.COM" o una dirección IP.


Parece que necesita instalar Oracle Client en "Servidor B" (el servidor de la aplicación) y configurar su archivo TNSNAMES.ORA. Esto es necesario ya que de lo contrario, el código en ejecución no tendrá idea de dónde buscar la base de datos que utiliza en la aplicación (probablemente esté configurado como fuente de datos en web.config o algo codificado). Recuerde: no puede acceder a Oracle (fácilmente) sin Oracle Client.


Tenía el mismo problema. Resulta que el TNSNAMES.ORA en el entorno de despliegue tenía un ADDRESS_NAME y SID / SERVICE_NAME diferentes, y la aplicación se configuró para usar el SID, lo que causó el problema.

Su cadena de conexión debe contener ADDRESS_NAME y no el SID


Posibles Resoluciones -

Verifique que TNSNAMES.ORA exista y sea accesible.

Asegúrese de que no haya errores de sintaxis en TNSNAMES.ORA.

Verifique que la cadena de conexión sea correcta.

Verifique si hay algún problema de DNS.

Si el problema es mientras se conecta al servidor utilizando PL sql developer client.try para instalar el desarrollador de SQL dentro del archivo de programa en lugar de archivos de programa (x86) ''s


Agrega el ambiente:

Variable Name: TNS_ADMIN Variable Value: (YourDrive):/app/(UserName)/product/11.2.0/dbhome_1/NETWORK/ADMIN


Me enfrenté a un problema similar. El código siguiente funcionaba en mi sistema pero no funcionaba en otro servidor a pesar de que había agregado una entrada de tns en el archivo tnsnames.ora.

con = new OracleConnection(); con.ConnectionString = "User Id=username;Password=password;Data Source=uit45"; con.Open(); // throws error here

Después de cavar y excavar, descubrí la solución para esto. Necesitamos ignorar la entrada en el archivo tns y se puede dar la entrada de tns como cadena de conexión, que funcionó bien para mí. Pruebe el siguiente código.

con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=db-uit45.xxx)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=uit45)));User Id=username;Password=password"); con.Open();

Tenga en cuenta que debe proporcionar los valores asociados, especialmente para HOST,PORT,SID,User Id y Password .