|
|
| Productos Soluciones Soporte y Servicios Contáctenos | MySybase Sybase.com |
|
Generación de Sentencias DDL con ddlgen
Una Mirada Más de Cerca a la Nueva Herramienta Cliente de ASECuando Adaptive Server Enterprise (ASE) 12.5 fue liberado a mediados del año 2001, una de sus nuevas características fue una nueva herramienta cliente llamada ddlgen. Esta hace lo que su nombre sugiere: Genera sentencias DDL Transact-SQL para los objetos de una base de datos existente. En otras palabras, ddlgen realiza ingeniería reversa del esquema. Recuerde que "DDL" significa "Data Definition Language" (Lenguaje de Definición de Datos) y es un nombre colectivo para las sentencias que manipulan el esquema (pero no los datos de una base de datos) tales como create table, create procedure, etc. Seguramente cada DBA verá el potencial de esta herramienta de ingeniería reversa; en éste documento discutiremos algunos detalles técnicos de ddlgen. Dónde Encontrar ddlgenddlgen es una aplicación Java la cual es ejecutada desde la línea de comandos del sistema operativo. (No hay que confundir esto con la muy promovida característica de "Java en ASE": ddlgen se ejecuta fuera de ASE). La ubicación de ddlgen depende de la versión de ASE:
Aunque ddlgen está disponible para los DBAs como una herramienta independiente, también es usada por otras aplicaciones Sybase, incluyendo la versión Java de Sybase Central y la herramienta sybmigrate (nueva en ASE 12.5.0.1. Para mayor información sobre sybmigrate vea el documento 'Sybase ASE 12.5: Migración a Nuevos Tamaños de Página Usando Sybmigrate', DocId=10123). Cómo Trabaja ddlgenddlgen puede realizar ingeniaría reversa de objetos individuales de la base de datos o de bases de datos enteras de un servidor ASE. Por ejemplo ("%" indica el prompt de Unix; "#" indica un comentario):
ddlgen imprimirá todas las sentencias create necesarias para recrear el esquema actual de la base de datos prod (note que ddlgen no incluye ningún comando drop). Por defecto, ddlgen imprime las sentencias DDL generadas hacia la salida estándar. Esto rápidamente se convierte en una gran cantidad de texto: aún para una tabla simple de una columna, ddlgen genera 21 líneas de salida (en parte debido a que incluye líneas adicionales con comentarios para una mejor legibilidad del DDL).
Opciones de Línea de Comandoddlgen acepta un número de opciones de línea de comando que le permiten realizar ingeniería reversa de objetos específicos. Las opciones más importantes son -D, para especificar una base de datos; -T, para especificar el tipo de objeto de base de datos, y -N para especificar un patrón para el nombre de un objeto. Por ejemplo, para generar el DDL de todas las tablas de usuario en la base de datos prod cuyos nombres comiencen con la letras "A":
Esta es la lista completa de tipos de objeto que pueden ser usados con la opción -T:
Como se muestra en la tabla de arriba, a los objetos a nivel de servidor, tales como logins y roles también se les puede realizar ingeniería reversa:
Las opciones de línea de comando -X y -F permiten filtración adicional en combinación con -T. El conjunto completo de opciones de comando de ddlgen es el siguiente: Ingeniería Reversa de Tablas #tempAunque esta capacidad no está documentada, ddlgen generará DDL para tablas temporales que pertenezcan a otras sesiones. Para llevar a cabo esto, especifique la base de datos tempdb y use '%' o especifique el nombre completo de la tabla:
Aparte de escribir consultas sobre las tablas del sistema de tempdb, prácticamente no existe ninguna otra manera de llevar a cabo ingeniería reversa de tablas temporales. Algunos Consejos
Qué no Hace ddlgenA pesar de su utilidad, no es sorpresa el hecho de que ddlgen tenga también sus limitaciones:
Dependencias Entre ObjetosIdealmente, el DDL generado se debe poder ejecutar sin errores. Un problema clásico para las herramientas de ingeniería reversa son las dependencias entre objetos de la base de datos. Por ejemplo, cuando el procedimiento P lee de la tabla T, el DDL de la tabla T debió haber sido generado antes que el DDL del procedimiento P -- ya que de otra manera se generará un error al ejecutar el DDL de P ya que la tabla T no existe. ddlgen lleva a cabo un esfuerzo razonable al tomar en cuenta las dependencias entre objetos, pero no es perfecto. Cuando su DDL generado arroja errores, el remedio más simple es ejecutar el DDL otra vez. Los objetos que no pudieron ser creados la primera vez porque otros objetos no existían, serán creados la segunda vez (esto es posible ya que ddlgen no incluye comandos drop en los DDLs generados). La desventaja de éste método es que es desordenado. Durante la segunda ejecución del DDL, para cada tabla, índice, procedimiento almacenado, etc. habrá un mensaje de error indicando que el objeto ya existe. Esto hará más difícil determinar si todos los objetos han sido finalmente creados de manera correcta. De manera alterna, usted también puede realizar explícitamente ingeniería reversa de los objetos por tipo usando las opciones -T y -F (ver arriba). El Problema Clásico de la "Tabla del Procedimiento"Un problema clásico es el del procedimiento almacenado que hace referencia a una tabla creada por fuera del procedimiento. ddlgen no resuelve este problema. Ejemplo:
La sentencia create table debe ejecutarse primero, o la creación del procedimiento almacenado p fallará, ya que hace falta la tabla #t1. ddlgen llevará a cabo la ingeniería reversa del procedimiento p, pero este no incluirá la sentencia create table. Esto significa que cuando el DDL generado sea ejecutado, resultará en un error ya que la tabla #t1 no existe. Esto se debe a que ddlgen obtiene el texto SQL de la tabla del sistema syscomments, el cual no contiene la sentencia create table y que esta no es parte del texto SQL del procedimiento almacenado. Los DBAs deberán tratar estos casos manteniendo sus propios DDLs, que contengan ambos comandos, el create table y el create procedure. Compatibilidad con Versiones AnterioresComo se mencionó en la introducción, ddlgen fue introducido en ASE 12.5. Sin embargo, ddlgen también trabaja sobre versiones anteriores de ASE, a pesar de ciertas limitantes. Por favor note que la información que sigue fue determinada empíricamente. ddlgen es formalmente soportada sólo en ASE 12.5 o posterior. Hasta ahora se pudo determinar que ddlgen trabaja bien sobre ASE 12.0, para todos los tipos de objetos. Sobre ASE 11.9 y 11.5, a algunos objetos se les puede aplicar ingeniería reversa, pero a otros no. Por ejemplo, a las tablas de usuario no se les puede aplicar ingeniería reversa en servidores anteriores al 12.0 ya que ddlgen espera encontrar la columna sysindexes.identitygap (así que el ddlgen falla). A otros objetos como índices, logins, roles, o cachés, se les puede aplicar ingeniería reversa exitosamente en servidores 11.9 y 11.5. No se ha podido correr ddlgen sobre ASE 11.0; algunos problemas de conectividad hacen que ddlgen no se pueda conectar exitosamente.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Inicio Sobre MTBASE Sobre Sybase Empleos en MTBASE Mapa del Sitio Aspectos Legales y Políticas de Privacidad |