Share via


Descripción general de la compilación e implementación de bases de datos

Actualización: noviembre 2007

Para implementar una nueva base de datos o cambios realizados en una base de datos existente del proyecto de base de datos en un servidor de base de datos, debe generar el proyecto de base de datos y, a continuación, implementarlo en el servidor de base de datos. El paso de generación ensambla las secuencias de comandos de definición de objetos y las secuencias de comandos anteriores o posteriores a la implementación en una sola secuencia de comandos de generación, utilizando las propiedades establecidas en la ventana de propiedades de proyecto. El paso de implementación ensambla la secuencia de comandos y, a continuación, la ejecuta para la base de datos de destino especificada. La acción de limpiar resultados de generación sólo elimina las secuencias de comandos de generación existentes. Si va a actualizar un servidor de ensayo o de producción, probablemente generará el proyecto de base de datos y, a continuación, modificará la secuencia de comandos de generación. Cuando haya realizado los ajustes y esté satisfecho con el resultado, puede implementar manualmente la secuencia de comandos de generación modificado en el entorno de producción.

Secuencias de comandos de implementación

Puede especificar secuencias de comandos que deban ejecutarse antes o después que las secuencias de comandos que crean o actualizan el destino. Puede tener una sola secuencia de comandos anterior a la implementación y una sola secuencia de comandos posterior a la implementación, pero puede incluir en estas otras secuencias de comandos. Para obtener más información, vea Trabajar con scripts de base de datos.

Puede ejecutar una secuencia de comandos de generación en bases de datos de destino distintas, cada una con su configuración. Por tanto, la secuencia de comandos de generación contiene instrucciones para establecer todas las propiedades de base de datos, aunque sus valores ya coincidan con los de las propiedades del proyecto de base de datos.

Consideraciones para la implementación en una base de datos existente

Al implementar cambios en una base de datos existente, debe tener en cuenta que algunos cambios podrían causar pérdida de datos. Si un cambio provocara la pérdida de los datos de la tabla, se cancelará la implementación, a menos que haya desactivado la casilla Bloquear implementación incremental si puede dar lugar a pérdida de datos en la ventana de propiedades del proyecto. Para obtener más información, vea Información general acerca de la configuración del proyecto de base de datos. Algunos ejemplos de cambios que provocarán pérdida de datos: quitar una tabla y volver a generarla, cambiar el tamaño de una columna (de char(100) a char(50) o de nchar(100) a char(100)) o cambiar la intercalación de una columna de caracteres.

Recuperarse de las implementaciones con errores

Team Edition for Database Professionals crea un punto de almacenamiento en el registro de transacciones y puede revertir a dicho punto si se produce un error en la implementación. Sin embargo, se pueden perder datos si la información de la base de datos se modifica durante la implementación entre el momento en que se creó el punto de almacenamiento y el momento en que se revirtió la base de datos. Por esta razón, si va a implementar en una base de datos compartida, debe considerar detenidamente la posibilidad de poner la base de datos en modo de usuario único antes de implementarla.

Nota:

Debe utilizar el modelo de recuperación completa para restaurar una base de datos a partir de una implementación con errores. El modelo de recuperación sencilla no es suficiente porque se requiere el registro de transacciones. Para obtener más información sobre los modelos de recuperación, vea Información general de los modelos de recuperación.

Archivos excluidos

Si excluye archivos del proyecto de base de datos, los objetos de base de datos definidos en esos archivos no se incluirán en la generación o implementación. Si aún está trabajando en uno o más objetos pero desea implementar el trabajo ya finalizado, puede excluir archivos para implementar sólo los elementos que ya están preparados. Podrá incluir posteriormente los archivos, cuando estén listos para ser implementados. La implementación actualizará la base de datos con los nuevos objetos sin modificar los objetos existentes (si no se han modificado en el proyecto).

Generación desde la línea de comandos

Además de realizar operaciones de generación, implementación o limpieza desde la interfaz de usuario de Visual Studio, también puede realizar estas operaciones como parte de una generación desde la línea de comandos, utilizando MSBuild.exe. Puede especificar los destinos de Build, Deploy, Rebuild, Clean, SQLBuild, SQLDeploy y CleanProject. De manera predeterminada, los procesos de generación e implementación usan las propiedades del proyecto definidas en el proyecto de base de datos (en el archivo .dbproj o .dbproj.user). Sin embargo, puede reemplazar estas propiedades en la línea de comandos o desde un archivo de respuesta.

Nota importante:

Debe cerrar Visual Studio antes de generar desde la línea de comandos. Si realiza una generación desde la línea de comandos mientras se ejecuta Visual Studio, es posible que no se detecten algunos errores.

Sintaxis de línea de comandos

Puede generar el proyecto de base de datos desde la línea de comandos con una sintaxis sencilla, como muestran los siguientes ejemplos:

  • MSBuild /target:Build miNombreDeSolución.sln
    Este ejemplo realiza la acción de generación en una solución denominada miNombreDeSolución.sln utilizando las propiedades de proyecto especificadas en los archivos de proyecto de la solución. Si la solución contiene uno o más proyectos de base de datos, se generarán con los demás componentes de la solución. Esta acción generará la secuencia de comandos necesaria para crear o actualizar la base de datos de destino, pero no implementará la secuencia de comandos. También puede generar un proyecto de base de datos concreto. La base de datos de destino Build incluye las secuencias de comandos anteriores o posteriores a la implementación en la secuencia de comandos de generación que se crea.

  • MSBuild /target:SQLBuild miNombreDeProyecto.dbproj
    Este ejemplo también realiza una acción de generación únicamente. Genera sólo un proyecto de base de datos individual denominado miNombreDeProyecto.dbproj. Las propiedades de proyecto del archivo .dbproj se utilizan para ensamblar la secuencia de comandos de generación. No se implementa el script. La base de datos de destino SQLBuild no incluye los scripts anteriores o posteriores a la implementación en la secuencia de comandos de generación que se crea.

  • MSBuild /target:Build /p:BuildScriptName=miNombreDeScript.sql miNombreDeProyecto.dbproj
    Este ejemplo también realiza una acción de generación únicamente. Genera sólo un proyecto de base de datos individual denominado miNombreDeProyecto.dbproj. Las propiedades de proyecto del archivo .dbproj se utilizan para ensamblar la secuencia de comandos de generación. La línea de comandos reemplaza la propiedad BuildScriptName y especifica un nombre nuevo para la secuencia de comandos de salida. Puede usar este enfoque si desea implementar la secuencia de comandos de generación en varios servidores. No se implementa la secuencia de comandos.

  • MSBuild /target:Deploy /property:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" miNombreDeProyecto.dbproj
    Este ejemplo muestra la forma de implementar el proyecto de base de datos, reemplazando el nombre de la base de datos de destino y la cadena de conexión.

  • MSBuild /target:rebuild /p:Configuration="Default" /p:DefaultDataPath="unidad:ruta de acceso\\" miNombreDeProyecto.dbproj
    En este ejemplo se muestra cómo volver a generar el proyecto de base de datos, especificar una configuración (Default) e invalidar la variable DefaultDataPath.

Nota importante:

Debe especificar el carácter de barra diagonal inversa ("\") final adicional para DefaultDataPath. De lo contrario, aparecerán advertencias al efectuar la generación y el proyecto de base de datos no se generará correctamente.

  • MSBuild /target:Deploy /property:BuildScriptName= miNombreDeScript.sql /property:outdir=rutaDeScriptDeCompilación /property:TargetDatabase=baseDeDatosDeDestinoActualizada;TargetConnectionString="Data Source=nombreDeInstancia\nombreDeBaseDeDatos;Integrated Security=True;Pooling=False" rutaDeAccesoAlProyecto\miNombreDeProyecto.dbproj
    En este ejemplo se muestra cómo implementar una base de datos desde un equipo distinto de aquel en el que se produjo la compilación. Por ejemplo, podría utilizar esta línea de comandos si tiene un equipo de compilación central que crea un script de compilación cada noche. Debe especificar el nombre del script de compilación, la ruta de acceso donde se puede buscar (outdir) el script de compilación, la base de datos de destino y la ruta de acceso y el nombre del archivo de proyecto de base de datos.

  • MSBuild @dbbuild.arf miNombreDeProyecto.dbproj
    Este ejemplo muestra la forma de utilizar un archivo de respuesta para proporcionar argumentos de línea de comandos. El archivo, dbbuild.arf, puede contener cualquier modificador de línea de comandos de MSBuild válido, incluidos los que reemplazan las propiedades de proyecto. Para obtener más información acerca de los archivos de respuesta, vea Archivos de respuesta MSBuild.

  • MSBuild /target:Rebuild miNombreDeProyecto.dbproj
    Este ejemplo vuelve a generar un proyecto o una solución aunque no se haya modificado desde la última vez que se generó.

  • MSBuild /target:Clean miNombreDeProyecto.dbproj
    Este ejemplo muestra la forma de eliminar cualquier secuencia de comandos de generación existente. Normalmente, esta acción se usa con otra acción de generación o implementación.

Nota:

Puede abreviar /target: como /t: y /property: como /p:.

Para obtener más información sobre las opciones de línea de comandos de MSBuild, vea Referencia de la línea de comandos de MSBuild.

Para obtener más información acerca de los archivos de respuesta, vea MSBuild Response.

Nota:

Para ejecutar MSBuild.exe, debe utilizar Visual Studio 2005 en el símbolo del sistema o ejecutar el archivo por lotes vsvars32.bat que se encuentra en la carpeta especificada en la variable de entorno %VS80COMNTOOLS%.

Propiedades de proyectos de base de datos

Algunas propiedades de proyecto de base de datos afectan a la forma de generar e implementar un proyecto de base de datos. Estas propiedades se almacenan en el archivo de proyecto de base de datos y en el archivo .user, y se pueden reemplazar con una instrucción de línea de comandos o un archivo de respuesta. Para obtener más información sobre propiedades de proyectos de base de datos, vea Información general acerca de la configuración del proyecto de base de datos.

Consideraciones de seguridad

Si otros usuarios pueden modificar la instancia de la base de datos de validación en tiempo de diseño, podrán agregar o cambiar objetos que acabarán en la secuencia de comandos de generación. Estos objetos (por ejemplo, desencadenadores DDL) se producirán en los resultados de la generación y se ejecutarán en el contexto de la persona que implemente la base de datos. No aparecerán necesariamente en el Explorador de soluciones o en la Vista de esquema. La Comparación de esquemas no detectará nada al comparar el proyecto de base de datos con la base de datos implementada, ya que la base de datos de validación en tiempo de diseño también contiene esos objetos.

Para minimizar el riesgo para la base de datos:

  • No comparta la instancia de la base de datos de validación en tiempo de diseño con otros usuarios.

  • Revise las secuencias de comandos de generación antes de implementarlas.

Vea también

Tareas

Cómo: Preparar scripts de compilación de base de datos

Cómo: Implementar cambios en bases de datos nuevas o existentes

Tutorial: Crear e implementar una nueva base de datos con control de versiones

Tutorial: Implementar cambios en una base de datos existente con control de versiones

Conceptos

Introducción a la terminología de Database Edition