Atualizando aplicativos da camada de dados

O processo de atualização de um DAC (aplicativo da camada de dados) implantado em uma nova versão é mais simples do que o uso de scripts para implantar bancos de dados ou alterações de bancos de dados. O desenvolvedor de banco de dados precisa criar apenas um pacote de DAC que descreva o esquema e as propriedades da nova versão. O processo de atualização de DAC compara o novo esquema ao esquema implantado existente e executa dinamicamente as ações necessárias para alterar o novo esquema.

O processo de atualização

O processo de atualização de aplicativo de camada de dados do SQL Server converte um DAC implantado em uma versão diferente do mesmo aplicativo. Por exemplo, para atualizar de Finance versão 1.0 para Finance versão 2.0. As seguintes etapas ilustram um processo de implantação simples:

  • Um desenvolvedor de banco de dados conclui o desenvolvimento de um DAC do Finance 1.0 e, em seguida, cria um pacote de DAC FinanceVersion1.dacpac.

  • Um administrador de banco de dados implanta o DAC do Finance 1.0 para produção. A instância de produto do mecanismo de banco de dados agora tem um DAC implantado que tem um nome de aplicativo Finance, uma versão 1.0 e um nome de banco de dados associado Finance.

  • Em seguida, o desenvolvedor de banco de dados começa a trabalhar na versão seguinte e, quando o desenvolvimento é concluído, cria um FinanceVersion2.dacpac.

  • O administrador de banco de dados planeja o processo de atualização do DAC. Ele faz um backup do banco de dados do Finance. Ele revisa o conteúdo do pacote de DAC e faz um relatório das ações a serem aditadas pela atualização para garantir a ausência de problemas no banco de dados de produção.

  • O administrador de banco de dados executa uma atualização no DAC, especificando o DAC versão 1.0 implantado no momento e o pacote de DAC versão 2.0. Há duas opções para executar a atualização:

    • Execute uma atualização no local usando um script do Windows PowerShell que chama o método DAC IncrementalUpgrade(). A atualização no local altera o esquema do banco de dados existente para corresponder ao esquema definido na nova versão do DAC.

    • Execute uma atualização lado a lado usando o método DAC Upgrade() ou o assistente Atualizar um Aplicativo da Camada de Dados. A atualização lado a lado cria um novo banco de dados com o novo esquema e transfere os dados do banco de dados original para o novo.

  • Quando a atualização for concluída, o DAC atualizado ainda terá um nome de aplicativo Finance e um nome de banco de dados associado denominado Finance, mas a versão do DAC agora será 2.0.

Alterando bancos de dados após a implantação

Um banco de dados terá se afastado de seu DAC original se forem feitas alterações no banco de dados com o uso de um mecanismo diferente da atualização do DAC. Exemplos: o uso de uma instrução CREATE TRIGGER para adicionar um novo gatilho ou o uso de uma instrução ALTER TABLE para alterar a estrutura de uma tabela. Alguns tipos de alterações podem impedir o processo de conclusão da atualização do DAC, dependendo das opções de atualização especificadas. As alterações também não estarão presentes no banco de dados atualizado.

A operação de atualização do DAC procura diferenças entre o esquema do banco de dados atual e a definição do DAC armazenada no banco de dados do sistema msdb. Se encontrar diferenças, ele emitirá uma caixa de diálogo de aviso com a lista das diferenças. Só prossiga com a atualização após analisar as diferenças relatadas e implementar processos ou scripts para transferir objetos ou dados que a atualização não possa transferir, mas que sejam necessários no novo sistema.

Quando a atualização estiver concluída, o banco de dados conterá todos os objetos definidos na nova versão do DAC, e no formato especificado no novo DAC. Em muitos casos, esse será o formato necessário para a versão dos aplicativos associados à nova versão do DAC e do banco de dados. Analise com cuidado o relatório de alterações de atualização e só transfira objetos de fato necessários no novo sistema. Por exemplo, talvez não seja um erro se vários objetos presentes no DAC e no banco de dados atuais estejam faltando no novo DAC. Eles podem estar associados a novos recursos que foram removidos ou reprojetados nas novas versões dos aplicativos que usam o DAC.

Para uma atualização no local, os objetos alterados não são retidos. Salve as definições de objeto e dados antes de iniciar a atualização. Em uma atualização lado a lado, são retidos os objetos e os dados no banco de dados original renomeado. Todos os objetos alterados devem ser transferidos manualmente para o novo banco de dados.

Para obter mais informações sobre ideias relativas a como criar scripts dos objects a serem transferidos para o novo banco de dados, consulte Como gerar um script (SQL Server Management Studio).

Projetos do DAC podem especificar scripts de pré-implantação e de pós-implantação. Estes são scripts de Transact-SQL que podem executar qualquer ação, inclusive criar objetos sem suporte em um DAC. Se o DAC original contiver um script de pós-implantação que criou objetos sem suporte em um DAC, esses objetos deverão ser atualizados separadamente usando um mecanismo que permita sua remoção durante uma atualização no local, ou deverão ser mantidos no banco de dados original por uma atualização lado a lado.

Atualização no local

Uma atualização no local executa as seguintes ações:

  • Verifica se o DAC implantado e o pacote de DAC têm o mesmo nome de aplicativo (por exemplo, os dois nomes são definidos como Finance). Ela também avalia se a instância do Mecanismo de banco de dados satisfaz os requisitos especificados na política de seleção de servidor (caso esteja definido) na nova versão do DAC, e se o banco de dados existente contém objetos sem suporte em um DAC.

  • Executa todas das modificações, tais como as instruções CREATE, ALTER e DROP, necessárias para criar o esquema da correspondência de banco de dados definido na nova versão do DAC.

Se a opção Ignorar Perda de Dados estiver definida como True, a atualização do DAC poderá executar ações que removam dados. Por exemplo, se houver uma tabela no banco de dados atual mas não no esquema do novo DAC, a atualização removerá a tabela. Antes de executar a operação, o administrador de banco de dados deverá arquivar quaisquer dados que possam ser necessários após a atualização.

As atualizações no local têm suporte no SQL Azure e em instâncias do Mecanismo de Banco de Dados. As atualizações no local exigem o DAC Framework 1.1 e um novo assistente de atualização DAC, que estão incluídos no SQL Server 2008 R2 Service Pack 1 (SP1).

Atualização lado a lado

As atualizações lado a lado não têm suporte no SQL Azure e não terão suporte na próxima versão do SQL Server. O mecanismo de atualização recomendado é a atualização no local, incluída no SQL Server 2008 R2 SP1.

Uma atualização lado a lado executa as seguintes ações:

  • Verifica se o DAC implantado e o pacote de DAC têm o mesmo nome de aplicativo (por exemplo, os dois nomes são definidos como Finance). Ela também avalia se a instância do Mecanismo de banco de dados satisfaz os requisitos especificados na política de seleção de servidor (caso esteja definido) na nova versão do DAC, e se o banco de dados existente contém objetos sem suporte em um DAC.

  • Implanta a nova versão do DAC a partir do pacote de DAC. Isso cria um novo banco de dados com um nome temporário.

  • Definirá o banco de dados original como somente leitura se ele ainda não estiver no modo somente leitura e copiará os dados no novo banco de dados.

  • Se o banco de dados original estava no modo somente leitura, o novo banco de dados será definido como somente leitura.

  • O banco de dados original é renomeado com o acréscimo de uma cadeia de caracteres ao final do nome de banco de dados.

  • O novo banco de dados recebe o nome do banco de dados original.

  • Depois que o administrador de banco de dados confirmar que o novo banco de dados está funcionando corretamente, o banco de dados original poderá ser arquivado.

As alterações no banco de dados podem interferir na transferência ou não dos dados de uma tabela para o novo banco de dados. As tabelas podem estar nestes estados em relação às alterações de banco de dados:

  • A estrutura da tabela é a mesma em todos os três locais: a definição de DAC atual no msdb, o banco de dados atual e o novo DAC. A tabela estará presente no novo banco de dados e a operação de atualização transferirá os dados para o novo banco de dados. A transferência é feita com o uso de uma instrução INSERT, com base em uma instrução SELECT da tabela antiga.

  • A tabela não existe na definição de DAC ou banco de dados atual, mas é definida no novo DAC. A tabela estará presente no novo banco de dados, mas não terá dados porque não há dados para transferência.

  • A tabela não existe na definição de DAC, mas existe no banco de dados atual e no novo DAC. A tabela estará presente no novo banco de dados, mas a operação de atualização não transferirá os dados. Transfira manualmente os dados após a conclusão da atualização.

  • A tabela existe na definição de DAC e no banco de dados atuais, mas não no novo DAC. A tabela não existirá no novo banco de dados. Se a tabela for necessária no novo sistema, crie manualmente a tabela e transfira os dados após a conclusão da atualização.

  • A tabela existe em todos os três locais, mas a estrutura da tabela na definição de DAC e no banco de dados atuais são diferentes da estrutura da tabela no novo DAC. A tabela estará presente no novo banco de dados com a estrutura definida no novo DAC.

    • Se os nomes da tabela e da coluna não coincidirem, a operação de atualização relatará que ela não transferiu os dados. Transfira manualmente os dados após a conclusão da atualização.

    • Se os nomes da tabela e da coluna forem iguais, a operação de atualização tentará transferir os dados. Se o tipo de dados de uma ou mais colunas for alterado e não for compatível, a instrução INSERT falhará, o que causará a reversão do processo de atualização.

Você pode usar qualquer mecanismo para transferir os dados para a nova versão da tabela. Você pode usar uma instrução INSERT selecionada da versão antiga da tabela. Também é possível usar uma das técnicas de inserção em massa abordadas em Importando e exportando dados em massa.

Histórico de alterações

Conteúdo atualizado

Descreveu a atualização no local apresentada pelo DAC Framework 1.1. Removeu o conteúdo duplicado em outros tópicos.

O SQL Server 2008 R2 SP1 oferece suporte total para atualizações no local, incluindo o DAC Framework 1.1 e um novo assistente de atualização no local.