Actualizar aplicaciones de capa de datos

El proceso de actualizar una aplicación de capa de datos (DAC) implementada a una nueva versión es más sencillo que utilizar scripts para implementar bases de datos o cambios en bases de datos. El desarrollador de la base de datos solo tiene que generar un paquete DAC que describa el esquema y propiedades de la nueva versión. El proceso de actualización de DAC compara el nuevo esquema con el esquema implementado existente y, a continuación, lleva a cabo de forma dinámica las acciones necesarias para cambiar al nuevo esquema.

El proceso de actualización

El proceso de actualización de la aplicación de capa de datos de SQL Server convierte una DAC implementada en una versión diferente de la misma aplicación. Por ejemplo, para actualizar la versión 1.0 a la versión 2.0 de Finance. Los siguientes pasos muestran un proceso de implementación sencillo:

  • Un desarrollador realiza la implementación de una DAC de la versión 1.0 de Finance y, posteriormente, construye el paquete DAC FinanceVersion1.dacpac.

  • Un administrador de bases de datos implementa la DAC Finance 1.0 en producción. La instancia de producción del motor de base de datos tiene ahora una DAC implementada que tiene un nombre de aplicación Finance, una versión 1.0 y una base de datos asociada denominada Finance.

  • A continuación, el desarrollador de la base de datos comienza a trabajar en la versión siguiente y cuando finaliza el desarrollo genera un FinanceVersion2.dacpac.

  • El administrador de la base de datos planea el proceso de actualización de la DAC. Hace una copia de seguridad de la base de datos Finance. Revisa el contenido del paquete DAC y un informe de las acciones que la actualización realizará para asegurarse de que no ocasiona problemas en la base de datos de producción.

  • El administrador de la base de datos realiza entonces una actualización de la DAC especificando tanto la DAC de la versión 1.0 implementada actualmente como el paquete DAC de la versión 2.0. Existen dos opciones para realizar la actualización:

    • Realizar una actualización en contexto mediante el script de Windows PowerShell que llama al método IncrementalUpgrade() de la DAC. La actualización en contexto altera el esquema de la base de datos existente para hacerlo coincidir con el definido en la nueva versión de la DAC.

    • Realizar una actualización en paralelo mediante el método Upgrade() de la DAC o el Asistente Actualizar una aplicación de capa de datos. La actualización en paralelo crea una base de datos nueva con el nuevo esquema y transfiere los datos de la base de datos original a la nueva.

  • Una vez completa la actualización, la DAC actualizada sigue teniendo el nombre de aplicación de Finance y una base de datos asociada denominada Finance, pero la versión de la DAC es ahora la 2.0.

Cambiar bases de datos después de la implementación

Se dice que una base de datos se ha desplazado de su DAC asociada si se realizan cambios en la base de datos utilizando algún mecanismo que no sea actualizar la DAC. Entre los ejemplos se incluye la utilización de una instrucción CREATE TRIGGER para agregar un nuevo desencadenador, o bien la utilización de una instrucción ALTER TABLE para cambiar la estructura de una tabla. Algunos tipos de cambios pueden evitar que el proceso de actualización de la DAC se complete, según las opciones de actualización especificadas. Los cambios no estarán presentes tampoco en la base de datos actualizada.

La operación de actualización de la DAC comprueba si hay diferencias entre el esquema de la base de datos actual y la definición de la DAC almacenada en la base de datos del sistema msdb. Si encuentra diferencias, aparece un cuadro diálogo con una advertencia que enumera las diferencias. Siga con la actualización únicamente tras haber analizado las diferencias notificadas y ejecute los procesos o scripts para transferir los objetos o datos que no pueda transferir la actualización pero que son necesarios en el nuevo sistema.

Una vez completa la actualización, la base de datos contiene todos los objetos definidos en la nueva versión de la DAC y en el formato que se especificó en la DAC nueva. En la mayoría de los casos, este será el formato que requerirá la versión de las aplicaciones asociadas a la nueva versión de la DAC y de la base de datos. Analice con detenimiento el informe de cambios de la actualización y transfiera únicamente los objetos que necesita el nuevo sistema. Por ejemplo, es posible que no se trate de un error cuando varios proyectos que se encuentran presentes en la DAC y en la base de datos actuales no estén en la DAC nueva. Podrían estar asociados a características que se quitaron o se rediseñaron en las nuevas versiones de las aplicaciones que utilizan la DAC.

En una actualización en contexto, los objetos cambiados no se conservan. Deberá guardar las definiciones de objeto y los datos antes de iniciar la actualización. En una actualización en paralelo, los objetos y los datos se conservan en la base de datos inicial, a la que se ha cambiado el nombre. Todos los objetos cambiados deben transferirse manualmente a la nueva base de datos.

Para obtener más información acerca de las ideas sobre cómo crear scripts en los objetos que se van a transferir a la nueva base de datos, vea Generar un script (SQL Server Management Studio).

Los proyectos DAC pueden especificar scripts anteriores y posteriores a la implementación. Estos son los scripts de Transact-SQL scripts que pueden realizar cualquier acción, incluso crear objetos que no se admiten en una DAC. Si la DAC original contenía un script posterior a la implementación que creó objetos no admitidos en una DAC, esos objetos deben actualizarse por separado mediante un mecanismo que permita quitar dichos objetos durante una actualización en contexto o dejarlos en la base de datos original en una actualización en paralelo.

Actualización en contexto

Un actualización en contexto realiza las acciones siguientes:

  • Comprueba que la DAC implementada y el paquete DAC tengan ambos el mismo nombre de aplicación (por ejemplo, ambos nombres establecidos en Finance). También evalúa si la instancia del Motor de base de datos cumple los requisitos especificados en la directiva de selección del servidor DAC, si se definió alguna, en la nueva versión de la DAC, y si la base de datos existente contiene objetos que no se admiten en una DAC.

  • Realiza todas las modificaciones, como las instrucciones CREATE, ALTER y DROP, requeridas para hacer que el esquema de la base de datos coincida con el definido en la nueva versión de la DAC.

Si la opción Ignorar la pérdida de datos está establecida en True, la actualización de la DAC puede realizar acciones que quiten datos. Por ejemplo, si existe una tabla en la base de datos actual, pero no en el esquema de la nueva DAC, la actualización quita la tabla. Antes de realizar la operación, el administrador de bases de datos debe archivar los datos que puedan ser necesarios después de la actualización.

Las actualizaciones en contexto se admiten en SQL Azure y en las instancias de Motor de base de datos. Las actualizaciones en contexto necesitan DAC Framework 1.1 y un nuevo asistente para actualización de DAC, que están incluidos en SQL Server 2008 R2 Service Pack 1 (SP1).

Actualización en paralelo

Las actualizaciones en paralelo no se admiten en SQL Azure y no se admitirán en la próxima versión de SQL Server. El mecanismo de actualización recomendado es la actualización en contexto incluida en SQL Server 2008 R2 SP1.

Una actualización en paralelo realiza las acciones siguientes:

  • Comprueba que la DAC implementada y el paquete DAC tengan ambos el mismo nombre de aplicación (por ejemplo, ambos nombres establecidos en Finance). También evalúa si la instancia del Motor de base de datos cumple los requisitos especificados en la directiva de selección del servidor DAC, si se definió alguna, en la nueva versión de la DAC, y si la base de datos existente contiene objetos que no se admiten en una DAC.

  • Implementa la nueva versión de la DAC a partir del paquete DAC. Esto crea una base de datos nueva con un nombre temporal.

  • Establece la base de datos original a de solo lectura si aún no está en este modo y copia los datos en la nueva base de datos.

  • Si la base de datos original estuviera en modo de solo lectura, la nueva base de datos estará establecida a de solo lectura.

  • Se cambia el nombre a la base de datos inicial, para ello se anexa una cadena al final del nombre de la base de datos.

  • A la base de datos nueva se le asigna el nombre de la base de datos original.

  • Después de que el administrador de bases de datos haya confirmado que la nueva base de datos está funcionando correctamente, se puede almacenar la base de datos inicial.

Los cambios en la base de datos pueden condicionar si los datos de una tabla se transfieren a la nueva base de datos. Las tablas pueden estar en estos estados con relación a los cambios de la base de datos:

  • La estructura de la tabla es la misma en las tres ubicaciones: la definición de la DAC actual en msdb, la base de datos actual y la nueva DAC. La tabla se encontrará en la nueva base de datos y la operación de actualización transferirá los datos a la nueva base de datos. La transferencia se hace utilizando una instrucción INSERT basada en una instrucción SELECT de la tabla anterior.

  • La tabla no existe en la definición de la DAC actual o en la base de datos, pero se define en la DAC nueva. La tabla estará presente en la base de datos nueva, pero no contiene datos porque no hay datos para su transferencia.

  • La tabla no existe en la definición de la DAC actual o en la base de datos, pero existe en la base de datos actual y en la DAC nueva. La tabla se encontrará en la nueva base de datos, pero la operación de actualización no transferirá los datos. Transfiera manualmente los datos cuando termine la actualización.

  • La tabla existe en la definición de la DAC actual y en la base de datos, pero no en la DAC nueva. La tabla no estará presente en la base de datos nueva. Si la tabla resulta necesaria en el sistema nuevo, cree manualmente la tabla y transfiera los datos cuando la actualización finalice.

  • La tabla está presente en las tres ubicaciones, pero la estructura de la tabla en la definición de la DAC actual y en la base de datos es distinta a la estructura de la tabla en la DAC nueva. La tabla estará presente en la base de datos nueva con la estructura definida en la DAC nueva.

    • Si los nombres de tabla y columna no coinciden, la operación de actualización notificará que no se han transferido los datos. Transfiera manualmente los datos cuando termine la actualización.

    • Si los nombres de tabla y columna coinciden, la operación de actualización intentará transferir los datos. Si el tipo de datos de una o más columnas ha cambiado y no son compatibles, se producirá un error en la instrucción INSERT que hará que el proceso de actualización se revierta.

Puede utilizar cualquier mecanismo para transferir los datos a la nueva versión de la tabla. Puede utilizar una instrucción INSERT que efectúe una selección en la versión anterior de la tabla. También puede utilizar una de las técnicas masivas de inserción descritas en Importar y exportar datos masivos.

Historial de cambios

Contenido actualizado

Se ha descrito la actualización en contexto incluida en DAC Framework 1.1. Se ha quitado el contenido duplicado de otros temas.

SQL Server 2008 R2 SP1 es totalmente compatible con las actualizaciones en contexto, e incluye DAC Framework 1.1 y un nuevo asistente para actualizaciones.