domingo, 26 de enero de 2014

Oracle SQL Developer 4.0 en OpenSuse y usando PostgreSQL!

Ayer estuve probando la nueva versión del utilitario Oracle SQL Developer que se liberó en diciembre (4.0.0.13), y entre muchas cosas nuevas (ver las 10 razones para usarlo, en inglés), encontré que se puede configurar una conexión a una base PostgreSQL, algo que me interesaba desde hace tiempo.

Si bien PostgreSQL no está dentro de las bases de terceros soportadas, ahora funciona, aunque algunas operaciones dan error (como por ejemplo ver los índices de una tabla), y no tiene las mismas funcionalidades que el utilitario nativo de PostgreSQL psql.

Pero es una buena señal, y con el tiempo se puede convertir en la herramienta necesaria para cualquier DBA que administra varios motores.  En mi caso uso habitualmente Oracle, MySQL y PostgreSQL, y ocasionalmente SQL Server, todas administrables desde SQL Developer. Esperemos que en breve se tenga la funcionalidad completa sobre bases PostgreSQL.

Para quienes les interese probarlo, les dejo el detalle de como instalarlo y hacerlo funcionar en OpenSuse 12.3 x64, conectando a una base PostgreSQL 9.2.4 que corre local (instalado del repositorio "openSUSE BuildService - Database").


1) Descargar software


2) Instalar

Dejé los archivos anteriores en el directorio /local/soft/oracle, y desde ahí lo instalé con root:

oraculo:/local/soft/oracle # rpm -Uvh sqldeveloper-4.0.0.13.80-1.noarch.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:sqldeveloper-4.0.0.13.80-1       ################################# [ 50%]
Cleaning up / removing...
   2:sqldeveloper-3.2.20.09.87-1      ################################# [100%]


Si se trata de usar SQL Developer sin instalar la JDK 1.7, da este error:

ncalero@oraculo:> sqldeveloper 

 Oracle SQL Developer
 Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.




Esto es porque OpenSuse incluye OpenJDK 1.7, que trae solo JRE (openjdk-1.7.0.6-8.28.3.x86_64):

oraculo:~ # rpm -qa | grep -i jdk
java-1_7_0-openjdk-1.7.0.6-8.28.3.x86_64

oraculo:~ # rpm -ql java-1_7_0-openjdk-1.7.0.6-8.28.3.x86_64
/usr/lib64/jvm-exports/java-1.7.0-openjdk
/usr/lib64/jvm-exports/java-1.7.0-openjdk-1.7.0
...
/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre
...

oraculo:~ # /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/bin/java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (IcedTea 2.4.3) (suse-8.28.3-x86_64)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)


Así que se debe instalar la JDK 1.7:

oraculo:/local/soft/oracle # rpm -Uvh jdk-7u51-linux-x64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk-2000:1.7.0_51-fcs            ################################# [100%]
Unpacking JAR files...
        rt.jar...
        jsse.jar...
        charsets.jar...
        tools.jar...
        localedata.jar...
        jfxrt.jar...


Podemos validar donde quedó instalado:

oraculo:/local/soft/oracle # rpm -ql jdk-2000:1.7.0_51-fcs
/etc
/etc/.java
/etc/.java/.systemPrefs
...
/usr/java/jdk1.7.0_51/bin
...

oraculo:/local/soft/oracle # /usr/java/jdk1.7.0_51/bin/java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)


3) Configurar JDK en SQL Developer

Antes de ejecutar SQL Developer se debe modificar su configuración para que use el JDK recién instalado, agregando el path correcto en el archivo de configuración sqldeveloper.conf en la variable SetJavaHome. Lo modifiqué con un editor de texto (vi), dejando comentada la configuración original (../../jdk):

oraculo: # grep SetJavaHome /opt/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf

#SetJavaHome ../../jdk
SetJavaHome /usr/java/jdk1.7.0_51


4) Agregar conexión a PostgreSQL

Ahora que está resuelta la instalación, abrimos SQL Developer:

ncalero@oraculo:~> sqldeveloper 

 Oracle SQL Developer
 Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.


Nos muestra la pantalla de inicio. En mi caso tenía una versión anterior (3.2) por lo que me migró algunas conexiones:



Ahora vamos a la configuración para agregar el driver de PostgreSQL. Esto se hace presionando Tools en el menú superior, y ahí eligiendo Preferences:



Ahora hay que elegir Database, y allí Third Party JDBC Drivers, donde se muestran los drivers ya configurados (en mi caso MySQL y SQL Server):



Con el botón "Add Entry ..." se debe elegir el archivo que bajamos antes, ubicado en /local/soft/oracle/postgresql-9.3-1100.jdbc41.jar.



Una vez elegido, presionamos el botón Select en este diálogo, y OK en el anterior para confirmar el cambio.

Para probar su funcionamiento creamos una nueva conexión. En este ejemplo usando el botón con el símbolo de más en el menú "Connections" de la izquierda:



Se abre el diáologo para ingresar los datos de la conexión, donde aparece una nueva pestaña "PostgreSQL":



En este ejemplo me voy a conectar a una base en el mismo equipo donde corre SQL Developer.
Si la base estuviera en otro servidor hay que revisar que se tenga permiso de acceso, tanto a nivel de IP (archivo pg_hba.conf) como en el usuario que se conecta a la base de datos.

Una vez que se ingresan los datos (hostname, port, username, password), se puede validar que la conexión funciona presionando el botón "Choose Database" para que nos muestre las bases a las que podemos conectarnos, y debemos elegir una de ellas para esta conexión:


Luego de elegida una base, podemos probar que la conexión funciona con el botón "Test" (aunque al funcionar la carga del combo de bases anteriores ya tenemos la pista de que va a funcionar). El resultado de este test se muestra en la parte inferior izquierda de esta ventana, donde dice Status:, como se ve en la siguiente captura marcado en rojo.


Al presionar Connect abrimos la conexión y podemos navegar en los objetos de la base tal como lo hacemos en Oracle, y ejecutar sentencias SQL.


Espero les sea útil.