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 VSDBCMD é a abordagem recomendada para a publicação incremental de banco de dados. No entanto, a próxima versão do Visual Studio e do WPP (Pipeline de Publicação na Web) 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.
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 usadas 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 deve recriar o banco de dados de destino todas as vezes ou simplesmente alterar o banco de dados existente para atualizá-lo 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 deseja adicionar ao banco de dados de destino. Todas as configurações da 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 da solução compartilham o mesmo arquivo .sqlsettings.
Vale a pena reservar 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). Ele 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:
Como você pode ver, o arquivo .sqlsettings e o arquivo .sqlpermissions são entradas para o processo de compilação. Juntamente com o arquivo de projeto de 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 inalterado. O manifesto de implantação indica o local do esquema de banco de dados, o arquivo .sqldeployment, o arquivo .sqlcmdvars e todos os scripts SQL de pré-implantação ou pós-implantação.
Por que usar o VSDBCMD para implantar um projeto de banco de dados?
Existem 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 de pós-implantação.
- A capacidade de adaptar a implantação a vários ambientes de destino.
- A capacidade de implantar o projeto de banco de dados como parte de uma implantação de solução maior, normalmente com script e de etapa única.
Há três abordagens principais 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 compilação. Isso criará o banco de dados, se ele ainda não existir, ou fará 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 pode 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 pode precisar modificar o arquivo de implantação SQL para fornecer valores de variáveis específicos do ambiente. Você só pode usar essa abordagem em um computador com o Visual Studio 2010 instalado, e o desenvolvedor precisaria conhecer e fornecer cadeias de conexão e credenciais para todos os ambientes de destino.
- Você pode usar a Ferramenta de Implantação da Web dos Serviços de Informações da Internet (IIS) (Implantação da Web) 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 na Web para empacotar o arquivo SQL implantado no projeto de banco de dados.
- 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 maior com script. Você pode substituir as variáveis em seu arquivo .sqlcmdvars e muitas outras propriedades de banco de dados de um comando VSDBCMD, que permite personalizar sua implantação para diferentes ambientes 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 fornecem controle refinado sobre o processo de implantação.
Nessa visão geral, você pode ver que usar VSDBCMD com MSBuild é a abordagem mais adequada para um cenário típico de implantação corporativa:
Suporta | Visual Studio 2010 | Web Deploy 2.0 | VSDBCMD.exe |
---|---|---|---|
Suporta implantação remota? | Sim | Sim | Sim |
Suporta atualizações incrementais? | Sim | Não | Sim |
Suporta scripts pré/pós-implantação? | Sim | Sim | Sim |
Suporta implantação em vários ambientes? | Limitado | Limitado | Sim |
Suporta implantação com script? | Limitado | Sim | Sim |
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, este 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: [nome da propriedade] 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 com mais detalhes 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 as 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 da opção /dd ou /DeployToDatabase depende se você está usando 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 é 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 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.
Observação
Nesse cenário, a ação Implantar deve sempre ser definida como Criar um script de implantação (.sql), pois você não deseja que o Visual Studio 2010 implante seu banco de dados. Em outras palavras, a propriedade DeployToDatabase deve ser sempre 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ê também estar implantando o banco de dados.
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 o VSDBCMD.exe com o MSBuild para dar suporte à implantação de banco de dados em 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 orientação 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 corporativos.
Estes tópicos no MSDN fornecem diretrizes mais amplas e informações básicas sobre projetos de banco de dados do Visual Studio e o processo de implantação do banco de dados: