Tobías, parte de este equipo de trabajo, nos ha hecho el favor de crear esta reseña ya que domina a la perfección dicho tema.
Solución:
Ni siquiera sabía que era posible usar tnsnames con el controlador delgado, pero aparentemente se agregó en algún lugar de la versión 10:
http://docs.oracle.com/cd/B19306_01/java.102/b14355/urls.htm#BEIDIJCE
En particular:
Nota:
Cuando utilice TNSNames con el controlador JDBC Thin, debe establecer la propiedad oracle.net.tns_admin en el directorio que contiene su archivo tnsnames.ora.
java -Doracle.net.tns_admin=%ORACLE_HOME%networkadmin
Como se mencionó, no he comprobado si esto Realmente obras.
No creo que la lógica “buscar el directorio de configuración de red real” esté disponible a través de alguna función de Oracle. Tendrá que hacerlo manualmente como se describe en su pregunta, o tal vez confiar en que la variable de entorno TNS_ADMIN esté presente. En ese caso, la invocación de Java sería
java -Doracle.net.tns_admin=%TNS_ADMIN%
Bueno, en algunas GUI, la configuración del controlador TNS simplemente no está implementada o no funciona (NetBeans, por ejemplo :-))
https://netbeans.org/bugzilla/show_bug.cgi?id=231526
Hay una solución simple aquí. Puede tomar la entrada directamente del archivo tnsnames.ora y adjuntarla al controlador jdbc string de la siguiente manera:
Ejemplo del uso de odbc7.jar (controlador Oracle 12c JDBC para JDK 7) para conectarse al clúster Oracle 11gR2 RAC:
jdbc:oracle:thin:@(DESCRIPCIÓN=(LISTA_DIRECCIONES=(DIRECCIÓN=(PROTOCOLO= TCP)(HOST=hostA)(PUERTO= 1522))(DIRECCIÓN=(PROTOCOLO=TCP)(HOST=hostB)(PUERTO=1521) ))(SOURCE_ROUTE=sí)(CONNECT_DATA=(SERVICE_NAME=DatabaseService)))
Tenga cuidado de poner caracteres :: dobles al final como host:puerto:servicio, si va a poner :: al final así:
jdbc:oracle:thin:@(DESCRIPCIÓN=(LISTA_DIRECCIONES=(DIRECCIÓN=(PROTOCOLO= TCP)(HOST=hostA)(PUERTO= 1522))(DIRECCIÓN=(PROTOCOLO=TCP)(HOST=hostB)(PUERTO=1521) ))(SOURCE_ROUTE=sí)(CONNECT_DATA=(SERVICE_NAME=DatabaseService)))::
Terminará con la excepción “Se generó una excepción NL”.
Otro enfoque es configurar la siguiente propiedad: System.setProperty(“oracle.net.tns_admin”,”C:/app/product/11.2.0/client_1/NETWORK/ADMIN”);
Por supuesto, en lugar de un valor codificado, puede, por ejemplo, configurar una variable de entorno en su sistema operativo como ORACLE_TNS_ADMIN y luego hacer referencia a ella:
System.setProperty("oracle.net.tns_admin",System.getenv("ORACLE_TNS_ADMIN"));
o páselo al proceso java a través del interruptor -D en Linux:
-Doracle.net.tns_admin=$ORACLE_TNS_ADMIN
y ventanas: como
-Doracle.net.tns_admin=%ORACLE_TNS_ADMIN%
Una vez que nuestra aplicación reconoce el archivo de configuración de TNS, podemos conectarnos por nombre de servicio de referencia en el archivo TNSNAMES.ora como en este ejemplo completo:
// tell the driver where to look for the TNSNAMES.ORA file
System.setProperty(
"oracle.net.tns_admin",
"C:/app/product/11.2.0/client_1/NETWORK/ADMIN");
// ORCL is net service name from the TNSNAMES.ORA file
String dbURL = "jdbc:oracle:thin:@ORCL";
// load the driver
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = null;
Statement stmt = null;
try {
conn = DriverManager.getConnection(dbURL,
"your_username",
"your_password");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT dummy FROM dual");
En primer lugar, asegúrese de que el software SQL Developer esté correctamente instalado en su máquina. Si está utilizando un controlador delgado, asegúrese de que su archivo ojdbcX.jar esté en su ruta de compilación. Los pasos para conectarse a la fuente de datos de Oracle utilizando el nombre de alias TNS son:
-
Establecer propiedad del sistema para
oracle.net.tns_admin
. Esto debería apuntar al directorio que tiene sutnsnames.ORA
expedienteSystem.setProperty("oracle.net.tns_admin", DIRECTORY_PATH_TO_TNSNAME.ORA_FILE);
-
Registrar un controlador de Oracle
DriverManager.registerDriver(nuevo OracleDriver());
-
Crear un objeto de conexión
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:username/[email protected]_ALIAS_NAME");
Esto debería establecer la conexión a la base de datos.
Te mostramos reseñas y calificaciones
Si te gustó nuestro trabajo, tienes la habilidad dejar una noticia acerca de qué le añadirías a esta crónica.