BASE DE CONOCIMIENTO

Configurar una conexión de Oracle para usar TNSNames.ora o .ora


Publicado: 29 Nov 2016
Fecha de la última modificación: 20 Jul 2023

Pregunta

Cómo configurar una conexión Oracle para que use TNSNames.ora o LDAP.ora.


Ventajas de configurar las conexiones TNSNames.ora o LDAP.ora.

Los errores de Oracle comunes siguientes se pueden corregir o evitar si configura su conexión de datos para que use TNSNames.ora o LDAP.ora.
  • ORA-12154: TNS: could not resolve the connect identifier specified (no se pudo resolver el identificador de conexión especificado)

  • ORA-12514: TNS listener does not currently know of service requested in connect descriptor (la escucha TNS desconoce el servicio solicitado en el descriptor de conexión)

  • ORA-12514: TNS: no listener: (no hay escucha)

  • ORA-12170: TNS:Connect timeout occurred (se agotó el tiempo de espera de la conexión)

  • ORA-12504: TNS listener was not given the SERVICE_NAME in CONNECT_DATA (la escucha TNS no recibió el SERVICE_NAME en CONNECT_DATA)

Entorno

  • Tableau Desktop
  • Tableau Server
  • Oracle

Respuesta

HAGA CLIC PARA EXPANDIR LA SOLUCIÓN
Tableau Desktop y/o Tableau Server en Windows, OCI Client

Paso 1: Configurar la variable de entorno TNS_ADMIN

  1. Seleccione Inicio > Panel de control > Sistema. 
  2. Haga clic en Configuración avanzada del sistema.
  3. En el cuadro de diálogo Propiedades del sistema, en la ficha Avanzadas, seleccione Variables de entorno. 
  4. En Variables del sistema, haga clic en Nueva. 
  5. En el cuadro de diálogo Nueva variable del sistema, introduzca lo siguiente y después haga clic en Aceptar:  
    • Nombre de la variable: TNS_ADMIN 
    • Valor de la variable: el directorio que contiene el archivo TNSNames.ora.
  6. Haga clic en Aceptar en el cuadro de diálogo Variables de entorno y el cuadro de diálogo Propiedades del sistema. 
  7. Reinicie el equipo para garantizar el reconocimiento de la nueva variable. 

Paso 2: Usar el nombre de servicio Oracle Net para conectarse a Oracle en Tableau 

  1. Cierre todos los libros de trabajo de Tableau y abra una nueva instancia de Tableau.
  2. En Tableau Desktop, seleccione Conectar a datos > Oracle.
    • Para el Servidor, use el alias "net_service_name" de Oracle registrado en el archivo TNSNames.ora.
    • Escriba su nombre de usuario y contraseña, según sea necesario.

El resto de detalles de conexión del archivo TNSNames.ora se comunican a través de la variable del sistema TNS_ADMIN. Tenga en cuenta que debería dejar la información de nombre de servicio y puerto opcionales en blanco, de lo contrario, puede interferir con la conexión al duplicar información.

HAGA CLIC PARA EXPANDIR LA SOLUCIÓN
Tableau Desktop y Server 2020.2 y versiones posteriores, Windows, JDBC Driver
 
Crear un archivo oracle.properties que contenga el siguiente texto (ejemplo):

oracle.net.tns_admin=C:\\Oracle_Client\\network\\admin

Cambie la ruta si es necesario para hacer referencia a la ubicación del archivo tnsnames.ora dentro del sistema de archivos de host. La doble barra invertida \\ es intencional y es obligatoria, aunque las rutas \\ no funcionarán si esta se copia y se pega directamente en el explorador de archivos de Windows. El archivo oracle.properties solo funcionará correctamente con la doble barra invertida en este contexto.

Coloque el archivo en la siguiente ubicación:
Desktop: Documents\My Tableau Repository\Datasources 
Server: C:\ProgramData\Tableau\Tableau Server\data\tabsvc\vizqlserver\Datasources (o una ruta equivalente si se emplea una ubicación de instalación alternativa). Asegúrese de crear la carpeta si aún no existe.

Solo Server: Una vez creados los archivos y las carpetas, asegúrese de que el usuario de ejecución reciba los permisos para el archivo y reinicie Tableau Server.

Puede encontrar más información sobre el archivo de propiedades JDBC aquí: https://kb.tableau.com/articles/howto/Customizing-JDBC-Connections?lang=es-es
 
HAGA CLIC PARA EXPANDIR LA SOLUCIÓN
En Mac

Paso 1:

  1. Cierre Tableau Desktop si está abierto. 
  2. Asegúrese de que ha descargado e instalado los controladores de Oracle para Mac de la página de Controladores de Tableau.
  3. Copie cualquier archivo LDAP.ora o TNSNames.ora existente que contenga información de conexión en /etc: 
  • En Finder, seleccione Ir > Ir a carpeta y, a continuación, escriba /etc.
  • Copie el archivo .ora en /etc.

Paso 2: Configurar la variable de entorno TNS_ADMIN 

  1. Inicie Terminal y escriba el comando siguiente: 

    sudo nano /etc/launchd.conf

    Nota: Nano es un editor basado en texto que siempre se encuentra en los equipos Mac.

  2. Escriba su contraseña cuando se le solicite.

  3. Escriba lo siguiente:

    launch setenv TNS_ADMIN /etc

  4. Pulse Ctrl-X y, a continuación, Y, luego pulse Intro para guardar los cambios y salir de Nano.
  5. Reinicie su Mac.

Paso 3: Comprobar que se haya establecido la variable TNS_ADMIN  

  1. Inicie Terminal y escriba el comando siguiente: 

    export

  2. Podrá ver una lista de todas las variables del sistema. Busque:

    declare -x TNS_ADMIN="/etc"

  3. Confirme que la resolución DNS funciona para el nombre de host indicado en el archivo .ora haciendo ping al nombre de host en Terminal o Utilidad de red. Utilice un nombre de dominio completamente calificado, como nombreservidor.dominio.com, en lugar de un nombre de servidor sencillo. 
Ahora, debería poder iniciar Tableau Desktop en su Mac y conectarse a la base de datos Oracle proporcionando solo el nombre de servidor del archivo TNSNames.ora o LDAP.ora. 
 
HAGA CLIC PARA EXPANDIR LA SOLUCIÓN
En Linux

Resumen de los pasos:

  1. Copie el archivo tnsnames.ora en una ubicación a la que pueda acceder un usuario de Tableau
  2. Configure los permisos del archivo.
  3. Actualice la variable de entorno TNS_ADMIN, si es necesario, para que se asigne al directorio usado en el paso (1).

Paso 1: Copiar el archivo tnsnames.ora en un directorio que pueda utilizar un usuario sin privilegios (tableau)

2019.3.x y versiones posteriores:
Copie el archivo tnsnames.ora en el directorio /etc.
2019.2.x y versiones anteriores:
De forma predeterminada, un usuario sin privilegios recibe el nombre "tableau". Todos los procesos de Tableau Server se ejecutan con esta cuenta y debería poder localizar el archivo tnsnames.ora para usarlo.
Si ya ha instalado el conector de Oracle, se recomienda que copie el archivo en el directorio /opt/tableau/tableau_driver/oracle.
Puede confirmar que el usuario puede acceder al directorio usando "su" para conmutar entre la cuenta y el directorio. Por ejemplo:
sudo su tableau
cd /opt/tableau/tableau_driver/oracle
Si al realizar estos pasos aparece el error "Permiso denegado", debe actualizar los permisos del directorio que utilice.

Paso 2: Configurar los permisos del archivo tnsnames.ora

Para la versión 2019.2.x y anteriores, siga estos pasos:
  1. Vaya a la ruta de archivo donde se encuentra el archivo tnsnames.ora.
  2. Conceda permisos al archivo ejecutando el comando chmod 666 tnsnames.ora.
  3. Compruebe los permisos del archivo con el comando siguiente: ls -l.
Nota: La ruta de entorno no debe tener una barra diagonal final. Si el formato de la ruta no es correcto, los usuarios pueden encontrarse el error ORA-12154.

2019.3 y versiones posteriores:
En su lugar, coloque el archivo tsnames.ora en el directorio /etc del equipo Linux. No se necesita ninguna variable de entorno.

2020.2 y versiones posteriores:

Cree un archivo /var/opt/tableau/tableau_server/data/tabsvc/vizqlserver/Datasources/oracle.properties con el siguiente texto:

Ejemplo: oracle.net.tns_admin=/etc

Cambie /etc si es necesario para hacer referencia a la ruta del archivo tnsnames.ora dentro del sistema de archivos o de su instancia de Server.

Puede encontrar más información sobre el archivo de propiedades JDBC aquí: https://kb.tableau.com/articles/howto/Customizing-JDBC-Connections?lang=es-es
 

Paso 3: Configurar la variable de entorno TNS_ADMIN para que se asigne al directorio usado en el paso 1

Para la versión 2019.3.x y superiores: puede omitir este paso ya que no se requiere una variable de entorno.
2019.2.x y versiones anteriores:
  1. En un editor de texto, abra el archivo que coincida con su versión de Tableau Server:
    • ​​Tableau Server 2018.1.x - 2019.2 --  /var/opt/tableau/tableau_server/.local/share/systemd/user/tabsvc_0.service
  2. Añada la siguiente línea, en la que "/path/to/file-folder" corresponde al directorio en el que copió tnsnames.ora en el paso 1:
    • Environment=TNS_ADMIN=/path/to/file-folder.
  3. Guarde los cambios en el archivo.

Nota: La ruta del entorno no debe contener una barra diagonal final; si el formato de la ruta es incorrecto, puede que los usuarios vean el error ORA-12154.

HAGA CLIC PARA EXPANDIR LA SOLUCIÓN
Todos los entornos

Pasos opcionales

Encontrar archivos tnsnames.ora

Si el cliente Oracle está instalado en su servidor, el archivo tnsnames.ora se encontrará en el siguiente directorio: $ORACLE_HOME/network/admin.
Puede comprobar si el archivo existe con los siguientes comandos:

echo $ORACLE_HOME 
imprime la ruta del archivo.

sudo find / -iname tnsnames.ora
 incluye la lista de ubicaciones de los archivos tnsnames.ora en el sistema de archivos.

Nota: No es necesario que instale el cliente de Oracle para usar tnsnames.ora con Tableau Server. Este paso le ayudará a trabajar con cualquier tipo de instalación.

Crear un archivo tnsnames.ora desde cero

Si no se encuentra el archivo tnsnames.ora en el equipo y no tiene uno para copiarlo desde el equipo del cliente, puede crear uno usando un editor de texto. Tenga en cuenta estas restricciones:

  • El archivo tnsnames.ora distingue mayúsculas de minúsculas, y todas las letras deben escribirse en minúscula. 

  • En el archivo no debe usarse el espaciado con tabulaciones.

A continuación se muestra una posible plantilla para una entrada. Los elementos en paréntesis deben reemplazarse por valores obtenidos del administrador de la base de datos.
Nota: Aunque el archivo TNSNames.ora no requiera la entrada ADDRESS_LIST en un equipo Windows o Mac, el archivo tnsnames.ora sí requiere esta variable en los equipos Linux.
 

[net_service_name]=
(DESCRIPTION=
  (ADDRESS_LIST=
    (ADDRESS=[protocol_address_information])
   )
  (CONNECT_DATA= 
    (SERVICE_NAME=[service_name])
   )
 )

Por ejemplo: 

Production =
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = prod.corp.com)(PORT = 1521)
   )
  (CONNECT_DATA = 
    (SERVICE_NAME = orcl)
   )
 )

 

Información adicional

Pasos de configuración adicionales si tiene SSL configurado en Oracle

Configurar ORACLE_HOME y TNS_ADMIN para Oracle (con SSL configurado en Oracle)

sudo su -l tableau
      touch /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf
      echo "ORACLE_HOME=/u01/app/oracle/product/12.1.0/client_1" | tee -a /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf
      echo "TNS_ADMIN=/u01/app/oracle/product/12.1.0/client_1/network/admin" | tee -a /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf 
      chmod 744 /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf
exit

cd /opt/tableau/tableau_server/packages/scripts.near.xx.xxxx.xxxx/
            sudo ./stop-administrative-services
            sudo ./start-administrative-services
source /etc/profile.d/tableau_server.sh

¿Fue de ayuda este artículo para resolver el problema?