El rincón de JMACOE

Comparación de esquema de SQL con Visual Studio 2010

A menudo tenemos que comparar bases de datos a través de dos entornos diferentes (e incluso a veces en el mismo entorno) para identificar las diferencias de objetos de esquema, de modo que una base de datos puede ser puesta en sincronía con otra. Por ejemplo, solemos hacer el desarrollo dentro de un entorno de desarrollo y luego durante la fase de preparación se compara la base de datos de desarrollo con la base de datos de producción/QA/UAT para identificar las diferencias y generar scripts de los objetos de esquema para la sincronización o despliegue incremental. ¿Cómo podemos comparar objetos de esquemas entre bases de datos y generar scripts de sincronización o despliegue incremental?

Aunque hay muchas herramientas disponibles para la comparación de esquemas (algunos gratuitos y algunos que necesitas comprar) voy a hablar de Microsoft Visual Studio Database edition para la comparación de esquemas. Microsoft Visual Studio Database edition y ofrece varias posibilidades para el desarrollo de bases de datos, por ejemplo, puede crear una representación sin conexión de una base de datos para bases de datos de desarrollo y control de versiones, pruebas unitarias de base de datos, análisis de código, comparación de esquemas, comparación de datos, etc.

En esta demostración voy a mostrar cómo funciona la comparación de esquemas de Visual Studio 2010 Ultimate edition aunque se puede hacer lo mismo también con Visual Studio 2005/2008 Database edition.

Abre el IDE (Integrated Development Studio) del Microsoft Visual Studio y verás el menú de «Data» (datos) en la barra de menús en función de la edición de Microsoft Visual Studio que hayas instalado (para más información, haga clic aquí ). Selecciona Schema Compare (comparación de esquemas) en el menú de datos y luego New Schema comparison… (Nueva comparación de esquemas), como se muestra a continuación.

Luego veras un cuadro de diálogo como este, aquí es necesario especificar el esquema origen y el esquema destino. El origen o de destino puede ser un proyecto de base de datos (representación sin conexión de la base de datos) o la propia base de datos (para lo cual se necesita establecer una conexión a la instancia de SQL Server) o un archivo *. dbschema. Incluso puede guardar la selección como archivo *. SCMP que puedes utilizar más adelante.

En el momento de hacer clic en el botón Aceptar, se comenzará a hacer la comparación. Te darás cuenta de una nueva barra de herramientas, algunas de las opciones de esta nueva barra de herramientas son: se puede filtrar el resultado de la comparación como se puede ver en la imagen de abajo, puede sincronizar el destino escribiendo las actualización al mismo (echa un vistazo a la nota líneas abajo antes de hacer esto), puedes exportar el script de sincronización/actualización incremental a un archivo o al editor.

La pantalla de resultados de la comparación de esquemas se verá como la imagen que se muestra a continuación. En el panel superior hay cuatro columnas; El Status indica el tipo de cambio de cada uno, es decir de cada objeto. Si el objeto es nuevo, faltante, igual o tiene una definición diferente. La siguiente columna muestra el nombre del objeto en el origen. La tercera columna te permite especificar el tipo de acción que deseas realizar durante la sincronización, por ejemplo, si desea omitir la actualización en el destino, actualizar el destino, eliminar el objeto en el destino sino se encuentra en el origen, crear el objeto en el destino si no existe en el destino. Y por último, la cuarta columna muestra el nombre del objeto en el destino.

El siguiente panel muestra la definición del objeto del objeto seleccionado. Se resultan las diferencias con distintos colores, el significado de la codificación de colores está disponible en la parte inferior de este panel como se puede notar en la siguiente captura de pantalla.

El panel inferior muestra el script de actualización del esquema en el destino en función de la selección de «Update Action» (Acción de actualización) de cada objeto. Si no puedes ver o deseas actualizar, haces clic en el botón «Refresh Update Script» (Refrescar Script de Actualización) en la barra de herramientas.

La herramienta de Comparación de esquema te permite especificar las opciones de comparación de esquemas diferentes, así como especificar qué tipos de objetos se van a comparar, por defecto las propiedades extendidas son ignoradas por la herramienta de comparación de esquemas, pero puedes modificar este comportamiento predeterminado, en las opciones de comparación:

Nota: Siempre y cuando el origen tiene nuevos objetos no hay nada que preocuparse, pero si ha cambiado el nombre los objetos o de las columnas en el origen podría incurrir en la pérdida de datos durante la actualización del destino. Por ejemplo, en la imagen del resultado de la comparación de esquemas se puede ver que la columna de EmployeeID ha sido renombrada a BusinessEntityID, por lo que actualizar el destino implica eliminar la columna de EmployeeID y agregar la columna BusinessEntityID que no tiene datos, aunque la columna de EmployeeID tiene datos en ella. Por lo tanto, se recomienda revisar los scripts de despliegue y hacer una copia de seguridad de la base de datos de destino antes de actualizar la base de datos destino. Puede cambiar este comportamiento predeterminado de pérdida de datos en las opciones de comparación de esquemas, como se mencionó anteriormente, y marcar «Block schema updates if data loss might occur » (Bloquear actualizaciones de esquema si la pérdida de datos puede ocurrir) en las opciones de generación de scripts y el script generado se verá como esto si causara alguna pérdida de datos.

/*
The column [HumanResources].[Employee].[ContactID] is being dropped, data loss could occur.
The column [HumanResources].[Employee].[EmployeeID] is being dropped, data loss could occur.
The column [HumanResources].[Employee].[ManagerID] is being dropped, data loss could occur.
The column [HumanResources].[Employee].[Title] is being dropped, data loss could occur.
The column [HumanResources].[Employee].[BusinessEntityID] on table [HumanResources].[Employee] must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
The column [HumanResources].[Employee].[JobTitle] on table [HumanResources].[Employee] must be added, but the column has no default value and does not allow NULL values. If the table contains data, the ALTER script will not work. To avoid this issue, you must add a default value to the column or mark it as allowing NULL values.
*/
IF EXISTS (select top 1 1 from [HumanResources].[Employee]) RAISERROR ('Rows were detected. The schema update is terminating because data loss might occur.', 16, 127) WITH NOWAIT
GO

Comparte y diviertete: