significa - Versiones de la base de datos de SQL Server
restaurar base de datos sql server 2012 a 2008 (29)
+1 para todos los que hayan recomendado las herramientas de RedGate, con una recomendación adicional y una advertencia.
SqlCompare también tiene una API documentada decentemente: así, por ejemplo, puede escribir una aplicación de consola que sincronice su carpeta de scripts controlados de origen con una base de datos de pruebas de integración de CI en el registro, de modo que cuando alguien verifique un cambio en el esquema desde su carpeta de scripts se implementa automáticamente junto con el cambio de código de la aplicación correspondiente. Esto ayuda a cerrar la brecha con los desarrolladores que olvidan propagar cambios en su base de datos local hasta un DB de desarrollo compartido (aproximadamente la mitad de nosotros, creo :)).
Una advertencia es que con una solución de script o de otro tipo, las herramientas de RedGate son lo suficientemente suaves como para que sea fácil olvidar las realidades de SQL subyacentes a la abstracción. Si cambia el nombre de todas las columnas de una tabla, SqlCompare no tiene forma de asignar las columnas antiguas a las nuevas columnas y eliminará todos los datos de la tabla. Generará advertencias, pero he visto a gente hacer clic más allá de eso. Creo que hay un punto general que vale la pena señalar: hasta ahora, solo se puede automatizar la versión y actualización de la base de datos, ya que las abstracciones son muy permisivas.
Quiero tener mis bases de datos bajo control de versión. ¿Alguien tiene algún consejo o artículos recomendados para que comience?
Siempre alumb tener al menos algunos datos allí (como se menciona alumb : tipos de usuarios y administradores). También a menudo querré una gran colección de datos de prueba generados para las mediciones de rendimiento.
Acabamos de empezar a usar Team Foundation Server. Si su base de datos es de tamaño mediano, entonces Visual Studio tiene algunas integraciones de proyectos agradables con funciones integradas de comparación, comparación de datos, refactorización de base de datos, marco de prueba de base de datos e incluso herramientas de generación de datos.
Pero, ese modelo no se ajusta a bases de datos muy grandes o de terceros (que cifran objetos) muy bien. Entonces, lo que hemos hecho es almacenar solo nuestros objetos personalizados. Visual Studio / Team Foundation Server funciona muy bien para eso.
Aquí en Red Gate ofrecemos una herramienta, red-gate.com/products/SQL_Source_Control/index.htm , que utiliza la tecnología de comparación de SQL para vincular su base de datos con un repositorio de TFS o SVN. Esta herramienta se integra en SSMS y le permite trabajar como lo haría normalmente, excepto que ahora le permite confirmar los objetos.
Para un enfoque basado en migraciones (más adecuado para implementaciones automatizadas), ofrecemos SQL Change Automation (anteriormente denominado ReadyRoll), que crea y administra un conjunto de scripts incrementales como un proyecto de Visual Studio.
En SQL Source Control es posible especificar tablas de datos estáticos. Estos se almacenan en el control de origen como instrucciones INSERT.
Si está hablando de datos de prueba, le recomendamos que genere datos de prueba con una herramienta o mediante un script posterior a la implementación que defina, o simplemente restaure una copia de seguridad de producción al entorno de desarrollo.
Cada base de datos debe estar bajo control de código fuente. Lo que falta es una herramienta que guarde automáticamente todos los objetos de la base de datos, y los "datos de configuración", que se pueden agregar a cualquier sistema de control de origen. Si está utilizando SQL Server, mi solución está aquí: http://dbsourcetools.codeplex.com/ . Que te diviertas. - Nathan.
Con VS 2010, usa el proyecto Base de datos.
- Guarde su base de datos
- Realice cambios a los scripts o directamente en su servidor db
- Sincronizar usando Datos> Comparación de esquemas
Hace una solución de versionamiento de DB perfecta, y hace que la sincronización de DB sea una brisa.
Debido a que nuestra aplicación tiene que funcionar en múltiples RDBMS, almacenamos la definición de nuestro esquema en el control de versiones utilizando el formato Torque (XML) neutral para la base de datos. También controlamos por versión los datos de referencia de nuestra base de datos en formato XML de la siguiente manera (donde "Relación" es una de las tablas de referencia):
<Relationship RelationshipID="1" InternalName="Manager"/>
<Relationship RelationshipID="2" InternalName="Delegate"/>
etc.
Luego, usamos herramientas locales para generar la actualización del esquema y los scripts de actualización de datos de referencia necesarios para pasar de la versión X de la base de datos a la versión X + 1.
Echa un vistazo a DBGhost DBGhost . He utilizado de forma automatizada durante 2 años y funciona muy bien. Permite que nuestras compilaciones de base de datos se realicen de forma muy similar a como ocurre una compilación de Java o C, excepto la base de datos. Sabes a lo que me refiero.
El producto de comparación SQL de Red Gate no solo le permite hacer comparaciones a nivel de objeto y generar scripts de cambio a partir de eso, sino que también le permite exportar sus objetos de base de datos a una jerarquía de carpetas organizada por tipo de objeto, con una creación de [nombre de objeto] .sql script por objeto en estos directorios. La jerarquía de tipo de objeto es así:
/ Funciones
/Seguridad
/ Seguridad / Roles
/ Seguridad / Esquemas
/ Seguridad / Usuarios
/Procedimientos almacenados
/Mesas
Si vuelca sus scripts al mismo directorio raíz después de hacer cambios, puede usar esto para actualizar su repositorio SVN y mantener un historial de cada objeto individualmente.
En mi experiencia, la solución es doble:
-
Debe manejar los cambios en la base de datos de desarrollo que realizan varios desarrolladores durante el desarrollo.
-
Debe manejar las actualizaciones de la base de datos en los sitios de los clientes.
Para manejar el # 1 necesitará una herramienta fuerte de base de datos para diferenciar / combinar. La mejor herramienta debe ser capaz de realizar la fusión automática tanto como sea posible mientras le permite resolver conflictos no manejados manualmente.
La herramienta perfecta debería manejar las operaciones de fusión utilizando un algoritmo de combinación de 3 vías que tenga en cuenta los cambios que se realizaron en la base de datos THEIRS y la base de datos MINE, en relación con la base de datos BASE.
Escribí una herramienta comercial que proporciona soporte de fusión manual para bases de datos SQLite y actualmente estoy agregando soporte para el algoritmo de combinación de 3 vías para SQLite. Compruébelo en http://www.sqlitecompare.com
Para manejar el # 2 necesitará un marco de actualización en su lugar.
La idea básica es desarrollar un marco de actualización automático que sepa cómo actualizar de un esquema de SQL existente al esquema de SQL más reciente y puede crear una ruta de actualización para cada instalación de base de datos existente.
Consulte mi artículo sobre el tema en http://www.codeproject.com/KB/database/sqlite_upgrade.aspx para obtener una idea general de lo que estoy hablando.
Buena suerte
Liron Levi
Es posible que desee consultar Liquibase ( http://www.liquibase.org/ ). Incluso si no utiliza la herramienta en sí misma, maneja muy bien los conceptos de gestión de cambio de base de datos o refactorización.
Es sencillo.
-
Cuando el proyecto base esté listo, debe crear un script de base de datos completo. Este script está comprometido con SVN. Es la primera versión.
-
Después de eso, todos los desarrolladores crean scripts de cambio (ALTER ..., nuevas tablas, sprocs, etc.).
-
Cuando necesite la versión actual, debe ejecutar todos los nuevos scripts de cambio.
-
Cuando la aplicación se lanza a producción, vuelve a 1 (pero, por supuesto, será una versión sucesiva).
Nant te ayudará a ejecutar esos scripts de cambio. :)
Y recuerda. Todo funciona bien cuando hay disciplina. Cada vez que se compromete el cambio de la base de datos, también se comprometen las funciones correspondientes en el código.
Es un buen método para guardar los scripts de la base de datos en el control de versiones con los scripts de cambio para que pueda actualizar cualquier base de datos que tenga. También es posible que desee guardar esquemas para diferentes versiones para que pueda crear una base de datos completa sin tener que aplicar todos los scripts de cambio. El manejo de los scripts debe ser automatizado para que no tenga que hacer trabajo manual.
Creo que es importante tener una base de datos separada para cada desarrollador y no usar una base de datos compartida. De esa manera, los desarrolladores pueden crear casos de prueba y fases de desarrollo independientemente de otros desarrolladores.
La herramienta de automatización debe tener medios para manejar los metadatos de la base de datos, que indica qué bases de datos se encuentran en qué estado de desarrollo y qué tablas contienen datos controlables de la versión, etc.
Es una pregunta muy antigua, sin embargo, muchos están tratando de resolver esto incluso ahora. Todo lo que tienen que hacer es investigar sobre los proyectos de bases de datos de Visual Studio. Sin esto, cualquier desarrollo de base de datos parece muy débil. Desde la organización del código hasta la implementación y el control de versiones, simplifica todo.
Escribí esta aplicación hace un tiempo, http://sqlschemasourcectrl.codeplex.com/ , que escaneará sus db de MSFT SQL con la frecuencia que desee y volcará automáticamente sus objetos (tablas, vistas, procs, funciones, configuración de SQL) en SVN. Funciona de maravilla. Lo uso con Unfuddle (que me permite recibir alertas en los registros)
Este es uno de los "problemas difíciles" que rodean el desarrollo. Por lo que sé, no hay 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 con el botón derecho en la base de datos -> Generar script SQL. Recomiendo configurar "crear un archivo por objeto" en la pestaña de opciones). Luego, puede enviar estos archivos de texto a svn y hacer uso de las funciones diff y logging de svn.
Tengo esto unido a un script de lote que toma un par de parámetros y configura la base de datos. También agregué algunas consultas adicionales que ingresan datos predeterminados como los tipos de usuario y el usuario administrador. (Si desea más información sobre esto, publique algo y puedo poner el script en un lugar accesible)
Si también necesita conservar todos los datos, le recomiendo que haga una copia de seguridad de la base de datos y utilice los productos de Redgate ( http://www.red-gate.com/ ) para hacer las comparaciones. No son baratos, pero valen cada centavo.
Estoy de acuerdo con la respuesta de ESV y por esa razón, comencé un pequeño proyecto hace un tiempo para ayudar a mantener las actualizaciones de la base de datos en un archivo muy simple que luego se podría mantener con un código fuente muy largo. Permite actualizaciones fáciles para los desarrolladores, así como UAT y Producción. La herramienta funciona en Sql Server y MySql.
Algunas características del proyecto:
- Permite cambios de esquema
- Permite valorar la población del árbol.
- Permite inserciones de datos de prueba por separado para, por ejemplo. UAT
- Permite la opción de reversión (no automatizada)
- Mantiene soporte para servidor SQL y Mysql
- Tiene la capacidad de importar su base de datos existente en el control de versiones con un comando simple (solo servidor sql ... aún trabajando en mysql)
El código está alojado en el código de Google. Por favor revisa el código de Google para más información.
Hace un tiempo encontré un módulo básico de VB que usaba objetos DMO y VSS para obtener un db completo en el script de VSS. Lo convertí en un VB Script y lo publiqué here . ¿Podría fácilmente sacar las llamadas de VSS y usar el material de DMO para generar todos los scripts, y luego llamar a SVN desde el mismo archivo por lotes que llama a VBScript para verificarlos?
Dave J
La solución típica es volcar la base de datos según sea necesario y hacer una copia de seguridad de esos archivos.
Dependiendo de su plataforma de desarrollo, puede haber complementos de código abierto disponibles. Rodar tu propio código para hacerlo suele ser bastante trivial.
Nota: es posible que desee hacer una copia de seguridad del volcado de la base de datos en lugar de ponerlo en el control de versiones. Los archivos pueden ser muy rápidos en el control de versiones y hacer que todo su sistema de control de fuente se vuelva lento (estoy recordando una historia de horror de CVS en este momento).
Martin Fowler escribió mi artículo favorito sobre el tema, http://martinfowler.com/articles/evodb.html . Elijo no colocar volcados de esquemas bajo el control de versiones como alumb y otros sugieren, porque quiero una manera fácil de actualizar mi base de datos de producción.
Para una aplicación web donde tendré una sola instancia de base de datos de producción, uso dos técnicas:
Scripts de actualización de base de datos
Una secuencia de comandos 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 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 ejecutan solo una vez. Una vez más, estos no son volcados de base de datos. Más bien, cada script representa los cambios necesarios para pasar de una versión a la siguiente. Son el script que usted aplica a su base de datos de producción para "actualizarlo".
Desarrollador Sandbox Synchronization
- Un script para respaldar, sanear 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.
- 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 a la base de datos de producción.
Una advertencia: mis pruebas automatizadas se ejecutan en una base de datos con esquemas correctos pero vacía, por lo que este consejo no se ajustará perfectamente a sus necesidades.
No almacenamos el esquema de la base de datos, almacenamos los cambios en la base de datos. Lo que hacemos es almacenar los cambios de esquema para que construyamos un script de cambio para cualquier versión de la base de datos y lo apliquemos a las bases de datos de nuestros clientes. Escribí una aplicación de utilidad de base de datos que se distribuye con nuestra aplicación principal que puede leer ese script y saber qué actualizaciones deben aplicarse. También tiene suficiente inteligencia para actualizar vistas y procedimientos almacenados según sea necesario.
No mencionó ninguna información específica sobre su entorno objetivo o restricciones, por lo que puede que esto no sea del todo aplicable ... pero si está buscando una manera de rastrear efectivamente un esquema de base de datos en evolución y no es adverso a la idea de usar Ruby, las migraciones de ActiveRecord están a tu altura.
Las migraciones definen las transformaciones de la base de datos mediante un DSL de Ruby; cada transformación se puede aplicar o (generalmente) revertir, lo que le permite saltar a una versión diferente de su esquema de base de datos en cualquier momento dado. El archivo que define estas transformaciones puede verificarse en el control de versiones como cualquier otro código fuente.
Debido a que las migraciones son parte de ActiveRecord , por lo general encuentran uso en las aplicaciones Rails de pila completa; sin embargo, puede utilizar ActiveRecord independiente de Rails con un mínimo esfuerzo. Vea here para un tratamiento más detallado del uso de las migraciones de AR fuera de Rails.
Para hacer que el volcado a un sistema de control de código fuente sea un poco más rápido, puede ver qué objetos han cambiado desde la última vez utilizando la información de la versión en sysobjects.
Configuración: cree una tabla en cada base de datos que desee verificar de forma incremental para contener la información de la versión de la última vez que la verificó (vacía en la primera ejecución). Borre esta tabla si desea volver a escanear toda su estructura de datos.
IF ISNULL(OBJECT_ID(''last_run_sysversions''), 0) <> 0 DROP TABLE last_run_sysversions
CREATE TABLE last_run_sysversions (
name varchar(128),
id int, base_schema_ver int,
schema_ver int,
type char(2)
)
Modo de ejecución normal: puede tomar los resultados de este sql, y generar scripts de sql solo para los que le interesan, y ponerlos en un control de origen de su elección.
IF ISNULL(OBJECT_ID(''tempdb.dbo.#tmp''), 0) <> 0 DROP TABLE #tmp
CREATE TABLE #tmp (
name varchar(128),
id int, base_schema_ver int,
schema_ver int,
type char(2)
)
SET NOCOUNT ON
-- Insert the values from the end of the last run into #tmp
INSERT #tmp (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions
DELETE last_run_sysversions
INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects
-- This next bit lists all differences to scripts.
SET NOCOUNT OFF
--Renamed.
SELECT ''renamed'' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE o.name <> t.name /*COLLATE*/
AND o.type IN (''TR'', ''P'' ,''U'' ,''V'')
UNION
--Changed (using alter)
SELECT ''changed'' AS ChangeType, o.name /*COLLATE*/,
''altered'' AS extra_info, 2 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE (
o.base_schema_ver <> t.base_schema_ver
OR o.schema_ver <> t.schema_ver
)
AND o.type IN (''TR'', ''P'' ,''U'' ,''V'')
AND o.name NOT IN ( SELECT oi.name
FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id
WHERE oi.name <> ti.name /*COLLATE*/
AND oi.type IN (''TR'', ''P'' ,''U'' ,''V''))
UNION
--Changed (actually dropped and recreated [but not renamed])
SELECT ''changed'' AS ChangeType, t.name, ''dropped'' AS extra_info, 2 AS Priority
FROM #tmp t
WHERE t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
WHERE NOT EXISTS (SELECT * FROM sysobjects oi
WHERE oi.id = ti.id))
AND t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
WHERE NOT EXISTS (SELECT * FROM #tmp ti
WHERE oi.id = ti.id)
AND oi.type IN (''TR'', ''P'' ,''U'' ,''V''))
UNION
--Deleted
SELECT ''deleted'' AS ChangeType, t.name, '''' AS extra_info, 0 AS Priority
FROM #tmp t
WHERE NOT EXISTS (SELECT * FROM sysobjects o
WHERE o.id = t.id)
AND t.name NOT IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
WHERE NOT EXISTS (SELECT * FROM #tmp ti
WHERE oi.id = ti.id)
AND oi.type IN (''TR'', ''P'' ,''U'' ,''V''))
UNION
--Added
SELECT ''added'' AS ChangeType, o.name /*COLLATE*/, '''' AS extra_info, 4 AS Priority
FROM sysobjects o
WHERE NOT EXISTS (SELECT * FROM #tmp t
WHERE o.id = t.id)
AND o.type IN (''TR'', ''P'' ,''U'' ,''V'')
AND o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
WHERE NOT EXISTS (SELECT * FROM sysobjects oi
WHERE oi.id = ti.id))
ORDER BY Priority ASC
Nota:
Si utiliza una intercalación no estándar en cualquiera de sus bases de datos, deberá reemplazar
/* COLLATE */
con su intercalación de base de datos.
es decir,
COLLATE Latin1_General_CI_AI
Primero, debe elegir el sistema de control de versiones que sea adecuado para usted:
-
Sistema de control de versiones centralizado: un sistema estándar en el que los usuarios realizan el check-out / check-in antes / después de trabajar en los archivos, y los archivos se guardan en un único servidor central.
-
Sistema de control de versiones distribuido: un sistema donde se clona el repositorio, y cada clon es en realidad la copia de seguridad completa del repositorio, por lo que si un servidor se bloquea, se puede usar cualquier repositorio clonado para restaurarlo. Después de elegir el sistema adecuado para sus necesidades , deberá configurar el repositorio, que es el núcleo de cada sistema de control de versiones. Todo esto se explica en el siguiente artículo: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/
Después de configurar un repositorio, y en el caso de un sistema central de control de versiones, una carpeta de trabajo, puede leer este artículo . Muestra cómo configurar el control de origen en un entorno de desarrollo utilizando:
-
SQL Server Management Studio a través del proveedor MSSCCI,
-
Visual Studio y SQL Server Data Tools
- Una herramienta de terceros ApexSQL Source Control
Si tiene una base de datos pequeña y desea crear una versión completa de la misma, este script por lotes puede ayudar. Desprende, comprime y revisa un archivo MDF de base de datos MSSQL en Subversion.
Si principalmente desea una versión de su esquema y solo tiene una pequeña cantidad de datos de referencia, posiblemente puede usar las Migraciones SubSonic para manejar eso. El beneficio es que puede migrar fácilmente hacia arriba o hacia abajo a cualquier versión específica.
También estoy usando una versión en la base de datos almacenada a través de la familia de procedimientos de base de datos extendida de la base de datos. Mi aplicación tiene scripts para cada paso de la versión (es decir, pasar de 1.1 a 1.2). Cuando se implementa, examina la versión actual y luego ejecuta los scripts uno por uno hasta que llega a la última versión de la aplicación. No hay ningún script que tenga la versión "final" directa, incluso si se implementa en una base de datos limpia, se implementa mediante una serie de pasos de actualización.
Ahora, lo que me gusta agregar es que hace dos días vi una presentación en el campus de MS sobre la nueva y próxima edición de VS DB. La presentación se centró específicamente en este tema y fui expulsado del agua. Definitivamente debería comprobarlo, las nuevas instalaciones se centran en mantener la definición del esquema en los scripts T-SQL (CREATE), un motor delta en tiempo de ejecución para comparar el esquema de implementación con el esquema definido y realizar los ALTER delta y la integración con la integración del código fuente, hasta e incluyendo la integración continua de MSBUILD para la generación de compilaciones automatizadas. La caída contendrá un nuevo tipo de archivo, los archivos .dbschema, que se pueden llevar al sitio de implementación y una herramienta de línea de comandos puede hacer los ''deltas'' reales y ejecutar la implementación. Tengo una entrada de blog sobre este tema con enlaces a las descargas de VSDE, debe consultarlas: http://rusanu.com/2009/05/15/version-control-and-your-database/
También podría mirar una solución de migraciones. Estos le permiten especificar el esquema de su base de datos en el código C #, y subir y bajar la versión de su base de datos usando MSBuild.
Actualmente estoy usando DbUp , y ha estado funcionando bien.
Tuvimos la necesidad de versionar nuestra base de datos SQL después de migrar a una plataforma x64 y nuestra versión anterior rompió con la migración. Escribimos una aplicación de C # que usaba SQLDMO para mapear todos los objetos SQL a una carpeta:
Root ServerName DatabaseName Schema Objects Database Triggers* .ddltrigger.sql Functions ..function.sql Security Roles Application Roles .approle.sql Database Roles .role.sql Schemas* .schema.sql Users .user.sql Storage Full Text Catalogs* .fulltext.sql Stored Procedures ..proc.sql Synonyms* .synonym.sql Tables ..table.sql Constraints ...chkconst.sql ...defconst.sql Indexes ...index.sql Keys ...fkey.sql ...pkey.sql ...ukey.sql Triggers ...trigger.sql Types User-defined Data Types ..uddt.sql XML Schema Collections* ..xmlschema.sql Views ..view.sql Indexes ...index.sql Triggers ...trigger.sql
La aplicación luego compararía la versión recién escrita con la versión almacenada en SVN y, si hubiera diferencias, actualizaría SVN. Determinamos que ejecutar el proceso una vez por noche era suficiente, ya que no realizamos tantos cambios en SQL. Nos permite rastrear los cambios en todos los objetos que nos interesan, además nos permite reconstruir nuestro esquema completo en caso de un problema grave.
Usamos DBGhost para administrar nuestra base de datos SQL. Luego, coloca sus scripts para construir una nueva base de datos en su control de versión, y construirá una nueva base de datos o actualizará cualquier base de datos existente al esquema en el control de versión. De esa manera, no tiene que preocuparse por crear scripts de cambio (aunque aún puede hacerlo, si por ejemplo desea cambiar el tipo de datos de una columna y necesita convertir datos).
Yo sugeriría usar herramientas de comparación para improvisar un sistema de control de versiones para su base de datos. Una buena alternativa son xSQL Schema Compare y xSQL Data Compare .
Ahora, si su objetivo es tener solo el esquema de la base de datos bajo el control de versiones, simplemente puede usar la Comparación de esquemas de xSQL para generar instantáneas de xSQL del esquema y agregar estos archivos en su control de versiones. Luego, para revertir o actualizar a una versión específica, simplemente compare la versión actual de la base de datos con la instantánea de la versión de destino.
Por desgracia, si también desea tener los datos bajo el control de versiones, puede usar xSQL Data Compare para generar scripts de cambio para su base de datos y agregar los archivos .sql a su control de versiones. Luego puede ejecutar estos scripts para revertir / actualizar a cualquier versión que desee. Tenga en cuenta que para la funcionalidad ''revertir'' necesita generar scripts de cambio que cuando se ejecuten hará que la Versión 3 sea igual a la versión 2 y para la funcionalidad ''actualizar'', necesita generar scripts de cambio que hagan lo contrario.
Por último, con algunas habilidades básicas de programación por lotes, puede automatizar todo el proceso utilizando las versiones de línea de comandos de Comparación de esquemas xSQL y Comparación de datos xSQL
Descargo de responsabilidad: estoy afiliado a xSQL.