Lo primero que necesitará es una tabla u otro mecanismo para almacenar la información de la versión del esquema. Si nada más para que pueda enlazar su aplicación y esquema juntos. No hay nada más doloroso que una versión de la aplicación contra el mal esquema — defecto, corrupción de datos, etc.
La aplicación debe rechazar o apagado si no es la versión correcta — Es posible obtener un retroceso cuando no es correcto, pero lo protege del día realmente malo cuando la base de datos corrompe los datos valiosos.
Necesitará una forma de rastrear cambios como Subversion u otra cosa — de SQL puede exportar el esquema inicial. Desde aquí necesitarás un mecanismo para rastrear los cambios usando una buena herramienta como SQL compare y luego rastrear los cambios de esquema y hacer coincidir una actualización en el número de versión en la base de datos de destino.
Mantenemos cada delta en una carpeta separada debajo de la utilidad de actualización que creamos. Esta utilidad inicia sesión en el servidor, lee la información de la versión y luego aplica los scripts de transformación de la próxima versión en la base de datos hasta que no pueda encontrar más scripts de actualización en su subcarpeta. Esto nos permite actualizar una base de datos sin importar la antigüedad de la versión actual. Si hay transformaciones de datos únicas para el inquilino, estas se volverán complicadas.
Por supuesto, siempre debe hacer una copia de seguridad de la base de datos que escribe en un archivo externo preferible con un número de versión identificable para que pueda encontrarlo y restaurarlo cuando los guiones fallan. Y eventualmente solo planeará descubrir cómo recuperar y restaurar.
Vi que hay algún tipo de herramienta de mejora de esquema en el nuevo VS 2010 pero no lo he usado. Eso también podría serle útil.
Estaba pensando en usar un framework como Migrator.Net o RikMigrations. Entonces, puedo en mi Build Server crear una compilación que obtenga la última versión y ejecute un comando que verifique y actualice mis esquemas. Un problema que veo es cuando la aplicación tiene muchos inquilinos, este proceso de esquemas de actualización será lento y peligroso. ¿Qué te parece? Gracias Mike –
Si puede cerrar la aplicación durante una ventana de mantenimiento, esta es la mejor/más fácil. No te preocupes por las actualizaciones de datos, etc., puedes tener varias instancias haciendo copias de seguridad y migrando contra tus servidores sql. lo que hicimos fue configurar una página de puerta de entrada que redirige a los usuarios de una versión particular a un seridor/ruta particular. Si aparece una solicitud de autenticación y su db se marca como una actualización, los redireccionamos a la página "Abajo para el mantenimiento" y no los pasamos a la aplicación. una vez que es una copia de seguridad para ellos, pueden ser redirigidos desde la autenticación a servidores con la nueva versión – MikeJ
Miré rikMigrations. Lo malo que vi fue que no tiene una forma de trabajar con SP o Vistas, probablemente porque estas se actualizan cuando se ejecuta cualquier código DDL. incluimos en nuestro código de scripts actual para soltar todos estos artefactos y luego reconstruirlos para el nuevo esquema. – MikeJ