2012-03-19 8 views
5

Estoy entusiasmado por dar el salto al uso de DAC Fx y el desarrollo de bases de datos declarativas. El mayor obstáculo para mí es cómo manejar migraciones complejas de datos en varias versiones diferentes del esquema. En el viejo mundo, simplemente podemos ejecutar todos nuestros scripts de actualización en orden, lo que garantiza que el esquema esté en el estado correcto en el momento de la migración de datos. ¿Cómo funciona esto cuando la ruta de actualización es dinámica?Migración de datos compleja en el marco de aplicación de nivel de datos (DAC Fx)

Por ejemplo, supongamos que hay varias versiones de mi esquema (DACPAC1-4) en las instancias existentes:

  • DACPAC1: existe tablaA y tiene datos de los clientes valiosos
  • DACPAC2: tablaA se desaprobó y se sustituyó por tableB y tableC normalizado; agrega la nueva tabla D
    • secuencia de comandos posterior a la implementación: mueva los datos de la tabla A a la nueva tabla B y tabla C; caer tablaA
  • DACPAC3: TableC tiene una nueva, anulable Columnx
    • script de post-despliegue: llena la columna anulable basado en presentadas
  • DACPAC4: tableC.columnX no es anulable

Si necesito ser capaz de soportar la actualización de los servidores DACPAC1-3 al último DACPAC4, ahora tengo que escribir mis scripts previos y posteriores a la implementación de manera suficientemente inteligente para detectar qué DACPAC está actualmente en el objetivo y maneja correctamente los pasos de migración de datos en orden. Además, no puedo simplemente reutilizar los ingeniosos scripts posteriores a la implementación que originalmente escribí, ya que dependen de las versiones intermedias del esquema.

Gracias de antemano por cualquier consejo!

Respuesta

0

Lo que suelen hacer es la siguiente:

  1. Crear una tabla de sistema que incluye una propiedad denominada SchemaVersion. Todos los scripts de actualización están programados para verificar primero la versión actual y luego decidir si ejecutar sus contenidos o no. Después de la ejecución, establece SchemaVersion en la última versión almacenada en el script.

  2. También incluyo normalmente otra propiedad llamada MinAppVersion (versión mínima que es compatible con el esquema actual). Cuando el intento de aplicación se conecta a la base de datos, compara su versión de ensamblaje actual con MinAppVersion almacenada en la base de datos. Si la versión es igual o superior a MinAppVersion, entonces se establece la conexión; de lo contrario, se lanza una excepción.

Espero que esto ayude. Saludos cordiales,

Cuestiones relacionadas