Como atualizar um aplicativo da camada de dados

Use o Assistente para Atualizar Aplicativo da Camada de Dados ou um script do Windows PowerShell para alterar o esquema e as propriedades de um DAC (aplicativo da camada de dados) implantado no momento para coincidir com o esquema e as propriedades definidos em uma nova versão do DAC.

Atualizações no local e lado a lado

Existem dois tipos de atualizações de DAC:

  • Uma atualização lado a lado preserva uma cópia do banco de dados existente enquanto cria um novo banco de dados que tem o esquema definido na nova versão do DAC. Depois, ela copia dados do banco de dados antigo no banco de dados novo.

  • Uma atualização no local altera o esquema do banco de dados existente para corresponder ao esquema definido na nova versão do DAC.

O SQL Server 2008 R2 e o Microsoft Visual Studio 2010 incluíam o DAC Framework 1.0, que só oferecia suporte a atualizações lado a lado. Atualizações lado a lado não oferecem suporte ao SQL Azure. O SQL Server 2008 R2 Service Pack 1 (SP1) e o Visual Studio 2010 SP1 incluem um novo DAC Framework 1.1, que apresenta atualizações no local no SQL Azure e em instâncias do Mecanismo de Banco de Dados. Para obter mais informações sobre o DAC Framework 1.1, consulte Suporte de DAC para objetos e versões do SQL Server

A versão original do Assistente de Atualização de DAC usava o DAC Framework 1.0 para executar atualizações lado a lado. A versão do assistente no SQL Server 2008 R2 SP1 executa uma atualização no local.

Usuários do SQL Server 2008 R2 podem ser atualizados para o novo assistente e para o DAC Framework 1.1 através da instalação do SQL Server 2008 R2 SP1.

Preparando para a atualização

Convém fazer um backup completo do banco de dados antes de iniciar a atualização. Se uma atualização encontrar um erro e não puder reverter todas as suas atualizações, talvez seja preciso restaurar o backup.

Há várias ações a serem adotadas para validar o pacote de DAC e as ações de atualização. Para obter mais informações sobre como executar essas verificações, consulte Como validar um pacote de DAC.

  • É recomendável não atualizar usando um pacote de DAC de origens desconhecidas ou não confiáveis. Esses DACs podem conter código mal-intencionado que pode executar código Transact-SQL não intencional ou provocar erros modificando o esquema. Antes de usar um DAC de uma origem desconhecida ou não confiável, desempacote o DAC e examine o código, como procedimentos armazenados ou outro código definido pelo usuário.

  • Se ocorreram alterações no banco de dados atual após a implantação do DAC original, algumas dessas alterações talvez impeçam a conclusão bem-sucedida da atualização, ou talvez elas sejam removidas pela atualização. Você deve gerar primeiro um relatório de revisão que inclua as alterações feitas no banco de dados.

  • É aconselhável gerar uma lista das alterações a serem feitas pela atualização no esquema, além de revisá-las para verificar se há problemas.

Escolher as opções de atualização do DAC

Há quatro opções de atualização para uma atualização no local:

Ignorar Perda de Dados – Se True, a atualização continuará mesmo que algumas das operações resultem na perda de dados. Se False, estas operações finalizarão a atualização. Por exemplo, se uma tabela no banco de dados atual não estiver presente no esquema do novo DAC, a tabela será removida se True for especificado. A configuração padrão é True.

Bloquear Alterações - Se True, a atualização será finalizada se o esquema de banco de dados for diferente daquele definido no DAC anterior. Se False, a atualização continuará mesmo que sejam detectadas alterações. A configuração padrão é False.

Reversão em Falha - Se True, a atualização será incluída em transações. Se forem encontrados erros, haverá uma tentativa de reversão. Se False, todas as alterações serão confirmadas à medida que ocorrerem. Se houver erros, talvez você precise restaurar um backup anterior do banco de dados. A configuração padrão é False.

Ignorar a Validação da Política - Se True, a política de seleção de servidor de DAC não será avaliada. Se False, a política será avaliada e a atualização finalizará se houver um erro de validação. A configuração padrão é False.

Requisitos

Um DAC pode ser atualizado somente pelos membros das funções de servidor fixas sysadmin ou serveradmin ou por logons que estejam na função de servidor fixa dbcreator e tenham permissões ALTER ANY LOGIN. O logon deve ser o proprietário do banco de dados existente. A conta interna do administrador de sistema do SQL Server, chamada sa, também pode iniciar o assistente.

O nome do aplicativo no pacote de DAC deve corresponder ao nome do aplicativo do DAC implantado no momento. Por exemplo, se o DAC atual tiver um nome de aplicativo GeneralLedger, somente será possível atualizar usando um pacote de DAC que também tenha um nome de aplicativo GeneralLedger.

Senhas de logon

Para melhorar a segurança, os logons de Autenticação do SQL Server são armazenados em um pacote de DAC sem nenhuma senha. Quando o pacote é implantado ou atualizado, o logon é criado como um logon desabilitado com uma senha gerada. Para habilitar os logons, faça logon usando um logon que tenha a permissão de ALTER ANY LOGIN e use ALTER LOGIN para habilitar o logon e atribuir uma nova senha que possa ser comunicada ao usuário. Isso não é necessário para logons de Autenticação do Windows uma vez que suas senhas não são gerenciadas pelo SQL Server.

Considerações sobre espaço

Em uma atualização no local, a principal consideração espacial é que exista espaço de log de transação suficiente disponível para registrar todas as modificações.

A atualização lado a lado mantém o banco de dados atual para o DAC implantado, além de criar um novo banco de dados e copiar os dados existentes no novo banco de dados. Você deve ter espaço livre em disco suficiente para armazenar um novo banco de dados que seja tão grande quanto o banco de dados existente. Antes de executar uma atualização lado a lado, verifique se a quantidade de dados no banco de dados atual não é grande demais para caber no novo banco de dados. O banco de dados criado pela atualização terá as configurações de tamanho padrão da instrução CREATE DATABASE. O padrão é um arquivo de dados com um tamanho inicial de 3 MB e um número ilimitado de incrementos de 1 MB, e um arquivo de log que tem um tamanho inicial de 1 MB e um limite máximo de tamanho de 2 GB.

Opções de banco de dados lado a lado

Em uma atualização lado a lado, o banco de dados criado durante a fase de implantação terá todas as configurações padrão da instrução CREATE DATABASE, exceto:

  • O agrupamento de banco de dados e o nível de compatibilidade são definidos para os valores definidos no pacote de DAC. Um pacote criado a partir de um projeto de DAC no Visual Studio usa os valores definidos no projeto de DAC. Um pacote extraído de um banco de dados existente usa os valores do banco de dados original.

  • Você pode ajustar algumas das configurações de banco de dados, como nome de banco de dados e caminhos de arquivos, na página Atualizar Configuração.

Algumas opções de banco de dados, como TRUSTWORTHY, DB_CHAINING e HONOR_BROKER_PRIORITY, não podem ser ajustadas como parte do processo de implantação. Propriedades físicas, como o número de grupos de arquivos ou os números e os tamanhos de arquivos, não podem ser alteradas como parte do processo de implantação. Após a conclusão da implantação, você pode usar a instrução ALTER DATABASE, o SQL Server Management Studio ou o SQL Server PowerShell para personalizar o banco de dados. Para obter mais informações, consulte Modificando um banco de dados.

Atualização do DAC no local usando o PowerShell

Este exemplo usa o método IncrementalUpgrade() do DAC Framework 1.1 para executar uma atualização do DAC no local. Este método atualizará DACs no SQL Server ou no SQL Azure. A forma recomendável de obter a nova estrutura é instalar o SQL Server 2008 R2 SP1.

Crie um script do PowerShell (como IncrementalUpgradeDAC.ps1) contendo o código a seguir.

  1. Adicione código para criar um objeto SMO Server e defini-lo como a instância que contém o banco de dados do qual você quer extrair um DAC. 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 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. Adicione código para assinar os eventos de implantação do 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. Adicione código para especificar o DAC a ser atualizado e as opções de atualização, atualize o DAC e feche o arquivo do pacote de 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()
    

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

Atualização do DAC no local usando um assistente

No Management Studio, você pode iniciar o Assistente para Atualizar Aplicativo da Camada de Dados abrindo o nó Servidor no Pesquisador de Objetos, selecionando o nó Gerenciamento e selecionando o nó Aplicativos da Camada de Dados. Clique com o botão direito do mouse em um nó de aplicativo da camada de dados no Pesquisador de Objetos e selecione Atualizar Aplicativo da Camada de Dados…

Observação sobre cuidadosCuidado

O Assistente de Atualização DAC na versão original do SQL Server 2008 R2 executa uma atualização lado a lado, sem suporte no SQL Azure. Esta sessão descreve o uso da nova versão do assistente no SQL Server 2008 R2 SP1, que executa uma atualização no local.

Clique em um link na lista abaixo para navegar até os detalhes de uma página do assistente:

  • Página de introdução

  • Página Selecionar Pacote

  • Página Analisar Política

  • Página Detectar Alterações

  • Analisar um plano de atualização

  • Página de resumo

  • Página Atualizar DAC

Página de introdução

Esta página descreve as etapas para atualizar um aplicativo da camada de dados.

Não mostrar esta página novamente. - Clique na caixa de seleção para interromper a exibição da página no futuro.

Avançar > - Vai para a página Selecionar Pacote.

Cancelar - Finaliza o assistente sem atualizar o DAC.

Página Selecionar Pacote

Use esta página para especificar o pacote de DAC que contém a nova versão do aplicativo da camada de dados. A página faz a transição por dois estados.

Selecionar o pacote de DAC

Use o estado inicial da página para escolher o pacote de DAC a ser implantado. O pacote de DAC deve ser um arquivo de pacote de DAC válido e deve ter uma extensão .dacpac. O nome do aplicativo de DAC no pacote de DAC deve ser igual ao nome do aplicativo do DAC atual.

Pacote de DAC - Especifique o caminho e o nome de arquivo do pacote de DAC que contém a nova versão do aplicativo da camada de dados. Você pode selecionar o botão Procurar no lado direito da caixa para procurar o local do pacote de DAC.

Nome do Aplicativo - Uma caixa somente leitura que exibe o nome do aplicativo de DAC atribuído quando o DAC foi criado ou extraído de um banco de dados.

Versão - Uma caixa somente leitura que exibe a versão atribuída quando o DAC foi criado ou extraído de um banco de dados.

Descrição - Uma caixa somente leitura que exibe a descrição escrita quando o DAC foi criado ou extraído de um banco de dados.

< Anterior - Volta à página de Introdução.

Avançar > - Exibe uma barra de progresso enquanto o assistente confirma se o arquivo selecionado é um pacote de DAC válido.

Cancelar - Finaliza o assistente sem atualizar o DAC.

Validando o pacote de DAC

Exibe uma barra de progresso enquanto o assistente confirma se o arquivo selecionado é um pacote de DAC válido. Se o pacote de DAC for validado, o assistente seguirá para a página Examinar Política. Se o arquivo não for um pacote de DAC válido, o assistente permanecerá em Selecionar Pacote de DAC. Selecione outro pacote de DAC válido ou cancele o assistente e gere um novo pacote de DAC.

Validando o conteúdo do DAC - A barra de progresso que relata o status atual do processo de validação.

< Anterior - Retorna ao estado inicial da página Selecionar Pacote.

Avançar > - Vai para a versão final da página Selecionar Pacote.

Cancelar - Finaliza o assistente sem implantar o DAC.

Página Analisar Política

Use esta página para examinar os resultados da avaliação da política de seleção de servidor de DAC, se o DAC tiver uma política. A política de seleção de servidor de DAC é opcional e atribuída a um DAC criado no Microsoft Visual Studio. A política usa as facetas de política de seleção de servidor para especificar as condições que uma instância do Mecanismo de Banco de Dados deve atender para hospedar o DAC.

Resultados da avaliação das condições da política - Um relatório somente leitura que mostra se as avaliações das condições na política de seleção de servidor de DAC foram bem-sucedidas. Os resultados da avaliação de cada condição são relatados em uma linha separada.

Ignorar violações de política - Use esta caixa de seleção para continuar com a atualização se uma ou mais condições de política falharem. Somente selecione essa opção se você tiver certeza de que todas as condições que falharam não impedirão o funcionamento bem-sucedido do DAC.

< Anterior - Retorna à página Selecionar Pacote.

Avançar >- Continua na página Detectar Alterações.

Cancelar - Finaliza o assistente sem atualizar o DAC.

Página Detectar Alterações

O uso desta página relata os resultados da verificação dos assistentes das alterações feitas ao banco de dados que tornam esse esquema diferente da definição do esquema armazenado nos metadados do DAC no msdb. Por exemplo, se as instruções CREATE, ALTER ou DROP tiverem sido usadas para adicionar, alterar ou remover objetos do banco de dados após a implantação original do DAC. Primeiro, a página exibe uma barra de progresso e depois relata os resultados da análise.

Detectando alteração, isso pode demorar alguns minutos - Exibe uma barra de progresso enquanto o assistente verifica as diferenças entre o esquema atual do banco de dados e os objetos na definição do DAC.

Resultados da detecção de alterações: - Indica se a análise foi concluída e os resultados são relatados abaixo.

O banco de dados DatabaseName não foi alterado - O assistente não detectou diferenças nos objetos definidos no banco de dados e em suas contrapartes na definição do DAC.

O banco de dados DatabaseName foi alterado - O assistente não detectou alterações entre os objetos no banco de dados e em suas contrapartes na definição do DAC.

Continuar, apesar da possível perda de alterações - Especifique que você entende que alguns dos objetos ou dados no banco de dados atual não estarão presentes no novo banco de dados e que está disposto a continuara com a atualização. Somente selecione este botão se você tiver analisado o relatório de alterações e entender as etapas que deve executar para transferir manualmente os objetos ou os dados necessários no novo banco de dados. Se você não tiver certeza, clique no botão Salvar Relatório para salvar o relatório de alterações e clique em Cancelar. Analise o relatório, faça um planejamento de como transferir os objetos e os dados necessários após a conclusão da atualização e reinicie o assistente. Para obter mais informações, consulte Atualizando aplicativos da camada de dados.

Salvar Relatório - Clique no botão para salvar um relatório das alterações que o assistente detectou entre os objetos no banco de dados e suas contrapartes na definição do DAC. Em seguida, você pode examinar o relatório para determinar se precisa executar ações após a conclusão da atualização para incorporar alguns ou todos os objetos listados no relatório para o novo banco de dados.

< Anterior - Retorna à página Selecionar Pacote de DAC.

Avançar > - Prossegue para a página Analisar um plano de atualização.

Cancelar - Finaliza o assistente sem implantar o DAC.

Página Analisar um plano de atualização

Use esta página para examinar as ações que serão tomadas pelo processo de atualização. Só prossiga quando estiver certo de que a atualização não criará problemas.

As ações a seguir serão usadas para atualizar o DAC. - Examine as informações exibidas para assegurar que as ações executadas estarão corretas. A coluna Ação exibe as ações, tais como instruções Transact-SQL, que serão executadas para realizar a atualização. A coluna Perda de Dados conterá um aviso se a ação associada puder excluir dados.

Atualizar - atualiza a lista de ações.

Salvar Relatório de Ação - salva o conteúdo da janela de ação em um arquivo HTML.

Continuar, apesar da possível perda de alterações - Especifique que você entende que alguns dos objetos ou dados no banco de dados atual não estarão presentes no novo banco de dados e que está disposto a continuara com a atualização. Somente selecione este botão se você tiver analisado o relatório de alterações e entender as etapas que deve executar para transferir manualmente os objetos ou os dados necessários no novo banco de dados. Se você não tiver certeza, clique no botão Salvar Relatório de Ação para salvar o relatório de alterações e no botão Salvar Scripts para salvar o script Transact-SQL. Depois, clique em Cancelar. Analise o relatório e o script. Em seguida, planeje como transferir os objetos e os dados necessários após a conclusão da atualização. Reinicie o assistente. Para obter mais informações, consulte Atualizando aplicativos da camada de dados.

Salvar Scripts – salva as instruções Transact-SQL que serão usadas para executar a atualização em um arquivo de texto.

Restaurar Padrões - Retorna a opção à sua configuração padrão de false.

< Anterior - Volta à página Detectar Alteração.

Avançar >- Prossegue para a página Resumo.

Cancelar - Finaliza o assistente sem implantar o DAC.

Página de resumo

Use esta página para examinar as ações do assistente ao atualizar o DAC.

As configurações a seguir serão usadas para atualizar o DAC. - Examine as informações exibidas para assegurar que as ações executadas estarão corretas. A janela exibe o DAC selecionado para atualização e o pacote de DAC que contém a nova versão do DAC. A janela também exibe se a versão atual do banco de dados é igual à definição de DAC atual, ou se o banco de dados foi alterado.

< Anterior - Volta à página de Detectar Alterações.

Avançar > - Implanta o DAC e exibe os resultados na página Atualizar DAC.

Cancelar - Finaliza o assistente sem implantar o DAC.

Página Atualizar DAC

Esta página relata o êxito ou falha da operação de atualização.

Atualizando o DAC - Relata o êxito ou falha de cada ação realizada para atualizar o DAC. Analise as informações para determinar o êxito ou falha de cada ação. Todas as ações que obtiveram erro terão um link na coluna Resultado. Selecione o link para exibir um relatório do erro para aquela ação.

Salvar Relatório - Selecione esse botão para salvar o relatório de atualização em um arquivo HTML. O arquivo relata o status de cada ação, inclusive todos os erros gerados por qualquer uma das ações. A pasta padrão é SQL Server Management Studio\DAC Packages na pasta Documentos da conta do Windows.

Concluir - Finaliza o assistente.

Atualização do DAC lado a lado usando o PowerShell

Este exemplo usa o método Upgrade() do DAC Framework 1.0 para executar uma atualização do DAC lado a lado. O método Upgrade() será removido na próxima versão do SQL Server e não dá suporte a SQL Azure. O ideal é utilizar o método IncrementalUpgrade() do DAC Framework 1.1 (discutido anteriormente) para executar uma atualização no local.

Há duas opções de atualização para atualizações lado a lado:

  • IngoreDrift - Se True, a atualização continuará mesmo que sejam detectadas alterações. Se False, a atualização será finalizada se o esquema de banco de dados for diferente daquele definido no DAC anterior.

  • InvokeTSPolicy - Se True, a política de seleção de servidor de DAC será avaliada e a atualização finalizará se houver um erro de validação. Se False, a política não será avaliada.

Para executar uma atualização no local, crie um arquivo de script do PowerShell (como UpgradeDAC.ps1) contendo o código a seguir.

  1. Adicione código para criar um objeto SMO Server e defini-lo como a instância que contém o banco de dados do qual você quer extrair um DAC. 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 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. Adicione código para assinar os eventos de implantação do 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. Adicione código para atualizar o DAC e fechar o arquivo de pacote de 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()
    

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

Histórico de alterações

Conteúdo atualizado

Adicionada a seção sobre o uso do PowerShell.

Informações adicionadas sobre a atualização no local e o DAC Framework 1.1 Feature Pack.

O SQL Server 2008 R2 SP1 inclui o DAC Framework 1.1 e um novo assistente de atualização que faz atualizações no local.