Como validar um pacote de DAC

Uma prática recomendada é revisar o conteúdo de um pacote de DAC (aplicativo de camada de dados) antes de implantá-lo em produção e também validar as ações de atualização antes de usar um pacote de DAC para atualizar um DAC existente. Isso é especialmente válido durante a implantação de pacotes que não foram desenvolvidos em sua organização.

Exibindo o conteúdo de um DAC

Existem dois mecanismos para exibição do conteúdo de um pacote de DAC. Você pode criar um projeto de DAC no Microsoft Visual Studio 2010 e importar o pacote de DAC para o projeto. É possível desempacotar o conteúdo do pacote em uma pasta.

Observação sobre segurançaObservação sobre segurança

Recomenda-se não implantar um pacote de DAC a partir de origens desconhecidas ou não confiáveis. Como os DACs podem conter código mal-intencionado que pode executar código Transact-SQL sem finalidade ou provocar erros modificando o esquema. Antes de usar um DAC de uma origem desconhecida ou não confiável, implante-o em uma instância de teste isolada do Mecanismo de Banco de Dados, execute DBCC CHECKDB no banco de dados e, além disso, examine o código, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

Uma forma de exibir o conteúdo de um pacote de DAC é criar um projeto de DAC no Microsoft Visual Studio 2010 e importar o pacote para o projeto. Você poderá usar o Gerenciador de Soluções para abrir todos os arquivos no DAC, como a política de seleção de servidor e os scripts de pré e pós-implantação. Use a Exibição de Esquema para revisar todos os objetos no esquema, revisando particularmente o código em objetos, como funções ou procedimentos armazenados.

Se você não tiver acesso ao Visual Studio 2010, poderá desempacotar o conteúdo do DAC em uma pasta. Você poderá abrir os scripts Transact-SQL no Editor de Consultas do Mecanismo de Banco de Dados, no SQL Server Management Studio, e os arquivos em ferramentas como Bloco de notas. Para obter instruções, consulte Como desempacotar um pacote de DAC.

Validando uma atualização usando um assistente

Antes de atualizar um DAC, convém primeiro verificar as alterações feitas no banco de dados depois da implantação inicial de DAC, além de revisar um script das alterações resultantes da atualização. É possível usar o Assistente para Atualizar Aplicativo da Camada de Dados para exibir estas informações; você pode exibir as alterações do banco de dados na página Detectar Alteração e as ações de atualização na página Resumo. Clique em Cancelar na página Resumo se não desejar executar a atualização. Para obter mais informações, consulte Como atualizar um aplicativo da camada de dados.

Exibir alterações do banco de dados usando o PowerShell

Antes de usar uma nova versão de um pacote de DAC para atualizar um DAC implantado de um pacote de DAC anterior, verifique se foram feitas alterações no banco de dados que possam afetar a atualização.

ObservaçãoObservação

Os exemplos de PowerShell deste tópico utilizam métodos apresentados no DAC Framework 1.1 Feature Pack. Você pode baixar o Feature Pack desta página da Web.

Crie um arquivo de script do PowerShell (.ps1) contendo o seguinte código:

  1. Adicione código para criar um objeto Server do SMO e defina-o para a instância contendo o DAC a ser atualizado. Este exemplo define um objeto Server como a instância padrão no computador local:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Adicione código para abrir um objeto ServerConnection e conectar-se à mesma instância.

    ## 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. Adicione código para especificar o DAC previamente implantado. Depois, crie um objeto ChangeResults e redirecione-o para um arquivo de texto para gerar um relatório simples de objetos novos, excluídos e alterados.

    ## 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
    

Execute o arquivo .ps1 de uma sessão do PowerShell na qual você tenha carregado os snapins SQL Server PowerShell ou através do utilitário de prompt de comando sqlps.

Gere um script de atualização usando o PowerShell

Antes de usar uma nova versão de um pacote de DAC para atualizar um DAC que foi implantado de um pacote de DAC anterior, você pode gerar um arquivo de script que contém as instruções Transact-SQL a serem executadas durante a atualização e, depois, examinar o script. Crie um arquivo de script do PowerShell (.ps1) contendo o seguinte código:

  1. Adicione código para criar um objeto Server do SMO e defina-o para a instância contendo o DAC a ser atualizado. Este exemplo define um objeto Server como a instância padrão no computador local:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Adicione código para abrir um objeto ServerConnection e conectar-se à mesma instância.

    ## 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. Adicione código para carregar o arquivo de pacote de DAC. Este exemplo carrega um arquivo 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. Adicione código para especificar o DAC previamente implantado e, depois, crie um script Transact-SQL e redirecione-o para um arquivo .sql. Feche o filestream usado para ler o novo pacote de 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()
    

Execute o arquivo .ps1 de uma sessão do PowerShell na qual você tenha carregado os snapins SQL Server PowerShell ou através do utilitário de prompt de comando sqlps.

Comparando DACs

Antes de atualizar um DAC, também é possível analisar as diferenças nos objetos em nível de banco de dados e instância entre o DAC atual e o novo. Se você não tiver uma cópia do pacote para o DAC atual, poderá extrair um pacote do banco de dados atual.

Se você importar ambos os pacotes de DAC para projetos de DAC no Visual Studio 2010, poderá usar a ferramenta de comparação de esquemas para analisar as diferenças entre o dois DACs.

Se você não tiver acesso ao Visual Studio 2010, desempacote os DACs em pastas separadas. Você pode usar uma ferramenta de diferenças, como o utilitário WinDiff, para analisar as diferenças.