Implantação de projetos de banco de dados

por Jason Lee

Observação

Em muitos cenários de implantação corporativa, você precisa da capacidade de publicar atualizações incrementais em um banco de dados implantado. A alternativa é recriar o banco de dados em cada implantação, o que significa que você perde todos os dados no banco de dados existente. Quando você trabalha com o Visual Studio 2010, usar o VSDBCMD é a abordagem recomendada para publicação incremental de banco de dados. No entanto, a próxima versão do Visual Studio e do WPP (Web Publishing Pipeline) incluirá ferramentas que dão suporte à publicação incremental diretamente.

Se você abrir a solução de exemplo do Contact Manager no Visual Studio 2010, verá que o projeto de banco de dados inclui uma pasta Propriedades que contém quatro arquivos.

Se você abrir a solução de exemplo do Contact Manager no Visual Studio 2010, verá que o projeto de banco de dados inclui uma pasta Propriedades que contém quatro arquivos.

Juntamente com o arquivo de projeto (ContactManager.Database.dbproj neste caso), esses arquivos controlam vários aspectos do processo de build e implantação:

  • O arquivo Database.sqlcmdvars fornece valores para todas as variáveis SQLCMD que você usa ao implantar o projeto. Cada configuração de solução (por exemplo, depuração e versão) pode especificar um arquivo .sqlcmdvars diferente.
  • O arquivo Database.sqldeployment fornece configurações específicas de implantação, como usar a ordenação definida em seu projeto ou a ordenação do servidor de destino, se deseja recriar o banco de dados de destino todas as vezes ou simplesmente alterar o banco de dados existente para atualize-o e assim por diante. Cada configuração de solução pode especificar um arquivo .sqldeployment diferente.
  • O arquivo Database.sqlpermissions é um documento XML que você pode usar para definir as permissões que você deseja adicionar ao banco de dados de destino. Todas as configurações de solução compartilham o mesmo arquivo .sqlpermissions.
  • O arquivo Database.sqlsettings especifica as propriedades no nível do banco de dados a serem usadas ao criar o banco de dados, como a ordenação a ser usada, o comportamento dos operadores de comparação e assim por diante. Todas as configurações de solução compartilham o mesmo arquivo .sqlsettings.

Vale a pena tirar um momento para abrir esses arquivos no Visual Studio e se familiarizar com o conteúdo.

Quando você cria um projeto de banco de dados, o processo de build cria dois arquivos:

  • Um esquema de banco de dados (arquivo.dbschema). Isso descreve o esquema do banco de dados que você deseja criar no formato XML.
  • Um manifesto de implantação (arquivo.deploymanifest). Isso contém todas as informações necessárias para criar e implantar seu banco de dados. Ele faz referência ao arquivo .dbschema junto com outros recursos, como as instruções de implantação (o arquivo .sqldeployment) e quaisquer scripts SQL de pré-implantação ou pós-implantação.

Isso mostra a relação entre esses recursos:

A relação entre os recursos acima

Como você pode ver, o arquivo .sqlsettings e o arquivo .sqlpermissions são entradas para o processo de build. Juntamente com o arquivo de projeto do banco de dados, esses arquivos são usados para criar o arquivo de esquema de banco de dados. O arquivo .sqldeployment e o arquivo .sqlcmdvars passam pelo processo de build inalterados. O manifesto de implantação indica o local do esquema de banco de dados, o arquivo .sqldeployment, o arquivo .sqlcmdvars e quaisquer scripts SQL de pré-implantação ou pós-implantação.

Por que usar o VSDBCMD para implantar um projeto de banco de dados?

Há várias abordagens diferentes para implantar projetos de banco de dados. No entanto, nem todos eles são adequados para implantar um projeto de banco de dados em servidores remotos em um ambiente corporativo. Considere o que você deseja de uma implantação de projeto de banco de dados. Em cenários de implantação corporativa, é provável que você queira:

  • A capacidade de implantar o projeto de banco de dados de um local remoto.
  • A capacidade de fazer atualizações incrementais em um banco de dados existente.
  • A capacidade de incluir scripts de pré-implantação ou scripts pós-implantação.
  • A capacidade de personalizar a implantação para vários ambientes de destino.
  • A capacidade de implantar o projeto de banco de dados como parte de uma implantação de solução de etapa única maior, normalmente com script.

Há três abordagens main que você pode usar para implantar um projeto de banco de dados:

  • Você pode usar a funcionalidade de implantação com o tipo de projeto de banco de dados no Visual Studio 2010. Quando você cria e implanta um projeto de banco de dados no Visual Studio 2010, o processo de implantação usa o manifesto de implantação para gerar um arquivo de implantação baseado em SQL específico para a configuração de build. Isso criará o banco de dados se ele ainda não existir ou fizer as alterações necessárias no banco de dados se ele já existir. Você pode usar SQLCMD.exe para executar esse arquivo no servidor de destino ou definir o Visual Studio para criar e executar o arquivo. A desvantagem dessa abordagem é que você tem apenas controle limitado sobre as configurações de implantação. Muitas vezes, você também precisa modificar o arquivo de implantação do SQL para fornecer valores de variáveis específicos do ambiente. Você só pode usar essa abordagem de um computador com o Visual Studio 2010 instalado e o desenvolvedor precisaria saber e fornecer cadeias de conexão e credenciais para todos os ambientes de destino.
  • Você pode usar a Ferramenta de Implantação da Web (Implantação da Web) dos Serviços de Informações da Internet (IIS) para implantar um banco de dados como parte de um projeto de aplicativo Web. No entanto, essa abordagem é muito mais complexa se você quiser implantar um projeto de banco de dados em vez de simplesmente replicar um banco de dados local existente em um servidor de destino. Você pode configurar a Implantação da Web para executar o script de implantação do SQL gerado pelo projeto de banco de dados, mas para fazer isso, você precisa criar um arquivo de destinos WPP personalizado para seu projeto de aplicativo Web. Isso adiciona uma quantidade substancial de complexidade ao processo de implantação. Além disso, a Implantação da Web não dá suporte diretamente a atualizações incrementais para bancos de dados existentes. Para obter mais informações sobre essa abordagem, consulte Estendendo o pipeline de publicação da Web para empacotar o projeto de banco de dados implantado arquivo SQL.
  • Você pode usar o utilitário VSDBCMD para implantar o banco de dados usando o esquema de banco de dados ou o manifesto de implantação. Você pode chamar VSDBCMD.exe de um destino do MSBuild, que permite publicar bancos de dados como parte de um processo de implantação com script maior. Você pode substituir as variáveis no arquivo .sqlcmdvars e muitas outras propriedades de banco de dados de um comando VSDBCMD, o que permite personalizar sua implantação para ambientes diferentes sem criar várias configurações de build. O VSDBCMD fornece funcionalidade de diferenciação, o que significa que ele fará apenas as alterações necessárias para alinhar um banco de dados de destino ao esquema de banco de dados. O VSDBCMD também oferece uma ampla variedade de opções de linha de comando, que oferecem controle refinado sobre o processo de implantação.

Nessa visão geral, você pode ver que o uso do VSDBCMD com o MSBuild é a abordagem mais adequada para um cenário de implantação empresarial típico:

Suporta Visual Studio 2010 Web Deploy 2.0 VSDBCMD.exe
Dá suporte à implantação remota? Sim Sim Sim
Dá suporte a atualizações incrementais? Sim Não Sim
Dá suporte a scripts pré/pós-implantação? Sim Sim Sim
Dá suporte à implantação de vários ambientes? Limitado Limitado Sim
Dá suporte à implantação com script? Limitado Sim Yes

O restante deste tópico descreve o uso do VSDBCMD com o MSBuild para implantar projetos de banco de dados.

Noções básicas sobre o processo de implantação

O utilitário VSDBCMD permite implantar um banco de dados usando o esquema de banco de dados (o arquivo .dbschema) ou o manifesto de implantação (o arquivo .deploymanifest). Na prática, você quase sempre usará o manifesto de implantação, pois o manifesto de implantação permite fornecer valores padrão para várias propriedades de implantação e identificar quaisquer scripts SQL de pré-implantação ou pós-implantação que você deseja executar. Por exemplo, esse comando VSDBCMD é usado para implantar o banco de dados ContactManager em um servidor de banco de dados em um ambiente de teste:

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

Nesse caso:

  • A opção /a (ou /Action) especifica o que você deseja que o VSDBCMD faça. Você pode definir isso como Importar ou Implantar. A opção Importar é usada para gerar um arquivo .dbschema de um banco de dados existente e a opção Implantar é usada para implantar um arquivo .dbschema em um banco de dados de destino.
  • A opção /manifest (ou /ManifestFile) identifica o arquivo .deploymanifest que você deseja implantar. Se você quisesse usar o arquivo .dbschema, usaria a opção /model (ou /ModelFile).
  • A opção /cs (ou /ConnectionString) fornece a cadeia de conexão para o servidor de banco de dados de destino. Observe que isso não inclui o nome do banco de dados – o VSDBCMD precisa se conectar ao servidor para criar o banco de dados; ele não precisa se conectar a um banco de dados individual. Se o arquivo .deploymanifest incluir uma cadeia de conexão, você poderá omitir essa opção. Se você usar a opção de qualquer maneira, o valor da opção substituirá o valor .deploymanifest.
  • A propriedade /p:TargetDatabase fornece o nome que você deseja atribuir ao banco de dados de destino na criação. Isso substitui o valor da propriedade TargetDatabase no arquivo .deploymanifest. Você pode usar a sintaxe /p:[property name]para definir uma ampla variedade de propriedades de implantação e substituir quaisquer variáveis SQLCMD declaradas em seu arquivo .sqlcmdvars.
  • A opção /dd+ (ou /DeployToDatabase+) indica que você deseja criar uma implantação e implantá-la no ambiente de destino. Se você especificar /dd-ou omitir a opção, o VSDBCMD gerará um script de implantação, mas não o implantará no ambiente de destino. Essa opção geralmente é a fonte de confusão e é explicada mais detalhadamente na próxima seção.
  • A opção /script (ou /DeploymentScriptFile) especifica onde você deseja gerar o script de implantação. Esse valor não afeta o processo de implantação.

Para obter mais informações sobre VSDBCMD, consulte Referência de linha de comando para VSDBCMD.EXE (implantação e importação de esquema) e Como preparar um banco de dados para implantação de um prompt de comando usando VSDBCMD.EXE.

Para obter um exemplo de como você pode usar o VSDBCMD de um arquivo de projeto do MSBuild, consulte Noções básicas sobre o processo de build. Para obter exemplos de como definir configurações de implantação de banco de dados para vários ambientes, consulte Personalizando implantações de banco de dados para vários ambientes.

Noções básicas sobre a opção DeployToDatabase

O comportamento do comutador /dd ou /DeployToDatabase depende se você está usando o VSDBCMD com um arquivo .dbschema ou um arquivo .deploymanifest. Se você estiver usando um arquivo .dbschema, o comportamento será bastante simples:

  • Se você especificar /dd+ ou /dd, o VSDBCMD gerará um script de implantação e implantará o banco de dados.
  • Se você especificar /dd- ou omitir a opção, o VSDBCMD gerará apenas um script de implantação.

Se você estiver usando um arquivo .deploymanifest, o comportamento será muito mais complicado. Isso ocorre porque o arquivo .deploymanifest contém um nome de propriedade DeployToDatabase que também determina se o banco de dados está implantado.

<DeployToDatabase>False</DeployToDatabase>

O valor dessa propriedade é definido de acordo com as propriedades do projeto de banco de dados. Se você definir a ação Implantar como Criar um script de implantação (.sql), o valor será False. Se você definir a ação Implantar como Criar um script de implantação (.sql) e implantar no banco de dados, o valor será True.

Observação

Essas configurações estão associadas a uma configuração de build e uma plataforma específicas. Por exemplo, se você definir as configurações para a configuração de Depuração e publicar usando a configuração de Versão , suas configurações não serão usadas.

Por exemplo, se você definir as configurações para a configuração de Depuração e publicar usando a configuração de Versão, suas configurações não serão usadas.

Observação

Nesse cenário, a ação Implantar sempre deve ser definida como Criar um script de implantação (.sql) porque você não deseja que o Visual Studio 2010 implante seu banco de dados. Em outras palavras, a propriedade DeployToDatabase sempre deve ser False.

Quando uma propriedade DeployToDatabase é especificada, a opção /dd só substituirá a propriedade se o valor da propriedade for false:

  • Se a propriedade DeployToDatabase for False e você especificar /dd+ ou /dd, o VSDBCMD substituirá a propriedade DeployToDatabase e implantará o banco de dados.
  • Se a propriedade DeployToDatabase for False e você especificar /dd- ou omitir a opção, o VSDBCMD não implantará o banco de dados.
  • Se a propriedade DeployToDatabase for True, o VSDBCMD ignorará a opção e implantará o banco de dados.
  • Um script de implantação é gerado em cada caso, independentemente de você estar implantando o banco de dados também.

Conclusão

Este tópico forneceu uma visão geral do processo de build e implantação para projetos de banco de dados no Visual Studio 2010. Ele também descreveu como você pode usar VSDBCMD.exe com o MSBuild para dar suporte à implantação de banco de dados de escala empresarial.

Para obter mais informações sobre como isso funciona na prática, consulte Personalizando implantações de banco de dados para vários ambientes.

Leitura Adicional

Para obter informações sobre como personalizar implantações de banco de dados criando um arquivo de configuração de implantação separado para cada ambiente, consulte Personalizando implantações de banco de dados para vários ambientes. Para obter diretrizes sobre como configurar associações de função de banco de dados executando um script pós-implantação, consulte Implantando associações de função de banco de dados em ambientes de teste. Para obter diretrizes sobre como gerenciar alguns dos desafios exclusivos que os bancos de dados de associação impõem, consulte Implantando bancos de dados de associação em ambientes empresariais.

Estes tópicos sobre o MSDN fornecem diretrizes mais amplas e informações em segundo plano sobre projetos de banco de dados do Visual Studio e o processo de implantação de banco de dados: