Cómo: Comparar esquemas de base de datos

Este tema se aplica a:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

El tema es aplicable El tema es aplicable El tema no es aplicable El tema no es aplicable

Mediante Visual Studio Premium o Visual Studio Ultimate puede comparar dos esquemas de base de datos. Esos esquemas pueden estar representados por una base de datos, un proyecto de aplicación de capa de datos, un proyecto de base de datos o el resultado de la compilación de un proyecto de base de datos (un archivo .dbschema). Las entidades que se comparan se denominan origen y destino. Cuando finaliza la comparación de esquemas, los resultados aparecen en la ventana Comparación de esquemas. Por otra parte, Visual Studio genera un script de Lenguaje de definición de datos (DDL) que puede usar para sincronizar los distintos esquemas.

Si piensa comparar un proyecto de base de datos con una base de datos de destino periódicamente, puede agregar la comparación de esquemas al proyecto de base de datos. Entonces, puede volver a comparar los esquemas abriendo de nuevo esa comparación. Al guardar una comparación de esquemas, se guarda la información de conexión, las opciones específicas de la sesión y los valores para las variables SQLCMD. Los resultados no se guardan y volverán a generarse al abrir el archivo .scmp de la comparación de esquemas guardada.

Una vez que finaliza la comparación, puede realizar otros pasos:

  • Puede ver las diferencias estructurales entre las dos bases de datos. Para obtener más información, vea Ver diferencias de esquemas.

  • Puede hacer clic en Actualizar script de actualización para ver el script completo que se usará para sincronizar los esquemas si decide hacerlo.

  • Puede actualizar una parte o la totalidad del destino para que coincida con el origen. Para obtener más información, vea Sincronizar objetos de base de datos o de servidor.

  • Puede comparar los datos que residen en el destino y en el origen. Para obtener más información, vea Cómo: Comparar y sincronizar los datos de dos bases de datos.

Para obtener más información acerca de los escenarios de comparación de esquemas, vea Comparar y sincronizar esquemas de base de datos.

También puede comparar archivos .dbschema en un símbolo del sistema utilizando VSDBCMD.EXE. Por ejemplo, podría hacer esto para generar un script de actualización que actualice una base de datos de destino cuando no se tiene acceso directo al servidor de destino.

En este tema

Para comparar dos esquemas mediante la comparación de esquemas

  1. Si desea comparar dos esquemas pero no desea guardar su configuración como parte del proyecto de base de datos, siga estos pasos:

    1. Abra el menú Datos, elija Comparación de esquemas y haga clic en Nueva comparación de esquemas.

    2. Vaya al paso 3.

  2. Si desea comparar dos esquemas y guardar su configuración como parte del proyecto de base de datos, siga estos pasos:

    1. En el Explorador de soluciones, haga clic con el botón secundario en la carpeta Comparaciones de esquemas, seleccione Agregar y, a continuación, haga clic en Comparación de esquemas.

      Aparecerá el cuadro de diálogo Agregar nuevo elemento.

    2. En Nombre, escriba el nombre que desea asignar a la comparación de esquemas y haga clic en Agregar.

  3. Para especificar el origen y el destino que desea comparar, haga clic en Proyecto, en Base de datos o en Archivo de esquema de base de datos para cada esquema.

    Nota

    Puede especificar un archivo de esquema de base de datos para el esquema de destino, pero no puede actualizarlo. Para obtener una lista completa de los escenarios de comparación admitidos, vea Comparar y sincronizar esquemas de base de datos.

  4. Si hizo clic en Base de datos para el origen o el destino, conéctese al origen de datos haciendo clic en él en la lista.

    Si la base de datos no aparece, haga clic en Nueva conexión. En el cuadro de diálogo Propiedades de la conexión, identifique el servidor en el que reside el origen o el destino, y el tipo de autenticación que utilizará cuando se conecte a él. Opcionalmente, haga clic en una base de datos de ese servidor. Cuando termine, haga clic en Aceptar.

    Nota

    Una vez que haya establecido una conexión, ésta aparecerá en el Explorador de servidores, en Conexiones de datos.

  5. Si hizo clic en Archivo de esquema de base de datos para el origen o el destino, escriba la ruta de acceso y nombre de archivo o haga clic en Examinar para especificar un archivo.

  6. (opcional) Haga clic en Opciones para especificar qué objetos se comparan, qué tipos de diferencias se pasan por alto y lo que contendrá el script de actualización generado.

    Nota importanteImportante

    De forma predeterminada, las sesiones de Comparación de esquemas usarán las opciones que configure al abrir el menú Herramientas y hacer clic en Opciones. Si no desea omitir las propiedades extendidas, haga clic en Opciones para cambiar el valor correspondiente. Para obtener más información sobre cómo establecer las opciones para Comparación de esquemas, vea Cómo: Establecer opciones para comparar esquemas de base de datos.

  7. (opcional) Haga clic en Variables SQLCMD para especificar un archivo .sqlcmdvars que contiene una lista de las variables y sus valores.

    Nota

    Solo puede especificar variables SQLCMD al comparar dos proyectos (proyectos de base de datos, proyectos de servidor o proyectos de aplicación de capa de datos).

    Los valores se sustituirán en el proyecto de base de datos correspondiente cuando se comparen los esquemas.

  8. Haga clic en Aceptar.

    Se iniciará la comparación de esquemas.

    Nota

    Si desea detener una comparación de esquemas en curso, haga clic en Detener en la barra de herramientas.

Para comparar esquemas usando el modelo de automatización de Visual Studio

  1. Abra el menú Ver, elija Otras ventanas y, a continuación, haga clic en Ventana Comandos.

  2. En la ventana Comandos, escriba el siguiente comando:

    Data.NewSchemaComparison sourceIdentifier targetIdentifier
    

    Reemplace identificadorDeOrigen con uno de los elementos siguientes:

    • /ProviderType ConnectionBased /ConnectionString "miCadenaDeConexión"

    • /ProviderType ConnectionBased /ConnectionName miNombreDeConexión

    • /ProviderType ProjectBased /ProjectName miNombreDeArchivo.dbproj

    • /ProviderType FileBased /ProjectName miNombreDeArchivo.dbschema

    • /ProviderType FileBased /ProjectName miNombreDeArchivo.dacpac

    Reemplace identificadorDeDestino con uno de los elementos siguientes:

    • /ProviderType ConnectionBased /ConnectionString "miCadenaDeConexión"

    • /ProviderType ConnectionBased /ConnectionName miNombreDeConexión

    • /ProviderType ProjectBased /ProjectName miNombreDeArchivo.dbproj

    • /ProviderType FileBased /ProjectName miNombreDeArchivo.dbschema

    • /ProviderType FileBased /ProjectName miNombreDeArchivo.dacpac

    Si no especifica un origen y un destino, aparecerá el cuadro de diálogo Nueva comparación de esquemas. Para obtener más información sobre los parámetros para el comando Data.NewSchemaComparison, vea Referencia de los comandos de automatización para las características de base de datos de Visual Studio.

    Se compararán los objetos y configuraciones del origen y el destino especificados. Los resultados aparecerán en una sesión de Comparación de esquemas que puede guardar si lo desea. Para obtener más información sobre cómo ver los resultados o sincronizar los esquemas, vea Ver diferencias de esquemas y Sincronizar objetos de base de datos o de servidor.

Para guardar una comparación de esquemas por primera vez

  1. En el menú Archivo, haga clic en Guardar nombreDeComparaciónDeEsquemas.scmp.

    Aparecerá el cuadro de diálogo Guardar archivo como.

  2. Especifique la ruta de acceso y el nombre de archivo para la comparación de esquemas.

    Si la comparación forma parte de su proyecto de base de datos, se guardará en la carpeta SchemaComparisons de ese proyecto.

  3. Haga clic en Guardar.

    La comparación de esquemas se guardará en la ubicación que especificó.

Ver diferencias de esquemas

Puede determinar en qué difiere un esquema de origen de un esquema de destino comparándolos y viendo los resultados como un árbol en la ventana Comparación de esquemas. Por ejemplo, puede mostrar solo aquellos objetos que existen en el origen pero no en el destino. También puede ver detalles sobre las diferencias de determinados objetos y puede actualizar los resultados para reflejar los cambios recientes.

También puede ver los resultados como comandos Transact-SQL en un script que sincronizaría el destino con el origen. Puede mostrar este script en la ventana Script de actualización de esquema o en el editor Transact-SQL y también puede exportar el script a un archivo. Si decide actualizar el destino para que coincida con el origen, puede ejecutar inmediatamente el script para sincronizar los esquemas o puede modificar el script y ejecutarlo después. Para obtener más información, vea Sincronizar objetos de base de datos o de servidor.

Para filtrar los resultados por tipo

  1. En la barra de herramientas de Comparación de esquemas, haga clic en Filtrar.

  2. Haga clic en uno o más filtros para especificar qué conjuntos de resultados desea mostrar.

    Nota

    La configuración de filtro se guarda con el archivo .scmp y se conserva al modificar los esquemas de origen y de destino.

Para ver los cambios dentro de una definición de objeto

  • Haga clic en cualquier fila de la cuadrícula cuyo estado sea Nuevo, Falta o Diferente por forma.

Para actualizar los resultados de la comparación

  • En la barra de herramientas de Comparación de esquemas, haga clic en Actualizar.

    Se compararán de nuevo el origen y el destino, y se actualizarán los resultados de la comparación.

Para ver el script de sincronización

  • En el menú Datos, elija Comparación de esquemas y haga clic en Mostrar script de actualización de esquema.

    Nota

    Si Mostrar script de actualización de esquema no está disponible, será necesario actualizar los scripts que no se puedan generar para el destino especificado o que la comparación necesite. Por ejemplo, si el esquema de destino es un archivo .dbschema, no puede crear un script de actualización.

    Aparecerá la ventana Script de actualización de esquema y mostrará el script que puede usar para actualizar el destino de manera que coincida con el origen.

    Nota

    Si la ventana Script de actualización de esquema está abierta, también puede hacer clic en Actualizar scripts de actualización de esquema.

Para abrir el script de sincronización en el editor de Transact-SQL

  • En el menú Datos, elija Comparación de esquemas, elija Exportar a y haga clic en Editor.

    Aparecerá el editor de Transact-SQL y mostrará el script que puede usar para actualizar el destino de manera que coincida con el origen.

Para guardar el script de sincronización en un archivo

  1. En el menú Datos, elija Comparación de esquemas, elija Exportar a y haga clic en Archivo.

    Aparecerá el cuadro de diálogo Guardar script de actualización de esquema.

  2. En Nombre del objeto, escriba el nombre que desee asignar al script de sincronización y haga clic en Guardar.

    El script se guardará en el nombre de archivo especificado.

Sincronizar objetos de base de datos o de servidor

Después de comparar los esquemas del origen y el destino, puede sincronizar un esquema completo o solo los objetos de base de datos que especifique dentro de ese esquema. Para obtener más información, vea Comparar y sincronizar esquemas de base de datos.

Si el origen y el destino están en el mismo servidor, podría producirse un error al intentar sincronizar los esquemas. El error se produce porque los archivos de destino, como los archivos de grupos de archivos, no se pueden crear con el mismo nombre que el origen cuando ya existen en el servidor. Para resolver este problema, cambie la Acción de actualización a Omitir para los archivos que estén en conflicto.

Nota

Las bases de datos que se comparan se denominan origen y destino. Al sincronizar esquemas de base de datos, se actualiza el destino y el origen permanece sin cambios. Aunque puede especificar un archivo de proyecto (.dbschema) como destino, no puede actualizar un archivo de proyecto.

Para actualizar el esquema de destino

  1. Compare dos esquemas.

    Una vez finalizada la comparación, en la ventana Comparación de esquemas aparecerán los objetos de base de datos comparados. Cada fila representa un objeto de base de datos.

  2. (Opcional) En la columna Acción de actualización, especifique si desea aplicar u omitir la actualización para cada objeto de la lista de resultados.

    Las acciones de sincronización individuales no se realizan inmediatamente, sino que se almacenan para su ejecución por lotes en el paso siguiente.

    Nota

    Para restaurar los valores predeterminados de la columna Acción de actualización para todos los objetos de un tipo específico, haga clic con el botón secundario del mouse en el nodo correspondiente a ese tipo (por ejemplo, en el nodo Tablas) y, a continuación, haga clic en Restaurar valores predeterminados. Para establecer la columna Acción de actualización para todos los objetos de un tipo determinado en un estado concreto, haga clic con el botón secundario en el nodo correspondiente a ese tipo y, después, haga clic en Crear todos, Actualizar todos u Omitir todos.

  3. Para sincronizar objetos de base de datos que son distintos, faltan o son nuevos, realice una de las acciones siguientes:

    • Para actualizar el destino inmediatamente, haga clic en Escribir actualizaciones.

      Esta opción aplica el esquema de los objetos de base de datos del origen seleccionados a los objetos correspondientes del destino, salvo a los objetos marcados con Omitir. Esta sincronización requiere actualizar, crear o eliminar el objeto de destino.

      Nota importanteImportante

      Puede cancelar la operación mientras se actualiza el esquema; para ello, haga clic en Detener escritura en destino. Si detiene la actualización, no se propagará ningún cambio para la mayoría de los tipos de objeto. Sin embargo, es posible que los cambios parciales realizados a objetos Usuario o Función no se puedan deshacer, ya que estos objetos no se pueden incluir en transacciones.

    • Para revisar los cambios antes de actualizar el destino, use la ventana Script de actualización de esquema o haga clic en Exportar a editor.

      Esta opción genera un script Transact-SQL y lo abre en una ventana del editor de Transact-SQL. Puede examinar y, si es necesario, modificar el script antes de ejecutarlo en el destino. El script Transact-SQL generado coincide con el script que se ejecutaría si hiciera clic en Escribir actualizaciones.

      Nota

      Visual Studio no actualiza automáticamente los resultados que aparecen en la ventana Comparación de esquemas cuando finaliza la acción Escribir actualizaciones. En su lugar, se actualiza la barra de estado para sugerirle que haga clic en Actualizar. Este comportamiento le da la opción de comparar de nuevo los esquemas (esta acción puede tardar si los esquemas son grandes).

    • Para guardar los cambios en un archivo sin verlos en el editor de Transact-SQL, haga clic en Exportar a archivo.

      Esta opción genera un script Transact-SQL y lo guarda en el nombre de archivo especificado. El script generado coincide con el script que se ejecutaría si hiciera clic en Escribir actualizaciones. Puede adoptar este enfoque si otra persona actualizará el destino más tarde con el script que usted proporcione o si otra persona debe realizar cambios adicionales al script.

Comparar esquemas con VSDBCMD.EXE

Es posible que desee generar un script de implementación para una base de datos a la que no tiene acceso. Puede llevarlo a cabo utilizando VSDBCMD.EXE si tiene el archivo .dbschema para el proyecto que desea implementar y el archivo .dbschema que representa el estado de la base de datos de destino. Si no tiene el esquema de destino, pida al administrador de bases de datos que lo importe utilizando el segundo procedimiento de esta sección.

Puede realizar ambos procedimientos en cualquier equipo que tenga la herramienta VSDBCMD.EXE y los archivos auxiliares. Encontrará todos los archivos necesarios en la siguiente carpeta y sus subcarpetas: %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy. Para obtener más información, vea Referencia de la línea de comandos de VSDBCMD.EXE (Implementación e importación del esquema).

Para comparar los esquemas en un símbolo del sistema

  1. Abra un símbolo del sistema.

  2. Cambie las carpetas a la carpeta que contiene VSDBCMD.EXE.

  3. En el símbolo del sistema, escriba el siguiente comando: vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:ProjectName.dbschema /targetmodelfile:TargetDatabase.dbschema /DeploymentScriptFile:OutputFilename.sql /p:TargetDatabase="TargetDatabaseName"

    Reemplace ProjectName con el nombre del archivo .dbschema que creó al compilar el proyecto de base de datos. Reemplace TargetDatabase con el nombre del archivo .dbschema que contiene el esquema de la base de datos de destino. Reemplace OutputFilename con el nombre que va a dar a el script de implementación. Reemplace TargetDatabaseName por el nombre de la base de datos que desea actualizar.

    Nota

    Si desea incluir el script anterior y el posterior a la implementación del proyecto de base de datos, agregue un parámetro a la línea de comandos: /ManifestFile:ProjectName.deploymanifest. Encontrará el archivo .deploymanifest en una subcarpeta de la carpeta sql bajo la carpeta del proyecto.

  4. Ahora puede utilizar el archivo OutputFilename.sql para implementar las actualizaciones en el servidor destino o puede pedir al administrador de bases de datos que lo haga.

Para importar el esquema de destino

  1. Abra un símbolo del sistema.

  2. Vaya a la carpeta que contiene VSDBCMD.EXE.

  3. En el símbolo del sistema, escriba el siguiente comando: vsdbcmd.exe /a:Import /dsp:sql /model:TargetDatabase.dbschema /cs:ConnectionString

    Reemplace TargetDatabase con el nombre del archivo .dbschema que está importando de la base de datos de destino. Reemplace ConnectionString con una cadena de conexión a la base de datos de destino. Por ejemplo, puede especificar /cs:"Data Source=MyServer/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=MyDatabase".

    Cuando se completa el comando, se crea el archivo .dbschema. Contiene la definición de esquema para la base de datos de la que lo importó. Para obtener más información, vea Cómo: Importar un esquema desde un símbolo del sistema y Referencia de la línea de comandos de VSDBCMD.EXE (Implementación e importación del esquema).

Vea también

Tareas

Cómo: Comparar y sincronizar los datos de dos bases de datos

Conceptos

Comparar y sincronizar esquemas de base de datos

Historial de cambios

Fecha

Historial

Motivo

Julio de 2010

Agregada información sobre cómo utilizar VSDBCMD.EXE para comparar esquemas desde un símbolo del sistema.

Comentarios de los clientes.