Actualizar una aplicación de capa de datos

Utilice el Asistente Actualizar aplicación de capa de datos o un script de Windows PowerShell para cambiar el esquema y las propiedades de una aplicación de capa de datos (DAC) implementada actualmente para coincidir con el esquema y las propiedades definidas en una versión nueva de la DAC.

Actualizaciones en contexto y en paralelo

Hay dos tipos de actualizaciones de DAC:

  • Una actualización en paralelo conserva una copia de la base de datos existente generando una nueva base de datos que tiene el esquema definido en la nueva versión de DAC. Después, copia los datos de la base de datos antigua en la nueva.

  • Una 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 DAC.

SQL Server 2008 R2 y Microsoft Visual Studio 2010 incluían DAC Framework 1.0, que admitía únicamente actualizaciones en paralelo. Las actualizaciones en paralelo no son compatibles con SQL Azure. Tanto SQL Server 2008 R2 Service Pack 1 (SP1) como Visual Studio 2010 SP1 incluyen un nuevo DAC Framework 1.1, que ofrece actualizaciones en contexto tanto en SQL Azure como en las instancias de Motor de base de datos. Para obtener más información sobre DAC Framework 1.1, vea Compatibilidad de DAC con las versiones y objetos de SQL Server

La versión original del Asistente de actualizaciones DAC usaba DAC Framework 1.0 para realizar actualizaciones en paralelo. La versión del asistente disponible en SQL Server 2008 R2 SP1 realiza una actualización en contexto.

Los usuarios de SQL Server 2008 R2 pueden actualizarse al nuevo asistente y a DAC Framework 1.1 mediante la instalación de SQL Server 2008 R2 SP1.

Preparar la actualización

Es conveniente hacer una copia de seguridad completa de la base de datos antes de comenzar la actualización. Si una actualización encuentra un error y no puede revertir todas sus actualizaciones, puede que tenga que restaurar la copia de seguridad.

Hay varias acciones que debe realizar para validar el paquete DAC y las acciones de actualización. Para obtener más información acerca de cómo realizar estas comprobaciones, vea Validar un paquete DAC.

  • Recomendamos no realizar la actualización con un paquete DAC de orígenes desconocidos o que no sean de confianza. Es posible que estas DAC contengan código malintencionado que podría ejecutar código Transact-SQL no deseado o provocar errores al modificar el esquema o la estructura de la base de datos física. Antes de utilizar una DAC desde un origen desconocido o que no sea de confianza, desempaquete la DAC y examine el código, como por ejemplo procedimientos almacenados u otro código definido por el usuario.

  • Si se han realizado cambios en la base de datos actual tras la implementación de la DAC inicial, algunos de los cambios pueden impedir que la actualización se complete correctamente o puede que la actualización los elimine. Primero debe generar un informe de revisión de los cambios efectuados en la base de datos.

  • Es conveniente generar una lista de los cambios en el esquema que va a realizar la actualización y revisarlos para comprobar si existe algún problema.

Elegir las opciones de actualización de la DAC

Hay cuatro opciones de actualización para una actualización en contexto:

Ignorar la pérdida de datos: si es True, la actualización continuará incluso si alguna de las operaciones provocan la pérdida de datos. Si es False, estas operaciones terminarán la actualización. Por ejemplo, si no hay una tabla de la base de datos actual en el esquema de la nueva DAC, la tabla se quitará si se especifica True. El valor predeterminado es True.

Bloquear si hay cambios: si es True, la actualización se termina si el esquema de la base de datos es diferente al definido en la DAC anterior. Si es False, la actualización continúa incluso si se detectan cambios. El valor predeterminado es False.

Revertir si hay error: si es True, la actualización se incluye en las transacciones y, si se encuentran errores, se intenta revertir. Si es False, se confirman todos los cambios a medida que se efectúan y, si se producen errores, puede que tenga que restaurar una copia de seguridad anterior de la base de datos. El valor predeterminado es False.

Omitir validación de directiva: si es True, la directiva de selección del servidor DAC no se evalúa. Si es False, se evalúa la directiva y la actualización se termina si se produce un error en la validación. El valor predeterminado es False.

Requisitos

Una DAC solo la pueden actualizar miembros de los roles fijos de servidor sysadmin o serveradmin, o los inicios de sesión que pertenezcan al rol fijo de servidor dbcreator y dispongan de permisos ALTER ANY LOGIN. El inicio de sesión debe ser el propietario de la base de datos existente. La cuenta de administrador del sistema de SQL Server integrada denominada sa también puede iniciar el asistente.

El nombre de la aplicación en el paquete DAC debe coincidir con el nombre de la aplicación de la DAC implementada actualmente. Por ejemplo, si la DAC actual tiene un nombre de aplicación GeneralLedger, solo se puede actualizar mediante un paquete DAC que tenga también un nombre de aplicación GeneralLedger.

Contraseñas de inicio de sesión

Para mejorar la seguridad, los inicios de sesión de la Autenticación de SQL Server están almacenados en un paquete DAC sin ninguna contraseña. Cuando el paquete se implementa o actualiza, el inicio de sesión se crea como un inicio de sesión deshabilitado con una contraseña generada. Para habilitar los inicios de sesión, use un inicio de sesión que disponga del permiso ALTER ANY LOGIN y emplee ALTER LOGIN para habilitar el inicio de sesión y asignar una nueva contraseña que pueda comunicar al usuario. Esto no se necesita para los inicios de sesión de la Autenticación de Windows, dado que SQL Server no administra sus contraseñas.

Consideraciones acerca del espacio

En una actualización en contexto, la consideración más importante sobre el espacio es que haya suficiente espacio en el registro de transacciones disponible para registrar todas las modificaciones.

Una actualización en paralelo retiene la base de datos actual para la DAC implementada además de crear una base de datos nueva y de copiar los datos existentes en ella. Debería disponer de bastante espacio disponible en disco para contener una base de datos nueva de igual tamaño que la existente. Antes de ejecutar una actualización en paralelo, asegúrese de que la cantidad de datos en la base de datos actual no sea excesiva para que pueda caber en la base de datos nueva. La base de datos que se ha creado a través de la actualización tendrá los valores de tamaño predeterminados que origina la instrucción CREATE DATABASE. El valor predeterminado es para un archivo de datos con un tamaño inicial de 3 MB y un número ilimitado de incrementos de 1 MB y para un archivo de registro con tamaño inicial de 1 MB y un límite de tamaño máximo de 2 GB.

Opciones de la base de datos de la actualización en paralelo

En una actualización en paralelo, la base de datos que se cree durante la fase de implementación incorporará toda la configuración predeterminada de la instrucción CREATE DATABASE, excepto en lo siguiente:

  • La intercalación y el nivel de compatibilidad de las bases de datos se establecen según los valores definidos en el paquete DAC. Un paquete generado a partir de un proyecto DAC en Visual Studio utiliza los valores establecidos en el proyecto DAC. Un paquete que se haya extraído de una base de datos existente utilizará los valores de la base de datos original.

  • Puede ajustar algunos de los valores de configuración de la base de datos, como por ejemplo el nombre de la base de datos y las rutas de archivo, en la página Actualizar la configuración.

Algunas opciones de base de datos, como TRUSTWORTHY, DB_CHAINING y HONOR_BROKER_PRIORITY, no se pueden ajustar en el proceso de implementación. Las propiedades físicas, como el número de grupos de archivos o el número y tamaño de los archivos no se pueden modificar en el proceso de implementación. Una vez se haya completado la implementación, podrá utilizar la instrucción ALTER DATABASE, SQL Server Management Studio o SQL Server PowerShell para personalizar la base de datos. Para obtener más información, vea Modificar una base de datos.

Actualización de DAC en contexto utilizando PowerShell

En este ejemplo se usa el método IncrementalUpgrade() de DAC Framework 1.1 para realizar una actualización de DAC en contexto. Este método actualizará las DAC en SQL Server o SQL Azure. La forma recomendada de obtener el nuevo marco consiste en instalar SQL Server 2008 R2 SP1.

Cree un archivo de script de PowerShell (como IncrementalUpgradeDAC.ps1) que contenga el código siguiente.

  1. Agregue código para crear un objeto de servidor de SMO y establecerlo en la instancia que contiene la base de datos de la que se desea extraer una DAC. En este ejemplo se establece un objeto de servidor en la instancia predeterminada del equipo local:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Agregue código para abrir un objeto ServerConnection y conectarse a la misma instancia.

    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
  3. Agregue código para cargar el archivo de paquete DAC. En este ejemplo se carga un archivo MyApplicationVNext.dacpac

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplicationVNext.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. Agregue código para suscribirse a los eventos de implementación de la DAC.

    ## Subscribe to the DAC deployment events.
    $dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
    $dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
    
  5. Agregue código para especificar la DAC que se va a actualizar y las opciones de actualización, actualice la DAC y cierre el archivo de paquete DAC:

    ## Upgrade the DAC and create the database.
    $dacName  = "MyApplication"
    ## Set the upgrade options.
    $upgradeProperties = New-Object Microsoft.SqlServer.Management.Dac.DacUpgradeOptions
    $upgradeProperties.blockonchanges = $true
    $upgradeProperties.ignoredataloss = $false 
    $upgradeproperties.rollbackonfailure = $true
    $upgradeProperties.skippolicyvalidation = $false
    ## Do not set IgnoreDrift, replaced by BlockOnChanges.
    
    ## Upgrade the DAC and create the database.
    $dacstore.IncrementalUpgrade($dacName, $dacType, $upgradeProperties)
    
    $fileStream.Close()
    

Ejecute IncrementalUgradeDAC.ps1 desde una sesión de PowerShell en la que haya cargado los complementos SQL Server PowerShell o mediante la utilidad del símbolo del sistema sqlps.

Actualización de DAC en contexto usando un asistente

En Management Studio, puede iniciar el asistente Actualizar aplicación de capa de datos; para ello, abra el nodo de servidor en Explorador de objetos, seleccione el nodo Administración y, a continuación, el nodo Aplicaciones de capa de datos. Haga clic con el botón secundario en un nodo de aplicación de capa de datos en Explorador de objetos y, a continuación, seleccione Actualizar aplicación de capa de datos....

Nota de advertenciaAdvertencia

El Asistente de actualizaciones DAC de la versión original de SQL Server 2008 R2 realiza una actualización en paralelo, que no se admite en SQL Azure. En esta sección se describe el uso de la nueva versión del asistente en SQL Server 2008 R2 SP1, que realiza una actualización en contexto.

Haga clic en un vínculo de la lista siguiente para navegar a los detalles de una página del asistente:

  • Página Introducción

  • Página Seleccionar paquete

  • Página Revisar directiva

  • Página Detectar cambio

  • Revisar el plan de actualización

  • Página Resumen

  • Página Actualizar DAC

Página Introducción

En esta página se describen los pasos para actualizar una aplicación de capa de datos.

No volver a mostrar esta página. - Haga clic en la casilla para evitar que la página se muestre en el futuro.

Siguiente > - Va a la página Seleccionar paquete.

Cancelar - Termina el asistente sin actualizar la DAC.

Página Seleccionar paquete

Utilice esta página para especificar el paquete DAC que contiene la nueva versión de la aplicación de capa de datos. Las página pasa por dos estados.

Seleccionar el paquete DAC

Utilice el estado inicial de la página para elegir el paquete DAC que se va a implementar. El paquete DAC debe ser un archivo de paquete DAC válido y tener una extensión .dacpac. El nombre de la aplicación DAC en el paquete DAC debe ser el mismo que el de la aplicación de la DAC actual.

Paquete DAC - Especifica la ruta y nombre del archivo del paquete DAC que contiene la nueva versión de la aplicación de capa de datos. Puede seleccionar el botón Examinar a la derecha del cuadro para ir a la ubicación del paquete DAC.

Nombre de aplicación - Un cuadro de solo lectura que muestra el nombre de la aplicación DAC que se asignó cuando la DAC se creó o extrajo de una base de datos.

Versión - Un cuadro de solo lectura que muestra la versión que se asignó cuando la DAC se creó o extrajo de una base de datos.

Descripción - Un cuadro de solo lectura que muestra la descripción que se escribió cuando la DAC se creó o extrajo de una base de datos.

<Anterior - Vuelve a la página Introducción.

Siguiente > - Muestra una barra de progreso cuando el asistente confirma que el archivo seleccionado es un paquete DAC válido.

Cancelar - Termina el asistente sin actualizar la DAC.

Validar el paquete DAC

Muestra una barra de progreso cuando el asistente confirma que el archivo seleccionado es un paquete DAC válido. Si se valida el paquete DAC, el asistente va a la página Revisar directiva. Si el archivo no es un paquete DAC válido, el asistente se queda en Seleccionar paquete DAC. Seleccione otro paquete DAC válido o cancele el asistente y genere un nuevo paquete DAC.

Validando el contenido de DAC - La barra de progreso que notifica el estado actual del proceso de validación.

< Anterior - Vuelve al estado inicial de la página Seleccionar paquete.

Siguiente > - Va a la versión final de la página Seleccionar paquete.

Cancelar - Termina el asistente sin implementar la DAC.

Página Revisar directiva

Utilice esta página para revisar los resultados de la evaluación de la directiva de selección de servidores de DAC, en caso de que la DAC tenga una directiva. La directiva de selección de servidores de DAC es opcional y está asignada a una DAC que se creó en Microsoft Visual Studio. La directiva se sirve de las facetas de la directiva de selección de servidores para especificar las condiciones que debe cumplir una instancia de Motor de base de datos para hospedar la DAC.

Resultados de evaluación de condiciones de directivas - Un informe de solo lectura que muestra si se ha cumplido correctamente la evaluación de las condiciones de la directiva de implementación de DAC. Los resultados de la evaluación de cada condición se notifican en una línea independiente.

Pasar por alto infracciones de directivas - Utilice esta casilla para comenzar con la actualización si se produce un error en una o más de las condiciones de la directiva. Seleccione esta opción solamente si está seguro de que todas las condiciones que produjeron errores no evitarán la correcta operación de la DAC.

<Anterior - Vuelve a la página Seleccionar paquete.

Siguiente > - Va a la página Detectar cambio.

Cancelar - Termina el asistente sin actualizar la DAC.

Página Detectar cambio

Use esta página para notificar los resultados de la comprobación de los asistentes con respecto a los cambios realizados en la base de datos que hacen que su esquema sea distinto de la definición de esquema almacenada en los metadatos de la DAC en msdb. Por ejemplo, si se han usado instrucciones CREATE, ALTER o DROP para agregar, cambiar o quitar objetos de la base de datos tras la implementación inicial de la DAC. En primer lugar, la página muestra una barra de progreso y, a continuación, notifica los resultados del análisis.

Detectando cambio. Esta operación puede tardar algunos minutos - Muestra una barra de progreso mientras el asistente comprueba las diferencias entre el esquema actual de la base de datos y los objetos en la definición de la DAC.

Resultado de la detección de cambios: - Indica que el análisis se ha completado y los resultados se notifican más abajo.

La base de datos DatabaseName no ha cambiado - El asistente no detectó diferencia alguna en los objetos definidos en la base de datos ni en sus homólogos en la definición de la DAC.

La base de datos DatabaseName ha cambiado - El asistente detectó cambios entre los objetos en la base de datos y sus homólogos en la definición de la DAC.

Continuar a pesar de la posible pérdida de los cambios - Indica que entiende que algunos de los objetos o datos en la base de datos actual no estarán presentes en la base de datos nueva y que desea continuar con la actualización. Seleccione este botón solamente si ha analizado el informe de cambios y entiende los pasos que debe seguir para transferir manualmente cualquier objeto o datos que sean necesarios en la nueva base de datos. Si no está seguro, haga clic en el botón Guardar informe para guardar el informe de cambios y, a continuación, haga clic en Cancelar. Analice el informe, programe cómo transferir los objetos y datos necesarios una vez se haya completado la actualización y, a continuación, reinicie el asistente. Para obtener más información, vea Actualizar aplicaciones de capa de datos.

Guardar informe - Haga clic en el botón para guardar un informe de los cambios que el asistente detectó entre los objetos de la base de datos y sus homólogos en la definición de la DAC. A continuación, puede revisar el informe para determinar si necesita tomar medidas cuando se complete la actualización para incorporar algunos o todos los objetos enumerados en el informe dentro de la nueva base de datos.

< Anterior: vuelve a la página Seleccionar paquete DAC.

Siguiente >: va a la página Revisar el plan de actualización.

Cancelar: termina el asistente sin implementar la DAC.

Página Revisar el plan de actualización

Use esta página para comprobar las acciones que realizará el proceso de actualización. Continúe solo si está seguro de que la actualización no causará problemas.

Se usarán las acciones siguientes para actualizar la DAC. - Compruebe la información que se muestra para asegurarse de que las acciones a emprender serán las correctas. La columna Acción muestra las acciones, como instrucciones Transact-SQL, que se ejecutarán para realizar la actualización. La columna Pérdida de datos contendrá una advertencia si la acción asociada puede eliminar datos.

Actualizar: actualiza la lista de acciones.

Guardar informe de acciones: guarda el contenido de la ventana de acción en un archivo HTML.

Continuar a pesar de la posible pérdida de los cambios: indica que entiende que algunos de los objetos o datos de la base de datos actual no estarán presentes en la base de datos nueva y que desea continuar con la actualización. Seleccione este botón solamente si ha analizado el informe de cambios y entiende los pasos que debe seguir para transferir manualmente cualquier objeto o datos que sean necesarios en la nueva base de datos. Si no está seguro, haga clic en el botón Guardar informe de acciones para guardar el informe de cambios y en el botón Guardar scripts para guardar el script Transact-SQL; a continuación, haga clic en Cancelar. Analice el informe y el script, planee cómo transferir los objetos y datos necesarios una vez que se haya completado la actualización y, a continuación, reinicie el asistente. Para obtener más información, vea Actualizar aplicaciones de capa de datos.

Guardar scripts: guarda en un archivo de texto las instrucciones Transact-SQL que se usarán para realizar la actualización.

Restaurar valores predeterminados: devuelve la opción a su valor predeterminado de false.

< Anterior: vuelve a la página Detectar cambio.

Siguiente >: continúa a la página Resumen.

Cancelar: termina el asistente sin implementar la DAC.

Página Resumen

Utilice esta página para comprobar las acciones que el asistente realizará al actualizar la DAC.

Se utilizará la siguiente configuración en la actualización de su DAC. - Compruebe la información que se muestra para asegurarse de que las acciones a emprender serán las correctas. La ventana muestra la DAC que seleccionó para su actualización y el paquete DAC que contiene la nueva versión de la DAC. La ventana también muestra si la versión actual de la base de datos es igual que la definición de la DAC actual, o bien si la base de datos ha cambiado.

< Anterior - Vuelve a la página Detectar cambio.

Siguiente > - Implementa la DAC y muestra los resultados en la página Actualizar DAC.

Cancelar - Termina el asistente sin implementar la DAC.

Página Actualizar DAC

Esta página notifica si la operación de actualización se realizó correctamente o no.

Actualizando la DAC - Notifica si cada acción realizada para actualizar la DAC se realizó o no correctamente. Revise la información para determinar si cada acción se realizó o no correctamente. Cualquier acción que encontrara un error tendrá un vínculo en la columna Resultado. Seleccione el vínculo para ver un informe del error para esa acción.

Guardar informe - Seleccione este botón para guardar el informe de actualización en un archivo HTML. El archivo notifica el estado de cada acción, incluidos todos los errores generados por cualquiera de las acciones. La carpeta predeterminada es una carpeta SQL Server Management Studio\DAC Packages de la carpeta Documentos de su cuenta de Windows.

Finalizar - termina el asistente.

Actualización de la DAC en paralelo con PowerShell

En este ejemplo se usa el método Upgrade() de DAC Framework 1.0 para realizar una actualización de DAC en paralelo. El método Upgrade() se quitará en la versión siguiente de SQL Server y no es compatible con SQL Azure. Lo mejor es usar el método IncrementalUpgrade() de DAC Framework 1.1 (que se ha explicado anteriormente) para realizar una actualización en contexto.

Hay dos opciones de actualización para las actualizaciones en paralelo:

  • IngoreDrift: si es True, la actualización continúa incluso si se detectan cambios. Si es False, la actualización se termina si el esquema de la base de datos es diferente del definido en la DAC anterior.

  • InvokeTSPolicy: si es True, la directiva de selección de servidor DAC se evalúa y la actualización se termina si hay un error en la validación. Si es False, la directiva no se evalúa.

Para realizar una actualización en contexto, cree un archivo de script de PowerShell (como UpgradeDAC.ps1) que contenga el código siguiente.

  1. Agregue código para crear un objeto de servidor de SMO y establecerlo en la instancia que contiene la base de datos de la que se desea extraer una DAC. En este ejemplo se establece un objeto de servidor en la instancia predeterminada del equipo local:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Agregue código para abrir un objeto ServerConnection y conectarse a la misma instancia.

    ## Open a Common.ServerConnection to the same instance.
    $serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
    $serverconnection.Connect()
    $dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
    
  3. Agregue código para cargar el archivo de paquete DAC. En este ejemplo se carga un archivo MyApplicationVNext.dacpac

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplicationVNext.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. Agregue código para suscribirse a los eventos de implementación de la DAC.

    ## Subscribe to the DAC deployment events.
    $dacstore.add_DacActionStarted({Write-Host `n`nStarting at $(get-date) :: $_.Description})
    $dacstore.add_DacActionFinished({Write-Host Completed at $(get-date) :: $_.Description})
    
  5. Agregue código para actualizar la DAC y cerrar el archivo de paquete DAC:

    ## Upgrade the DAC and create the database.
    $dacName  = "MyApplication"
    $evaluateTSPolicy = $true
    $ignoreDriftOption = $true
    $upgradeProperties = New-Object Microsoft.SqlServer.Management.Dac.DacUpgradeOptions($evaluateTSPolicy, $ignoreDriftOption)
    $dacstore.Upgrade($dacName, $dacType, $upgradeProperties)
    $fileStream.Close()
    

Ejecute UgradeDAC.ps1 desde una sesión de PowerShell en la que haya cargado los complementos SQL Server PowerShell o mediante la utilidad del símbolo del sistema sqlps.

Historial de cambios

Contenido actualizado

Se ha agregado una sección sobre el uso de PowerShell.

Se ha agregado información acerca de la actualización en contexto y DAC Framework 1.1 Feature Pack.

SQL Server 2008 R2 SP1 incluye DAC Framework 1.1 y un nuevo asistente para actualizaciones que realiza actualizaciones en contexto.