Cuando tengo que generar rapidamente un diagrama con las relaciones de un modelo de datos de una base de datos suelo emplear SchemaSpy.
Es una de mis aplicaciones Java favoritas.
Con esta herramienta y mediante ingenieria inversa se generan una serie de ficheros HTML que almacenan toda la informacion del modelo de datos. Veamos como instalarla y usarla en Ubuntu.
Primero descargate el fichero .jar (schemaSpy_3.1.1.jar) desde el sitio web.
Al copiarlo al destino, yo me he creado esta ligadura simbolica.
$ ln -s schemaSpy_3.1.1.jar schemaSpy
Asi puedo referenciar al fichero schemaSpy_3.1.1.jar pero empleando solo «schemaSpy».
Para generar las graficas necesitamos de otro programa denominado «Graphviz»
pues internamente, se usa un ejecutable con el nombre dot para generar las imagenes.
Para instalar graphviz ejecutamos:
sudo apt-get install graphviz
Y obtenemos algo similar a lo siguiente:
root@soledad:~# sudo apt-get install graphviz
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo información de estado... Hecho
Se instalarán los siguientes paquetes extras:
tcl8.4 tk8.4
Paquetes sugeridos:
msttcorefonts graphviz-doc tclreadline
Se instalarán los siguientes paquetes NUEVOS:
graphviz tcl8.4 tk8.4
0 actualizados, 3 se instalarán, 0 para eliminar y 159 no actualizados.
Se necesita descargar 0B/3475kB de archivos.
Se utilizarán 9728kB de espacio de disco adicional después de desempaquetar.
¿Desea continuar [S/n]? S
Seleccionando el paquete tcl8.4 previamente no seleccionado.
(Leyendo la base de datos ...
133023 ficheros y directorios instalados actualmente.)
Desempaquetando tcl8.4 (de .../tcl8.4_8.4.12-1.1_i386.deb) ...
Seleccionando el paquete tk8.4 previamente no seleccionado.
Desempaquetando tk8.4 (de .../tk8.4_8.4.12-1_i386.deb) ...
Seleccionando el paquete graphviz previamente no seleccionado.
Desempaquetando graphviz (de .../graphviz_2.8-2.1ubuntu1_i386.deb) ...
Configurando tcl8.4 (8.4.12-1.1) ...
Configurando tk8.4 (8.4.12-1) ...
Configurando graphviz (2.8-2.1ubuntu1) ...
root@soledad:~#
Podemos comprobar las bases de datos que podemos utilizar ejecutando el siguiente comando:
jose@soledad:~/Desktop/SchemaSpy$ java -jar schemaSpy -dbhelp
SchemaSpy generates an HTML representation of a database's relationships.
Built-in database types and their required connection parameters:
db2:
IBM DB2 with the 'App' Driver
-db database name
db2net:
IBM DB2 with the Type 4 'Net' Driver
-host database host
-port port on database host
-db database name
firebird:
Firebird
-host hostname[:port] (possibly just localhost)
-db database name
hsqldb:
HSQLDB Server
-host hostname[:port] (possibly just localhost)
-db
informix:
InformixSQL
-host hostname and port
-db database name
-server database server
mssql:
Microsoft SQL Server
-host database server host
-port database port on host
-db database name
mssql05:
Microsoft SQL Server 2005
-host database server host
-port database port on host
-db database name
mysql:
MySQL
-host hostname[:port] (possibly just localhost)
-db database name
ora:
Oracle with OCI8 Driver
-db database name (from TNSNAMES.ORA)
orathin:
Oracle with Thin Driver
-host database host
-port port on database host
-db database SID as known on host
pgsql:
PostgreSQL
-host hostname[:port] (possibly just localhost)
-db database name
sybase:
Sybase Server (jdbc3)
-host database server host
-port database port on host
-db database name
sybase2:
Sybase Server (jdbc2)
-host database server host
-port database port on host
-db database name
udbt4:
DB2 UDB Type 4 Driver
-host database host
-port port on database host
-db database name
You can use your own database types by specifying the filespec of a .properties file with -t.
Grab one out of schemaSpy and modify it to suit your needs.
Sample usage using the default database type (implied -t ora):
java -jar schemaSpy.jar -db epdb -s sonedba -u devuser -p devuser -o output
En mi caso que uso Oracle me he creado el siguiente shell script con nombre schema.sh:
# Añadir el driver de conexion JDBC orathin para ORACLE
DRIVER=./ojdbc14.jar
export DRIVER
# Lanzamos el schemaSPY. Cambia valores si es necesario.
DATABASE_SID=tu_base_de_datos
HOST=host_base_datos
PORT=1521
USER=usuario
PASSWORD=password
OUTPUT=destino
export DATABASE_SID
export HOST
export PORT
export USER
export PASSWORD
export OUTPUT
java -jar schemaSpy -t orathin -cp ./ojdbc14.jar -db $DATABASE_SID -host $HOST -port $PORT -u $USER -p $PASSWORD -o $OUTPUT
Naturalmente cambia estos valores por los que utilices en tu caso.
Como uso oracle tambien he copiado el driver «ojdbc14.jar» en la misma carpeta donde he dejado el jar de schemaSpy. Si utilizas otra base de datos, coloca en esta carpeta el driver jdbc correspondiente.
Y nada mas!!!. Lo ejecutamos con:
./schema.sh
jose@soledad:~/Desktop/SchemaSpy$ ./schema.sh
Using database properties:
[schemaSpy]/net/sourceforge/schemaspy/dbTypes/orathin.properties
Connected to Oracle - Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning option
JServer Release 9.2.0.8.0 - Production
Gathering schema details....................................(4sec)
Writing/graphing summary..................(8sec)
Writing/graphing results....................................(29sec)
Wrote relationship details of 36 tables/views to directory 'OUTPUT' in 41 seconds.
Start with OUTPUT/index.html
Tras unos instantes, Ya tenemos los ficheros html generados con la documentacion del modelo.
Por cierto para generar un PDF con la documentacion del modelo tambien suelo usar Druid. Pero esta ya la veremos en algun otro post.
Hola me gustria saber como comenzar de cero a utilizar el scahmaspy ya que no se como se utilizan los ficheros con extension .jar
gracias
En principio un jar es como un zip, si le cambias la extension podras ver su contenido.
Estos jar realmente contienen clases de java ya compiladas.
Cuando quieres ejecutar un jar, que es ejecutable, es decir tiene dentro una clase que implementa un metodo «Main», tienes que ejecutar:
$ java -jar tu_fichero_jar
con eso ya arranca la aplicacion incluida.
Necesitas disponer de JRE (Java runtime instalado en tu maquina).
Y respecto a SchemaSpy poco mas, en la pagina web del programa creo que hay alguna documentacion o tutorial, pero basicamente has de invocarlo pasandole los parametros de tu base de datos y el ya solito te va a gernerar un HTML. no tiene tampoco mucho misterio.
Saludos.
tengo una duda con schema.sh:
pues realmente no se a que hace referencia el OUTPUT //es decir que deberìa colocar allÎ
Me podrian ayudar
Gracias
TENGO EL SIGUIENTE PROBLEMA: ?? QUE PUEDO HACER
Gathering schema details…
No tables or views were found in schema ‘orfeo’.
The schema does not exist in the database.
Make sure that you specify a valid schema with the -s option and that
the user specified (orfeo) can read from the schema.
Note that schema names are usually case sensitive.
85 schemas exist in this database.
Some of these «schemas» may be users or system schemas.
AAA521 ACZTMP ANONYMOUS APF851 ARM352 ARU051 BAHW1 BAHW2 BOR642 BVD458 BVP458 CAA327 CNTV CO CO_COMUN CONSUMO COR CT CTXSYS DBA_CNTV DBA_CNTV_PRUEBAS DBA_CNTV_PRUEBAS_1 DBA1 DBA12 DBSNMP DDL683 DES9I DEVOLUTIVO ERO318 FCC GCF293 HR HUGO JRG047 JRG793 LCB241 LM2 LOM267 LUNEL MAR184 MDSYS NOP323 ODM ODM_MTR OE OLAPSYS ORDPLUGINS ORDSYS ORFEO OUTLN PERFSTAT PM PR PR_COMUN PRTMP PRUEBAS PRUEBAXYZ QS QS_ADM QS_CB QS_CBADM QS_CS QS_ES QS_OS QS_WS RCS894 RH RMAN SAE SAE_COMUN SAI SAI_COMUN SAITMP SAM266 SCOTT SH SHDTMP SYS SYSTEM TOAD USU_CONSULTA WKPROXY WKSYS WMSYS XDB
These schemas contain tables/views that user ‘orfeo’ can see:
ACZTMP CNTV CO COR CO_COMUN CT CTXSYS DBA1 DBA12 DBA_CNTV DBA_CNTV_PRUEBAS DBA_CNTV_PRUEBAS_1 DES9I FCC HR LM2 MDSYS ODM ODM_MTR OE OLAPSYS ORDSYS ORFEO OUTLN PERFSTAT PM PR PRTMP PR_COMUN QS QS_CBADM QS_CS QS_ES QS_OS QS_WS RH RMAN SAE SAE_COMUN SAI SAITMP SAI_COMUN SCOTT SH SHDTMP SYS SYSTEM TOAD WKSYS WMSYS XDB
tenes que especificar con el parametro -s el esquema del que quieres generar la documentacion
el problema esta en
Failed to query Graphviz version information: java.io.IOException: Cannot run program «dot»: java.io.IOException: error=2, No such file or directory
me podrias ayudar???
Para dibujar las graficas emplea un comando llamado «dot», por lo visto no lo tienes instalado o lo tienes sin permisos de ejecución.
Lo comente aqui:
Para generar las graficas necesitamos de otro programa denominado «Graphviz«
pues internamente, se usa un ejecutable con el nombre dot para generar las imagenes.
Para instalar graphviz ejecutamos:
sudo apt-get install graphviz
– intenta instalar graphviz en tu sistema y ya deberia funcionarte el comando «dot»
Hola, primero que todo agradecerte por el post, muy completo.
Segundo
Para tinuviel: El problem radica en que en el script publicado, no se incluye el schema y el usuario con el que te intentas conectar tiene derecho de explorar más de un schema, por eso te los lista para que tu selecciones uno, en mi caso le he hecho algunos ajustes al scrip de forma que me permita definir un schema en particular y me ha quedado así:
#!/bin/bash
# Añadir el driver de conexion JDBC orathin para ORACLE
DRIVER=./ojdbc14for10.jar
#Definimos los valores de la conexión
DATABASE_SID=tu_base_de_datos
HOST=host_base_datos
PORT=1521
USER=usuario
PASSWORD=password
OUTPUT=directorio_en_que_deseas_que_se_genere_la_salida
SCHEMA=el_schema_que_quieres_exportar
java -jar schemaSpy_4.1.1.jar -t orathin -cp $DRIVER -db $DATABASE_SID -host $HOST -port $PORT -u $USER -p $PASSWORD -s $SCHEMA -o $OUTPUT
Espero que te haya podido servir.
Saludos desde Colombia.