Url de conexión JDBC a Oracle RAC
29 abril 2010 at 11:45 am 3 comentarios
Recientemente uno de nuestros entornos ha migrado a Oracle RAC y hemos tenido el problemilla que os detallo a continuación.
Parece ser que en Oracle RAC la URL de conexión a la BBDD mediante JDBC no permite una de sus versiones clásicas. Así por ejemplo una conexión del estilo:
jdbc:oracle:thin:@<HOST>:1521:<SID>
no funciona saltando la siguiente excepción:
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
...
Para solucionarlo podemos utilizar la otra forma corta de url que aparece por ejemplo en este listado de formatos de conexión JDBC (en inglés ):
jdbc:oracle:thin:@//<HOST>:1521/<SID>
También podemos utilizar una URL en formato largo:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOST>(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=<SID>)))
Si tenemos varios servidores deberíamos poner una URL en el siguiente formato:
jdbc:oracle:thin:@<HOST1>^<HOST2>:1521:<SID>
jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=<HOST1>) (PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=<HOST2>) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=<SID>)))
aunque esto último no lo he podrido probar lo he visto en el JUG de Padova (en inglés ).
Espero que le pueda servir de ayuda a alguien.
3 comentarios Add your own
Deja una respuesta
Trackback this post | Subscribe to the comments via RSS Feed
1.
Samuel Zarza | 29 abril 2010 a las 8:14 pm
La URL con varios servidores la probamos hace varios años con una aplicación usando Weblogic 8 y Oracle RAC 8i, y sí que funcionaba, aunque creo recordar que tuvimos agún problema con las transacciones y tuvimos que usar los drivers XA como si todas las transacciones fueran distribuídas. Saludos!
2.
Miguel | 29 abril 2010 a las 10:25 pm
Muy buen aporte Samuel.
¡Muchas gracias!
3.
David | 17 septiembre 2012 a las 10:14 pm
EXCELENTE!! Funciono el jdbc como dices para varios servidores en RAC