2009-03-23 28 views
15

Tengo bases de datos de SQL Server y hago cambios en ellas. Algunas tablas de base de datos tienen registros que son registros de inicio que requieren mi aplicación para ejecutarse. Me gustaría hacer control de versiones sobre la base de datos y estos registros (filas). ¿Es posible hacer esto y agruparlo en el control de la versión SVN que tengo para mi código fuente o hay otras soluciones para esto? Me gustaría lograr esto para poder volver a la versión anterior de la base de datos y comparar los cambios entre las revisiones de la base de datos. Sería bueno si las herramientas para esto son gratuitas, de código abierto o no muy caras.¿Cómo controlar las bases de datos de SQL Server?

Mi entorno es Visual C# Express, SQL Server 2008 Express y Tortoise SVN.

+0

Dupe de http://stackoverflow.com/questions/173/how-do-i-version-my-ms-sql-database-in-svn? –

+0

Consulte esta pregunta: http://stackoverflow.com/questions/4952/database-version-control –

+0

Un consejo es tener un patrón de nomenclatura común para estas tablas, de modo que sea cual sea el proceso que utilice, será más fácil identificar cuáles para procesar. Agrego "_LKP" (búsqueda) al final de todas las tablas donde los datos deben permanecer en su lugar. –

Respuesta

3

Acabamos de comenzar a hacer lo siguiente en algunos de nuestros proyectos, y parece funcionar bastante bien, para rellenar tablas "estáticas".

Nuestros scripts siguen un patrón en el que se construye una tabla temporal, y luego se rellena con aquello a lo que queremos que se asemeje la tabla real. Solo ponemos valores legibles para humanos aquí (es decir, no incluimos columnas IDENTITY/GUID). El resto de la secuencia de comandos toma la tabla temporal y realiza las instrucciones apropiadas INSERT/UPDATE/DELETE para hacer que la tabla real se asemeje a la tabla temporal. Cuando tenemos que cambiar estos datos "estáticos", todo lo que tenemos que actualizar es la población de la tabla temporal. Esto significa que DIFFing entre versiones funciona como se esperaba, y los scripts de reversión son tan simples como obtener una versión anterior del control de código fuente.

Los INSERT/UPDATE/DELETE solo deben escribirse una vez. De hecho, nuestros scripts son un poco más complicados y tienen dos conjuntos de validación antes de las declaraciones DML reales. Un conjunto valida los datos de la tabla temporal (es decir, no vamos a violar ninguna restricción al intentar hacer que la base de datos se asemeje a la tabla temporal). El otro valida la tabla temporal y la base de datos de destino (es decir, que las claves externas están disponibles).

0

Puede obtener una versión de SQL Management Studio para SQL Server Express. Creo que podrá usar esto para producir scripts del esquema de su base de datos. Creo que eso te dejará crear scripts a mano para insertar los registros iniciales.

Luego, ponga todas las secuencias de comandos en control de fuente, junto con una secuencia de comandos principal que ejecute las secuencias de comandos individuales en el orden correcto.

Podrá ejecutar diffs usando windiff (gratis con Visual Studio SDK), o bien Beyond Compare es económico, y una gran herramienta de sincronización/fusión/sincronización.

0

MS Visual Studio Team System para desarrolladores de bases de datos tiene la funcionalidad para generar fácilmente scripts de creación para todo el esquema. ¡El único inconveniente es el costo!

¿Ha considerado utilizar SubSonic?

0

Más bien debería usar el control de versiones específico de DB.

http://msdn.microsoft.com/en-us/library/ms189050.aspx

Cuando cualquiera de la READ_COMMITTED_SNAPSHOT o opciones de base de datos ALLOW_SNAPSHOT_ISOLATION son ON, copias lógicas (versiones) se mantienen para todos los datos modificaciones realizadas en la base de datos . Cada vez que se modifica una fila por una transacción específica, la instancia del Motor de base de datos almacena una versión de la imagen previamente comprometida de la fila en tempdb.Cada versión de está marcada con la transacción número de secuencia de la transacción que realizó el cambio. Las versiones de filas modificadas están encadenadas usando una lista de enlace . El valor de fila más nuevo siempre es almacenado en la base de datos actual y encadenado a las filas versionadas almacenadas en tempdb.

1

Hay un producto de microsoft gratuito llamado Database Publishing Wizard que se puede utilizar para crear un script de toda la base de datos (esquema y datos). Es ideal para tomar instantáneas del estado actual de una base de datos y le permitirá recrear desde cero en cualquier punto

1

Para el control de versiones de la base de datos (esquema) utilizamos propiedades personalizadas, que se agregan a la base de datos cuando se ejecuta el instalador . El contenido de estos scripts se genera con nuestros scripts de compilación.

La secuencia de comandos para establecer las propiedades se parece a esto:

DECLARE @AssemblyDescription sysname 
SET @AssemblyDescription = N'DailyBuild_20090322.1' 

DECLARE @AssemblyFileVersion sysname 
SET @AssemblyFileVersion = N'0.9.3368.58294' 

-- The extended properties DatabaseDescription and DatabaseFileVersion contain the 
-- AssemblyDescription and AssemblyFileVersion of the build that was used for the 
-- database script that creates the database structure. 
-- 
-- The current value of these properties can be displayed with the following query: 
-- SELECT * FROM sys.extended_properties 

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseDescription') 
BEGIN 
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription 
END 
ELSE 
BEGIN 
    EXEC sys.sp_addextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription 
END 

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseFileVersion') 
BEGIN 
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion 
END 
ELSE 
BEGIN 
    EXEC sys.sp_addextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion 
END 
GO 
0

utilizo para este bcp (utilidad de carga a granel, que forma parte de un servidor SQL Server instalación estándar, edición expreso incluido).

Cada tabla con datos necesita un archivo de control Table.ctl y un archivo de datos Table.csv (estos son archivos de texto que se pueden generar desde una base de datos existente usando bcp). Como archivos de texto, estos pueden ser fácilmente versionados.

Como parte de mis lotes generación (ver my answer there para más información), que iterar a través de todos los archivos de control de la siguiente manera:

SET BASE_NAME=MyDatabaseName 
SET CONNECT_STRING=.\SQLEXPRESS 

FOR /R %%i IN (.) DO (
    FOR %%j IN ("%%~fi\*.ctl") DO (
    ECHO + %%~nj 
    bcp %BASE_NAME%..%%~nj in "%%~dpsj%%~nj.csv" -T -E -S %CONNECT_STRING% -f "%%~dpsj%%~nj.ctl" >"%TMP%\%%~nj.log" 
    IF %ERRORLEVEL% GTR 0 (
     TYPE "%TMP%\%%~nj.log" 
     GOTO ERROR_USAGE 
    ) 
) 
) 

Una limitación actual de este guión es que el nombre del archivo debe ser el nombre de la tabla, que puede no ser posible si el nombre de la tabla contiene caracteres especiales específicos.

2

Se está agregando soporte de datos estáticos a SQL Source Control 2.0, actualmente disponible en versión beta. Más información sobre cómo tratar esto se puede encontrar aquí:

http://www.red-gate.com/messageboard/viewtopic.php?t=12298

+0

Solo una nota para informarle que SQL Source Control v2 ahora está disponible con soporte de datos estáticos. –

0

Este project tiene un buen ejemplo de despliegue y rollback

4

respuesta tardía pero espero sea de utilidad para otros lectores

puedo sugerir utilizando el complemento SSMS llamado ApexSQL Source Control. Al utilizar este complemento, los desarrolladores pueden mapear fácilmente los objetos de la base de datos con el sistema de control de origen a través del asistente directamente desde SSMS. Incluye soporte para Git, TFS, Mercurial, Subversion, TFS (incluido Visual Studio Online) y otros sistemas de control de fuente. También incluye compatibilidad con datos estáticos que controlan la fuente (para que también pueda controlar los registros de versiones).

Después de descargar e instalar ApexSQL Source Control, simplemente haga clic con el botón derecho en la base de datos que desea controlar y navegue al submenú ApexSQL Source Control en SSMS. Haga clic en la “base de datos Enlace de control de origen de” opción y seleccionar el sistema de control de código fuente y el modelo de desarrollo de bases de datos, por ejemplo:

enter image description here

Después de eso, es posible excluir los objetos que no desea estar vinculado a fuente de control.Es posible excluir objetos específicos por propietario o tipo.

En el siguiente paso, se le pedirá a proporcionar la información de inicio de sesión para el sistema de gestión de control de fuente:

enter image description here

Una vez hecho esto, haga clic en el botón “Finalizar” y la “Acción se mostrará la ventana del centro, que ofrece los objetos que se enviarán al repositorio (esto es por defecto, si el repositorio está vacío).

Una vez que la base de datos se ha vinculado al control de origen, todas las operaciones que se pueden ejecutar desde un cliente de control de origen estarán disponibles en el panel "Explorador de objetos". Entre ellos se incluyen:

  • comprobar a cabo con o sin bloquear los objetos versionados,
  • vista de la historia de ese objeto y aplicar la revisión específica,
  • vista cambia en ese objeto que se hicieron y
  • lugar los datos de tabla de control de código fuente utilizando el “Enlace de datos estáticos”

Usted puede leer este artículo para obtener más información: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/

Cuestiones relacionadas