2009-01-16 10 views
11

Necesito poner versiones en una base de datos SQL Server 2005 y tenerlas accesibles desde una aplicación .NET. Lo que estaba pensando es usar Propiedades Extendidas en la Base de Datos con un nombre de 'versión' y por supuesto el valor sería la versión de la base de datos. Puedo usar SQL para llegar a esto. Mi pregunta es, ¿suena esto como un buen plan o hay una forma mejor de agregar versiones a una base de datos de SQL Server?¿Cómo hago una versión de una base de datos de SQL Server?

Supongamos que no puedo usar una tabla para almacenar los metadatos.

+0

Qué quiere decir el esquema de control de versiones, o los datos contenidos en el mismo? – cdeszaq

+0

Control de versiones del esquema – widmayer

Respuesta

2

Si entiendo correctamente su pregunta (diferenciando entre versiones internas de la base de datos, como números de compilación de aplicaciones), podría tener algún tipo de tabla SYSVERSION que contenga una sola fila de datos con esta información.

Más fácil de consultar.

También podría contener varias columnas de información útil, o varias filas que representan las diferentes veces que se actualizó la copia de la base de datos.

Actualización: Bueno, si no puede usar una tabla para contener los metadatos, entonces la información externa de algún tipo (un archivo INFO en el disco duro?) O las propiedades extendidas serían el camino a seguir.

Sin embargo, me gusta la idea de la tabla :) Siempre puedes usar la seguridad para que solo sea accesible a través de un proceso almacenado personalizado get_db_version o algo.

+0

Estoy buscando alternativas a este método debido a las políticas de arquitectura, etc. – widmayer

11

hago esto:

Crear una tabla de esquema:

CREATE TABLE [dbo].[SchemaVersion](
    [Major] [int] NOT NULL, 
    [Minor] [int] NOT NULL, 
    [Build] [int] NOT NULL, 
    [Revision] [int] NOT NULL, 
    [Applied] [datetime] NOT NULL, 
    [Comment] [text] NULL) 

Actualizar esquema:

INSERT INTO SchemaVersion(Major, Minor, Build, Revision, Applied, Comment) 
VALUES (1, 9, 1, 0, getdate(), 'Add Table to track pay status') 

Get base de datos de versión del esquema:

SELECT TOP 1 Major, Minor, Build from SchemaVersion 
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC 

Adaptado de lo que yo leer en Coding Horror

+0

Esto podría ir un paso más allá y contener los metadatos para el esquema, como las tablas, campos, tipos, etc. Esto no , sin embargo, comienzan a prestarse a un sistema dinámico donde parte de los datos del programa es el esquema en sí, a menudo visto en la industria médica. – cdeszaq

6

Utilizamos las Propiedades Extendidas tal como lo describió y funciona muy bien.

Creo que tener una mesa es exagerado. Si deseo rastrear las diferencias en mis bases de datos, uso el control de fuente y guardo todos los scripts de generación de db.

También he usado algunas herramientas de diagrama de ER para ayudarme a mantener un registro de los cambios en las versiones de la base de datos. Esto estaba fuera de la aplicación real, pero me permitió ver rápidamente lo que cambió.

Creo que fue CASEStudio, o algo así.

+0

Esto parece muy prometedor. ¿Podría hacer referencia a las fuentes de mejores prácticas? – BozoJoe

0

La mejor manera de hacerlo es tener 2 procedimientos: un encabezado para controlar lo que se está insertando y valida un pie de página para insertar los datos si el lanzamiento es bueno o no. El cuerpo contendrá tus scripts.

Necesita un contenedor que encapsule su secuencia de comandos y registre toda la información: en la versión actual, se aplicó el número de script, applyby, applydate date, release outcome "failed or succeeded".

0

Estoy usando una tabla dedicada similar a la solución de Matt. Además de eso, los modificadores de bases de datos deben verificar la versión actual antes de aplicar cualquier cambio al esquema.Si la versión actual es más pequeña de lo esperado, la secuencia de comandos termina con un error fatal. Si la versión actual es más grande de lo esperado, el script omite el paso actual porque ese paso ya se ha realizado algunas veces en el pasado.

Aquí está la solución completa con ejemplos y convenciones por escrito base de datos de modificar los scripts de: How to Maintain SQL Server Database Schema Version

Cuestiones relacionadas