Validar un paquete DAC

Es aconsejable revisar el contenido del paquete de la aplicación de capa de datos antes de implementarla en producción así como validar las acciones de actualización antes de usar un paquete DAC para actualizar una DAC existente. Esto es especialmente aconsejable al implementar paquetes que no se desarrollaron en su organización.

Ver el contenido de una DAC

Hay dos mecanismos para ver el contenido de un paquete DAC. Puede crear un proyecto DAC en Microsoft Visual Studio 2010 e importar el paquete DAC al proyecto. Puede desempaquetar el contenido del paquete en una carpeta.

Nota de seguridadNota de seguridad

Se recomienda no implementar un paquete DAC desde 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. Antes de usar una DAC de un origen desconocido o que no sea de confianza, implántela en una instancia de prueba aislada de Motor de base de datos, ejecute DBCC CHECKDB en la base de datos y examine el código en la base de datos, como los procedimientos almacenados u otro código definido por el usuario.

Una manera de ver el contenido de un paquete DAC es crear un proyecto DAC en Microsoft Visual Studio 2010 e importar el paquete en el proyecto. A continuación, puede usar el Explorador de soluciones para abrir todos los archivos de la DAC, como la directiva de selección de servidor y los scripts previos y posteriores a la implementación. Puede utilizar la Vista de esquema para revisar todos los objetos en el esquema, especialmente el código en objetos, como funciones o procedimientos almacenados.

Si no tiene el acceso a Visual Studio 2010, puede desempaquetar el contenido de la DAC en una carpeta. A continuación, puede abrir los scripts Transact-SQL en el Editor de consultas del motor de base de datos en SQL Server Management Studio y los archivos en herramientas como el Bloc de notas. Para obtener instrucciones, vea Desempaquetar un paquete DAC.

Validar una actualización con un asistente

Antes de actualizar una DAC, es aconsejable comprobar primero si se han realizado cambios en la base de datos después de la implementación inicial de la DAC y revisar un script de los cambios que hará la actualización. Puede usar el Asistente Actualizar aplicación de capa de datos para ver esta información; puede ver los cambios en la base de datos en la página Detectar cambios y las acciones de actualización en la página Resumen. Haga clic en Cancelar en la página Resumen si no desea realizar la actualización. Para obtener más información, vea Actualizar una aplicación de capa de datos.

Ver los cambios de las bases de datos con PowerShell

Antes de usar una versión nueva de un paquete DAC para actualizar una DAC que se implementó a partir de un paquete DAC anterior, compruebe si se han realizado cambios en la base de datos que pudieran afectar a la actualización.

Nota

En los ejemplos de PowerShell de este tema se usan los métodos incluidos en DAC Framework 1.1 Feature Pack. Puede descargar el Feature Pack desde esta página web.

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

  1. Agregue código para crear un objeto Servidor de SMO y establecerlo en la instancia que contiene la DAC que se va a actualizar. 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 especificar la DAC implementada anteriormente, después cree un objeto ChangeResults y canalícelo a un archivo de texto para generar un informe sencillo de los objetos nuevos, eliminados y cambiados.

    ## Specify the DAC instance name.
    $dacName  = "MyApplication"
    
    ## Generate the change list and save to file.
    $dacChanges = $dacstore.GetDatabaseChanges($dacName) | Out-File -Filepath C:\DACScripts\MyApplicationChanges.txt
    

Ejecute el archivo .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.

Generar un script de actualización con PowerShell

Antes de usar una versión nueva de un paquete DAC para actualizar una DAC que se implementó a partir de un paquete DAC anterior, puede generar un archivo de script que contenga las instrucciones de Transact-SQL que se ejecutarán durante la actualización y, después, revisar el script. Cree un archivo de script de PowerShell (.ps1) que contenga el código siguiente:

  1. Agregue código para crear un objeto Servidor de SMO y establecerlo en la instancia que contiene la DAC que se va a actualizar. 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 MyApplication.dacpac

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplication.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. Agregue código para especificar la DAC implementada anteriormente, después cree un script Transact-SQL y canalícelo a un archivo .sql. Cierre la secuencia de archivo para leer el nuevo paquete DAC.

    ## Specify the DAC instance name.
    $dacName  = "MyApplication"
    
    ## Generate the upgrade script and save to file.
    $dacstore.GetIncrementalUpgradeScript($dacName, $dacType) | Out-File -Filepath C:\DACScripts\MyApplicationUpgrade.sql
    
    ## Close the filestream to the new DAC package.
    $fileStream.Close()
    

Ejecute el archivo .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.

Comparar las DAC

Antes de actualizar una DAC, también puede revisar las diferencias en la base de datos y los objetos a nivel de instancia entre la DAC actual y la nueva. Si no tiene una copia del paquete de la DAC actual, puede extraer un paquete de la base de datos actual.

Si importa ambos paquetes DAC en proyectos DAC en Visual Studio 2010, puede utilizar la herramienta de comparación de esquemas para analizar las diferencias entre las dos DAC.

Si no tiene el acceso a Visual Studio 2010, desempaquete las DAC en carpetas distintas. A continuación, puede utilizar una herramienta de diferenciación, como la utilidad WinDiff, para analizar las diferencias.