¿Cómo hacer control de versiones para la base de datos SQL Server?

Resuelto Zack Peterson asked hace 16 años • 21 respuestas

Quiero que mis bases de datos estén bajo control de versiones.

Siempre querré tener al menos algunos datos allí (como menciona alumb : tipos de usuarios y administradores). A menudo también quiero una gran colección de datos de prueba generados para mediciones de rendimiento.

¿Cómo aplicaría el control de versiones a mi base de datos?

Zack Peterson avatar Aug 02 '08 01:08 Zack Peterson
Aceptado

Martin Fowler escribió mi artículo favorito sobre el tema, http://martinfowler.com/articles/evodb.html . Elijo no poner los volcados de esquema bajo control de versiones como sugieren alumb y otros porque quiero una manera fácil de actualizar mi base de datos de producción.

Para una aplicación web donde tendré una única instancia de base de datos de producción, utilizo dos técnicas:

Scripts de actualización de bases de datos

Una secuencia de scripts de actualización de la base de datos que contiene el DDL necesario para mover el esquema de la versión N a N+1. (Estos van en su sistema de control de versiones). Una tabla _version_history_, algo así como

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

obtiene una nueva entrada cada vez que se ejecuta un script de actualización que corresponde a la nueva versión.

Esto garantiza que sea fácil ver qué versión del esquema de la base de datos existe y que los scripts de actualización de la base de datos se ejecuten solo una vez. Nuevamente, estos no son volcados de bases de datos. Más bien, cada script representa los cambios necesarios para pasar de una versión a la siguiente. Son el script que aplica a su base de datos de producción para "actualizarla".

Sincronización de zona de pruebas para desarrolladores

  1. Un script para realizar copias de seguridad, desinfectar y reducir una base de datos de producción. Ejecute esto después de cada actualización a la base de datos de producción.
  2. Un script para restaurar (y modificar, si es necesario) la copia de seguridad en la estación de trabajo de un desarrollador. Cada desarrollador ejecuta este script después de cada actualización de la base de datos de producción.

Una advertencia: mis pruebas automatizadas se ejecutan en una base de datos con esquema correcto pero vacía, por lo que este consejo no se adaptará perfectamente a sus necesidades.

ESV avatar Aug 02 '2008 17:08 ESV

Existen varios productos comerciales que proporcionan esta funcionalidad:

  • Control de fuente SQL de RedGate
  • VersiónSQL
  • Apex SQL

Para usuarios de RedGate

Si está utilizando el producto SQL Compare de Red Gate, puede realizar comparaciones a nivel de objetos y generar scripts de cambios. También le permite exportar los objetos de su base de datos a una jerarquía de carpetas organizada por tipo de objeto, con un script de creación [nombre de objeto].sql por objeto en estos directorios. La jerarquía de tipos de objetos es así:

\Funciones
\Seguridad
\Seguridad\Roles
\Seguridad\Esquemas
\Seguridad\Usuarios
\Procedimientos almacenados
\Tablas

Si vuelca sus scripts en el mismo directorio raíz después de realizar cambios, puede usarlo para actualizar su repositorio SVN y mantener un historial de ejecución de cada objeto individualmente.

Dane avatar Aug 26 '2008 07:08 Dane

Éste es uno de los "problemas difíciles" que rodean al desarrollo. Hasta donde yo sé, no existen soluciones perfectas.

Si solo necesita almacenar la estructura de la base de datos y no los datos, puede exportar la base de datos como consultas SQL. (en Enterprise Manager: haga clic derecho en la base de datos -> Generar secuencia de comandos SQL. Recomiendo configurar "crear un archivo por objeto" en la pestaña de opciones) Luego puede enviar estos archivos de texto a svn y utilizar las funciones de registro y diferenciación de svn.

Tengo esto vinculado con un script por lotes que toma un par de parámetros y configura la base de datos. También agregué algunas consultas adicionales que ingresan datos predeterminados como tipos de usuario y el usuario administrador. (Si desea obtener más información sobre esto, publique algo y puedo colocar el script en algún lugar accesible)

Si también necesita conservar todos los datos, le recomiendo mantener una copia de seguridad de la base de datos y utilizar los productos Redgate ( http://www.red-gate.com/ ) para realizar las comparaciones. No son baratos, pero valen cada centavo.

alumb avatar Aug 01 '2008 19:08 alumb