personalizada example java oracle jdbc connection-string service-name

java - example - thin url oracle



Java JDBC: cómo conectarse a Oracle utilizando el nombre del servicio en lugar de SID (7)

Tengo una aplicación Java que utiliza JDBC (a través de JPA) que se conectaba a una base de datos de desarrollo que usa el nombre de host, el puerto y el SID de Oracle, como este

jdbc: oracle: thin: @ oracle.hostserver1.mydomain.ca: 1521: XYZ

XYZ fue el SID de Oracle. Ahora necesito conectarme a una base de datos Oracle diferente que no use un SID, pero que use un "Nombre de Servicio" de Oracle en su lugar.

Intenté esto pero no funciona:

jdbc: oracle: thin: @ oracle.hostserver2.mydomain.ca: 1522: ABCD

ABCD es el nombre de servicio de la otra base de datos.

¿Qué estoy haciendo mal?


Así que hay dos maneras fáciles de hacer que esto funcione. La solución publicada por Bert F funciona bien si no necesita suministrar ninguna otra propiedad especial de conexión específica de Oracle. El formato para eso es:

jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME

Sin embargo, si necesita proporcionar otras propiedades de conexión específicas de Oracle, debe usar el estilo TNSNAMES largo. Tuve que hacer esto recientemente para habilitar las conexiones compartidas de Oracle (donde el servidor hace su propia agrupación de conexiones). El formato TNS es:

jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcp)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED)))

Si está familiarizado con el formato de archivo de Oracle TNSNAMES, esto le debe parecer familiar. Si no, entonces simplemente buscalo en Google para los detalles.


Cuando uso dag lugar de thin , la siguiente sintaxis que apunta al nombre del servicio funcionó para mí. Las soluciones jdbc:thin anteriores no funcionaron.

jdbc:dag:oracle://HOSTNAME:1521;ServiceName=SERVICE_NAME


En caso de que esté utilizando eclipse para conectar oracle sin SID. Hay dos controladores para seleccionar, es decir, controlador delgado de Oracle y otro es otro controlador. Seleccione otros controladores e ingrese el nombre del servicio en la columna de la base de datos. Ahora puede conectarse directamente usando el nombre del servicio sin SID.


Esta discusión me ayudó a resolver el problema con el que estaba luchando durante días. Miré por todo Internet hasta que encontré la respuesta de Jim Tough el 18 de mayo de 2011 a las 15:17. Con esa respuesta pude conectarme. Ahora quiero devolver y ayudar a otros con un ejemplo completo. Aquí va:

import java.sql.*; public class MyDBConnect { public static void main(String[] args) throws SQLException { try { String dbURL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=whatEverYourHostNameIs)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yourServiceName)))"; String strUserID = "yourUserId"; String strPassword = "yourPassword"; Connection myConnection=DriverManager.getConnection(dbURL,strUserID,strPassword); Statement sqlStatement = myConnection.createStatement(); String readRecordSQL = "select * from sa_work_order where WORK_ORDER_NO = ''1503090'' "; ResultSet myResultSet = sqlStatement.executeQuery(readRecordSQL); while (myResultSet.next()) { System.out.println("Record values: " + myResultSet.getString("WORK_ORDER_NO")); } myResultSet.close(); myConnection.close(); } catch (Exception e) { System.out.println(e); } } }


Prueba esto: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD

Edición: según el comentario a continuación, esto es realmente correcto: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (observe la // )

Aquí hay un link a un artículo útil


También puede especificar el nombre de TNS en la URL de JDBC de la siguiente manera

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))


http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA

Sintaxis de nombre de servicio de estilo delgado

Los nombres de servicio de estilo ligero solo son compatibles con el controlador JDBC Thin. La sintaxis es:

@ // nombre_host: número_puerto / nombre_servicio

Por ejemplo:

jdbc: oracle: thin: scott / tiger @ // myhost: 1521 / myservicename

Así que intentaría:

jdbc: oracle: thin: @ // oracle.hostserver2.mydomain.ca:1522/ABCD

Además, según la respuesta de Robert Greathouse, también puede especificar el nombre de TNS en la URL de JDBC de la siguiente manera:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))