Personalização das implantações de banco de dados para vários ambientes
por Jason Lee
Este tópico descreve como personalizar as propriedades de um banco de dados para ambientes de destino específicos como parte do processo de implantação.
Observação
O tópico pressupõe que você está implantando um projeto de banco de dados do Visual Studio 2010 usando MSBuild.exe e VSDBCMD.exe. Para obter mais informações sobre por que você pode escolher essa abordagem, consulte Implantação da Web no Enterprise e Implantando projetos de banco de dados.
Ao implantar um projeto de banco de dados em vários destinos, você geralmente desejará personalizar as propriedades de implantação de banco de dados para cada ambiente de destino. Por exemplo, em ambientes de teste, você normalmente recriaria o banco de dados em cada implantação, enquanto em ambientes de preparo ou produção você teria muito mais chances de fazer atualizações incrementais para preservar seus dados.
Em um projeto de banco de dados do Visual Studio 2010, as configurações de implantação estão contidas em um arquivo de configuração de implantação (.sqldeployment). Este tópico mostrará como criar arquivos de configuração de implantação específicos do ambiente e especificar aquele que você deseja usar como um parâmetro VSDBCMD.
Este tópico faz parte de uma série de tutoriais baseados nos requisitos de implantação corporativa de uma empresa fictícia chamada Fabrikam, Inc. Esta série de tutoriais usa uma solução de exemplo, a solução do Contact Manager, para representar um aplicativo Web com um nível realista de complexidade, incluindo um aplicativo ASP.NET MVC 3, um serviço WCF (Windows Communication Foundation) e um projeto de banco de dados.
O método de implantação no centro desses tutoriais baseia-se na abordagem de arquivo de projeto dividido descrita em Noções básicas sobre o Arquivo de Projeto, na qual o processo de build é controlado por dois arquivos de projeto, um contendo instruções de build que se aplicam a cada ambiente de destino e outro que contém configurações de build e implantação específicas do ambiente. No momento do build, o arquivo de projeto específico do ambiente é mesclado no arquivo de projeto independente do ambiente para formar um conjunto completo de instruções de build.
Visão geral da tarefa
Este tópico pressupõe que:
- Use a abordagem dividir o arquivo de projeto para a implantação da solução, conforme descrito em Noções básicas sobre o arquivo de projeto.
- Você chama o VSDBCMD do arquivo de projeto para implantar seu projeto de banco de dados, conforme descrito em Noções básicas sobre o processo de build.
Para criar um sistema de implantação que dê suporte à variação das propriedades de implantação de banco de dados entre ambientes de destino, você precisará:
- Crie um arquivo de configuração de implantação (.sqldeployment) para cada ambiente de destino.
- Crie um comando VSDBCMD que especifica o arquivo de configuração de implantação como um comutador de linha de comando.
- Parametrize o comando VSDBCMD em um arquivo de projeto do Microsoft Build Engine (MSBuild) para que as opções do VSDBCMD sejam apropriadas para o ambiente de destino.
Este tópico mostrará como executar cada um desses procedimentos.
Criando arquivos de configuração de implantação Environment-Specific
Por padrão, um projeto de banco de dados contém um único arquivo de configuração de implantação chamado Database.sqldeployment. Se você abrir esse arquivo no Visual Studio 2010, poderá ver as diferentes opções de implantação disponíveis para você:
- Ordenação de comparação de implantação. Isso permite que você escolha se deseja usar a ordenação de banco de dados do seu projeto (a ordenação de origem ) ou a ordenação de banco de dados do servidor de destino (a ordenação de destino). Na maioria dos casos, você desejará usar a ordenação de origem ao implantar em um ambiente de desenvolvimento ou teste. Ao implantar em um ambiente de preparo ou produção, você geralmente desejará deixar a ordenação de destino inalterada para evitar problemas de interoperabilidade.
- Implantar propriedades do banco de dados. Isso permite que você escolha se deseja aplicar as propriedades do banco de dados, conforme definido no arquivo Database.sqlsettings . Ao implantar um banco de dados pela primeira vez, você deve implantar as propriedades do banco de dados. Se você estiver atualizando um banco de dados existente, as propriedades já devem estar em vigor e você não precisará implantá-las novamente.
- Sempre recrie o banco de dados. Isso permite que você escolha se deseja recriar o banco de dados de destino sempre que implantar ou fazer alterações incrementais para atualizar o banco de dados de destino com seu esquema. Se você recriar o banco de dados, perderá todos os dados no banco de dados existente. Dessa forma, você geralmente deve definir isso como false para implantações em ambientes de preparo ou produção.
- Bloqueie a implantação incremental se houver perda de dados. Isso permite que você escolha se a implantação deve parar se uma alteração no esquema de banco de dados causar a perda de dados. Normalmente, você define isso como true para uma implantação em um ambiente de produção, para lhe dar a oportunidade de intervir e proteger quaisquer dados importantes. Se você definiu Sempre recriar banco de dados como false, essa configuração não terá efeito.
- Execute a implantação no modo de usuário único. Isso geralmente não é um problema em ambientes de desenvolvimento ou teste. No entanto, normalmente, você deve definir isso como true para implantações em ambientes de preparo ou produção. Isso impede que os usuários façam alterações no banco de dados enquanto a implantação está em andamento.
- Faça backup do banco de dados antes da implantação. Normalmente, você define isso como true quando implanta em um ambiente de produção, como precaução contra a perda de dados. Talvez você também queira defini-lo como true ao implantar em um ambiente de preparo, se o banco de dados de preparo contiver muitos dados.
- Gere instruções DROP para objetos que estão no banco de dados de destino, mas que não estão no projeto de banco de dados. Na maioria dos casos, essa é uma parte integral e essencial de fazer alterações incrementais em um banco de dados. Se você definiu Sempre recriar banco de dados como false, essa configuração não terá efeito.
- Não use instruções ALTER ASSEMBLY para atualizar tipos CLR. Essa configuração determina como SQL Server deve atualizar tipos CLR (Common Language Runtime) para versões mais recentes do assembly. Isso deve ser definido como false na maioria dos cenários.
Esta tabela mostra as configurações de implantação típicas para ambientes de destino diferentes. No entanto, suas configurações podem ser diferentes dependendo de seus requisitos exatos.
Desenvolvedor/teste | Preparo/Integração | Produção | |
---|---|---|---|
Ordenação de comparação de implantação | Fonte | Destino | Destino |
Implantar propriedades do banco de dados | True | Somente pela primeira vez | Somente pela primeira vez |
Sempre recriar banco de dados | True | Falso | Falso |
Bloquear implantação incremental se puder ocorrer perda de dados | Falso | Talvez | True |
Executar script de implantação no modo de usuário único | Falso | True | True |
Fazer backup do banco de dados antes da implantação | Falso | Talvez | True |
Gerar instruções DROP para objetos que estão no banco de dados de destino, mas que não estão no projeto de banco de dados | Falso | True | True |
No usar instruções ALTER ASSEMBLY para atualizar tipos CLR | Falso | Falso | Falso |
Observação
Para obter mais informações sobre propriedades de implantação de banco de dados e considerações de ambiente, consulte Uma visão geral das configurações do projeto de banco de dados, Como configurar propriedades para detalhes de implantação, compilar e implantar bancos de dados em um ambiente de desenvolvimento isolado e compilar e implantar bancos de dados em um ambiente de preparo ou produção.
Para dar suporte à implantação de um projeto de banco de dados em vários destinos, você deve criar um arquivo de configuração de implantação para cada ambiente de destino.
Para criar um arquivo de configuração específico do ambiente
No Visual Studio 2010, na janela Gerenciador de Soluções, clique com o botão direito do mouse no projeto do banco de dados e clique em Propriedades.
Na página de propriedades do projeto de banco de dados, na guia Implantar , na linha Arquivo de configuração de implantação , clique em Novo.
Na caixa de diálogo Novo Arquivo de Configuração de Implantação , dê ao arquivo um nome significativo (por exemplo, TestEnvironment.sqldeployment) e clique em Salvar.
Na página [Filename].sqldeployment , defina as propriedades de implantação para corresponder aos requisitos do ambiente de destino e salve o arquivo.
Observe que o novo arquivo é adicionado à pasta Propriedades em seu projeto de banco de dados.
Especificando o arquivo de configuração de implantação no VSDBCMD
Ao usar configurações de solução (como Depuração e Versão) no Visual Studio 2010, você pode associar um arquivo de configuração de implantação a cada configuração. Quando você cria uma configuração específica, o processo de build gera um arquivo de manifesto de implantação específico da configuração que aponta para o arquivo de configuração de implantação específico da configuração. No entanto, um dos main objetivos da abordagem para a implantação descrita nestes tutoriais é dar às pessoas a capacidade de controlar o processo de implantação sem usar o Visual Studio 2010 e as configurações de solução. Nessa abordagem, a configuração da solução é a mesma, independentemente do ambiente de implantação de destino. Para personalizar a implantação do banco de dados para um ambiente de destino específico, você pode usar as opções de linha de comando do VSDBCMD para especificar o arquivo de configuração de implantação.
Para especificar um arquivo de configuração de implantação no VSDBCMD, use a opção p:/DeploymentConfigurationFile e forneça o caminho completo para o arquivo. Isso substituirá o arquivo de configuração de implantação identificado pelo manifesto de implantação. Por exemplo, você pode usar esse comando VSDBCMD para implantar o banco de dados ContactManager em um ambiente de teste:
vsdbcmd.exe /a:Deploy
/manifest:"…\ContactManager.Database.deploymanifest"
/cs:"Data Source=TESTDB1;Integrated Security=true"
/p:TargetDatabase=ContactManager
/p:DeploymentConfigurationFile=
"…\ContactManager.Database_TestEnvironment.sqldeployment"
/dd+
/script:"…\Publish-ContactManager-Db.sql"
Observação
Observe que o processo de build pode renomear o arquivo .sqldeployment quando ele copia o arquivo para o diretório de saída.
Se você usar variáveis de comando SQL em seus scripts SQL de pré-implantação ou pós-implantação, poderá usar uma abordagem semelhante para associar um arquivo .sqlcmdvars específico do ambiente à sua implantação. Nesse caso, você usa a opção p:/SqlCommandVariablesFile para identificar o arquivo .sqlcmdvars.
Executando o comando VSDBCMD de um arquivo de projeto do MSBuild
Você pode invocar um comando VSDBCMD de um arquivo de projeto do MSBuild usando uma tarefa Exec dentro de um destino do MSBuild. Em sua forma mais simples, teria esta aparência:
<Target Name="DeployDatabase">
<PropertyGroup>
<_Cmd>
Add your VSDBCMD command here
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
- Na prática, para facilitar a leitura e a reutilização dos arquivos de projeto, você desejará criar propriedades para armazenar os vários parâmetros de linha de comando. Isso torna mais fácil para os usuários fornecer valores de propriedade em um arquivo de projeto específico do ambiente ou substituir valores padrão da linha de comando do MSBuild. Se você usar a abordagem de arquivo de projeto dividido descrita em Noções básicas sobre o arquivo de projeto, divida as instruções de build e as propriedades entre os dois arquivos adequadamente:
- As configurações específicas do ambiente, como o nome do arquivo de configuração de implantação, a cadeia de conexão do banco de dados e o nome do banco de dados de destino, devem ir para o arquivo de projeto específico do ambiente.
- O destino do MSBuild que executa o comando VSDBCMD, juntamente com quaisquer propriedades universais, como o local do executável VSDBCMD, deve ir para o arquivo de projeto universal.
Você também deve garantir que você crie o projeto de banco de dados antes de invocar o VSDBCMD para que o arquivo .deploymanifest seja criado e esteja pronto para uso. Você pode ver um exemplo completo dessa abordagem no tópico Noções básicas sobre o processo de build, que orienta você pelos arquivos de projeto na solução de exemplo do Contact Manager.
Conclusão
Este tópico descreveu como você pode personalizar as propriedades do banco de dados para ambientes de destino diferentes ao implantar projetos de banco de dados usando o MSBuild e o VSDBCMD. Essa abordagem é útil quando você precisa implantar projetos de banco de dados como parte de soluções maiores e de escala empresarial. Essas soluções geralmente são implantadas em vários destinos, como ambientes de desenvolvimento em área restrita ou de teste, plataformas de preparo ou integração e ambientes de produção ou ao vivo. Cada um desses ambientes de destino normalmente requer um conjunto exclusivo de propriedades de implantação de banco de dados.
Leitura Adicional
Para obter mais informações sobre como implantar projetos de banco de dados usando VSDBCMD.exe, consulte Implantando projetos de banco de dados. Para obter mais informações sobre como usar arquivos de projeto personalizados do MSBuild para controlar o processo de implantação, consulte Noções básicas sobre o arquivo de projeto e Noções básicas sobre o processo de build.
Estes artigos sobre o MSDN fornecem diretrizes mais gerais sobre a implantação de banco de dados: