Comparar y sincronizar esquemas de base de datos
Este tema se aplica a:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Puede utilizar Visual Studio Premium o Visual Studio Ultimate para comparar un esquema de destino con un esquema de origen. En cada diferencia, puede especificar si desea actualizar el destino para que coincida con el origen. Puede escribir estas actualizaciones directamente en el destino o bien puede exportar el script de actualización al editor de Transact-SQL o a un archivo. También puede guardar sus comparaciones, ya sea como parte del proyecto de base de datos o bien como un archivo independiente. Si guarda las comparaciones, puede repetirlas o volver a sincronizar el mismo origen y destino con más facilidad.
Tipos de comparaciones de esquema
Puede comparar las siguientes entidades que contienen definiciones de esquema de la base de datos:
Base de datos SQL Server: base de datos que se ejecuta en una instancia de SQL Server 2008 o SQL Server 2005
Proyecto de base de datos: proyecto que contiene definiciones para una base de datos SQL Server 2008 o SQL Server 2005 y que genera un archivo .dbschema cuando se compila
Proyecto de servidor: proyecto que contiene definiciones para los objetos de servidor y los objetos de la base de datos maestra en un servidor SQL Server 2008 o SQL Server 2005 y que genera un archivo .dbschema cuando se compila
Proyecto de aplicación de capa de datos (DAC): proyecto que genera un archivo .dacpac cuando se compila
Archivo .dbschema: resultado de la compilación de un proyecto de base de datos o de servidor
Archivo .dacpac: resultado de la compilación de un proyecto de componente de aplicación de capa de datos (DAC)
En la siguiente tabla se muestran los tipos de esquemas que puede comparar y se indica si puede escribir actualizaciones en el destino:
Origen vertical, destino horizontal |
Base de datos |
Proyecto de base de datos |
Archivo .dbschema |
Proyecto de servidor |
Proyecto DAC |
Archivo .dacpac |
---|---|---|---|---|---|---|
Base de datos |
Comparar + Actualizar |
Comparar + Actualizar |
Comparar |
Comparar + Actualizar |
Comparar |
Comparar |
Proyecto de base de datos |
Comparar + Actualizar |
Comparar + Actualizar |
Comparar |
Ninguno |
Ninguna |
Ninguna |
Archivo .dbschema |
Comparar + Actualizar |
Comparar + Actualizar |
Comparar |
Comparar + Actualizar |
Ninguna |
Ninguna |
Proyecto de servidor |
Comparar + Actualizar |
Ninguno |
Comparar |
Comparar + Actualizar |
Ninguna |
Ninguna |
Proyecto DAC |
Comparar |
Ninguno |
Ninguno |
Ninguno |
Comparar + Actualizar |
Comparar |
Archivo .dacpac |
Comparar |
Ninguno |
Ninguna |
Ninguna |
Comparar + Actualizar |
Comparar |
Para leer esta tabla, busque la fila de su esquema de origen en la columna situada más a la izquierda. Luego, busque la columna del esquema de destino en la fila superior. La intersección de esa columna y esa fila proporciona información sobre si puede comparar solo el origen y el destino, o si compara y a continuación actualiza opcionalmente el esquema de destino.
No puede comparar un esquema del servidor con un esquema de la base de datos ni un esquema de la base de datos con un esquema del servidor. Esto incluye los esquemas con el formato de un archivo .dbschema. Por ejemplo, puede comparar un proyecto de servidor con un archivo .dbschema creado a partir de un proyecto de servidor.
Solo puede comparar dos proyectos de base de datos si se encuentran dentro de la misma solución en Visual Studio.
![]() |
---|
Si bien puede comparar una base de datos de origen con un proyecto de base de datos de destino (.dbproj), debería cambiar el proyecto de base de datos e implementar esos cambios en la base de datos. Al cambiar el proyecto (.dbproj) y, a continuación, implementarlo, reduce el riesgo de que los cambios entren en conflicto con los cambios realizados por otro miembro del equipo, ya que el proyecto está bajo el control de versiones. |
Evitar la pérdida de datos al actualizar los esquemas de la base de datos
Al utilizar Comparación de esquemas para actualizar los esquemas de la base de datos, se pueden perder datos. Para evitarlo, debe prestar mucha atención a los nombres de los objetos del origen y del destino, especialmente justo antes de actualizar el esquema en el destino.
Por ejemplo, podría cambiar el nombre de una tabla Order_Details a OrderDetails en la base de datos de origen pero no en la base de datos de destino y, a continuación, comparar las dos bases de datos. Antes de sincronizarlas, los datos en ambas tablas son idénticos. Sin embargo, al actualizar el destino, se elimina la tabla Order_Details y se crea una nueva tabla denominada OrderDetails. Podría perder todos los datos de la tabla Order_Details.
Para ayudar a evitar la pérdida de datos, puede abrir el menú Herramientas, hacer clic en Opciones y activar la casilla Bloquear actualizaciones de esquema si pueden dar lugar a pérdida de datos. Además, siempre debería realizar una copia de seguridad de la base de datos antes de escribir actualizaciones en ella. También puede especificar opciones para una comparación al comparar esquemas. Para obtener más información, vea Cómo: Establecer opciones para comparar esquemas de base de datos.
![]() |
---|
Si utiliza la refactorización para cambiar el nombre de los objetos del proyecto de base de datos, el registro de refactorización también ayuda a evitar la pérdida de datos cuando se compila e implementa la base de datos. Este registro mantiene la intención de los cambios. Por ejemplo, se puede cambiar el nombre de las tablas en su posición. |
Diferencias entre la comparación de esquemas y la implementación incremental
Cuando se implementan actualizaciones en una base de datos existente, el proceso es muy similar al proceso que se sigue al usar Comparación de esquemas para sincronizar dos esquemas de base de datos. Sin embargo, Comparación de esquemas presenta una diferencia importante: de forma predeterminada, Comparación de esquemas omite las propiedades extendidas.
Puede cambiar las opciones de Comparación de esquemas para todas las sesiones de Comparación de esquemas o bien para la sesión actual si no desea omitir las propiedades y los permisos extendidos. Para obtener más información, vea Cómo: Establecer opciones para comparar esquemas de base de datos.
Tareas comunes
En la siguiente tabla, encontrará descripciones de tareas comunes que admiten este escenario y vínculos para obtener más información acerca de cómo puede completar correctamente dichas tareas.
Tareas comunes |
Contenido adicional |
---|---|
Conseguir experiencia práctica: puede seguir los tutoriales preliminares para familiarizarse con el método de comparación de dos bases de datos o de una base de datos y un proyecto (.dbproj). |
Tutorial: Comparar los esquemas de dos bases de datos Tutorial: Comparar los esquemas de una base de datos y un proyecto de base de datos |
Establecer opciones para controlar cómo se comparan los esquemas: puede configurar detalles que controlan cómo se comparan los esquemas. Puede omitir tipos específicos de diferencias, como el espacio en blanco, los grupos de archivos y los comentarios. También puede omitir categorías de objetos, como usuarios o inicios de sesión. Puede especificar opciones que controlan el script de actualización generado. |
Cómo: Establecer opciones para comparar esquemas de base de datos |
Comparar objetos de base de datos o de servidor y opcionalmente actualizar el destino para coincidir con el origen: especifica los esquemas de origen y de destino para comparar; los resultados aparecen en la ventana Comparación de esquemas. Puede ver los detalles de las diferencias y el script de actualización que se utilizará para sincronizar la base de datos. Puede guardar cada comparación de esquemas en el proyecto o en un archivo .scmp independiente. Especifica las acciones para cada diferencia entre los esquemas de origen y de destino y, a continuación, puede escribir las actualizaciones en el destino. También puede exportar el script de actualización al editor de Transact-SQL o a un archivo para revisarlo antes de aplicar los cambios en el destino. |
Cómo: Comparar esquemas de base de datos Introducción a los resultados de la comparación de esquemas |
Solucionar los problemas: puede obtener más información sobre cómo solucionar problemas comunes que podría encontrar al comparar y sincronizar esquemas de base de datos. |
Introducción a los resultados de la comparación de esquemas
La ventana Comparación de esquemas muestra cuatro columnas para cada objeto que se compara. En la tabla siguiente se describe el contenido de cada columna.
Columna |
Valores |
---|---|
Estado |
Por ejemplo, podría cambiar una definición de tabla en el esquema de origen pero no el esquema de destino y, a continuación, comparar los esquemas. Las tablas se marcarán como Definición diferente y el esquema que contiene estas tablas se marcará como Dependencias diferentes. |
nombreDeOrigen ({proyecto, base de datos o archivo de proyecto (.dbschema) de origen}) |
El nombre del proyecto, la base de datos o el archivo de proyecto de origen que compara. |
Acción de actualización |
![]()
La acción predeterminada viene determinada por el estado.En los objetos con estado Igual, la acción predeterminada es Omitir y no se puede cambiar.En los objetos con estado Nuevo, la acción predeterminada es Crear, pero puede especificar Omitir.En los objetos con estado Falta, la acción predeterminada es Quitar, pero puede especificar Omitir.En Definición diferente, la acción predeterminado es Actualizar, pero puede especificar Omitir.En Objetos diferentes, la acción predeterminado es Omitir y no puede cambiarla (en este caso, el objeto es igual, pero contiene objetos que son nuevos, que faltan o que han cambiado).
|
nombreDeDestino ({proyecto, base de datos o archivo de proyecto (.dbschema) de destino}) |
El nombre del proyecto, la base de datos o el archivo de proyecto de destino que compara. |
Escenarios relacionados
Comparar y sincronizar los datos de una o más tablas con datos de una base de datos de referencia
Puede utilizar Comparación de datos para sincronizar los datos entre las tablas de las bases de datos de origen y de destino.Cambiar el nombre de todas las referencias a un objeto de base de datos
Puede utilizar la refactorización para cambiar el nombre de todas las referencias a un objeto de base de datos. Al compilar e implementar se usa el registro de refactorización para mantener la intención de los cambios y reducir el riesgo de pérdida de datos.Compilar e implementar bases de datos en un entorno de desarrollo aislado
Puede actualizar la base de datos de destino utilizando Comparación de esquemas, pero sería preferible que los equipos cambiasen el proyecto de base de datos y compilasen e implementasen estos cambios en la base de datos de destino. Si sigue esta práctica, mantiene la intención de las operaciones de refactorización que realice en el proyecto de base de datos. También reduce el riesgo de que los cambios se sobrescriban con los cambios de otro miembro del equipo que también use Comparación de esquemas para actualizar la base de datos.
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Junio de 2010 |
Información agregada sobre cómo leer la primera tabla del tema para solucionar los problemas de los clientes. |
Comentarios de los clientes. |
Agosto de 2010 |
Aclarado que se pueden comparar los proyectos solo si se encuentran en la misma solución. |
Comentarios de los clientes. |