ejemplo conexiones conexion conectar con clase oracle tomcat jdbc

oracle - conexiones - Diferencia entre usar un nombre TNS y un nombre de servicio en una conexión JDBC



jdbc:oracle:thin:@localhost:1521:xe (2)

Tengo un servidor basado en Java (Tomcat) que se conecta a una base de datos Oracle utilizando una conexión JDBC. Hay varias formas de conectarse a la base de datos: SID, nombre de TNS, nombre del servicio.

Me gustaría entender cuál es la diferencia entre cada una de estas conexiones y cuál sería la conexión recomendada (SID, TNS o servicio) si se conecta a una base de datos en clúster. Aquí está el nombre TNS que tenemos para la base de datos:

MY_NICE_TNS_NAME.MY_COMPANY.COM = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myhostname)(PORT = 1521)) (LOAD_BALANCE = YES) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MY_NICE_SERVICE_NAME.MY_COMPANY.COM) (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5) ) ) )

¡Gracias!


Oracle SID es el nombre único que identifica de manera única su instancia / base de datos donde el nombre del servicio es el alias TNS que usted proporciona cuando se conecta remotamente a su base de datos y este nombre de servicio se registra en el archivo Tnsnames.ora en sus clientes y puede ser lo mismo que SID y también puede darle cualquier otro nombre que desee.

SERVICE_NAME es la nueva característica de Oracle 8i en adelante en la cual la base de datos puede registrarse con el oyente. Si la base de datos está registrada con el oyente de esta manera, entonces puede usar el parámetro SERVICE_NAME en tnsnames.ora; de lo contrario, use SID en tnsnames.ora.

Además, si tiene OPS (RAC), tendrá diferentes SERVICE_NAME para cada instancia.

SERVICE_NAMES especifica uno o más nombres para el servicio de base de datos al que se conecta esta instancia. Puede especificar nombres de servicios múltiples para distinguir entre diferentes usos de la misma base de datos. Por ejemplo:

SERVICE_NAMES = sales.acme.com, widgetsales.acme.com

También puede usar nombres de servicios para identificar un solo servicio que esté disponible en dos bases de datos diferentes mediante el uso de la replicación.

En un entorno de Oracle Parallel Server, debe establecer este parámetro para cada instancia.

El TNS es el archivo de configuración sql * net que define la dirección de datbases para establecer una conexión con ellos.


SERVICE_NAME es un alias de una instancia de base de datos (o muchas instancias). El objetivo principal de esto es si está ejecutando un clúster. Al usar esto, podemos conectar una base de datos específica dentro de un clúster. Y de otra manera, usando SID (Entidad de identificación de sistema) podemos conectarnos a una instancia de base de datos, que es un nombre único para una instancia de base de datos Oracle.

En resumen, SID = el nombre único de su base de datos, SERVICE_NAME = el alias utilizado al conectarse.

Hay varias maneras de proporcionar información de la base de datos, como Directly Specified, tnsnames.ora (es decir, nombre de TNS), LDAP Directory, Network Information Services.

Un nombre TNS ( T ransparent N ework S ubstrate) es el nombre de la entrada en el archivo tnsnames.ora que se guarda en $ORACLE_HOME/network/admin
Este archivo contiene la información que usa el sistema para conectarse a la base de datos Oracle. Al usar esto, un cliente puede obtener información asociada al servidor de forma transparente. Contiene la siguiente información

PROTOCOL HOST IP ADDRESS PORTNO SID or SERVICE_NAME

P.ej

mydb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.35.15.1)(PORT = 1521)) (CONNECT_DATA = (SID = mydb))

Los controladores JDBC se conectan con una cadena de conexión usando TNS de la siguiente manera

System.setProperty("oracle.net.tns_admin", PATH_TO_TNSNAMES.ORA); Class.forName ("oracle.jdbc.OracleDriver"); dbUrl = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+IPHOST+")(PORT="+PORT+"))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME="+DBNAME+")))" conn = DriverManager.getConnection(dbUrl, USERNAME, PASSWORD);