Partilhar via


Comparar um banco de dados e um projeto

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Entender as diferenças de definição de objeto entre um banco de dados e um projeto SQL pode fornecer informações valiosas sobre o estado do banco de dados e do projeto, inclusive durante o desenvolvimento contínuo ou a solução de problemas de regressão. Os projetos SQL incluem ferramentas para visualizar diferenças, analisar as alterações necessárias para atualizar um banco de dados, importar alterações de um banco de dados para um conjunto de arquivos de projeto SQL e revisar scripts T-SQL que seriam executados para atualizar um banco de dados para corresponder ao projeto.

Este artigo analisa métodos para comparar um banco de dados e um projeto SQL usando diferentes abordagens:

  • Você pode usar a comparação de esquemas para visualizar as diferenças entre bancos de dados e/ou projetos. Essa comparação pode ajudá-lo a identificar as alterações que precisam ser sincronizadas entre o banco de dados e o projeto.
  • Você pode usar um relatório de implantação para resumir e automatizar revisões das alterações necessárias para atualizar um banco de dados.
  • Você pode usar a comparação de esquemas ou a extração do SqlPackage para importar alterações de um banco de dados para um conjunto de arquivos de projeto SQL.
  • Você pode usar o script de implantação do SqlPackage ou a comparação de esquema para revisar as instruções T-SQL executadas para atualizar um banco de dados para corresponder ao projeto.

Comparação de esquema: visualizar diferenças

Pré-requisitos

A comparação de esquema gráfico ainda não está disponível na versão prévia de projetos SQL no estilo SDK no Visual Studio. Use o Azure Data Studio ou o Visual Studio para comparar esquemas.

A comparação de esquemas requer uma ferramenta gráfica, como o Visual Studio ou o Azure Data Studio.

Resumo

A comparação de esquemas fornece a interface visualmente mais rica para a compreensão das diferenças entre um banco de dados e um projeto. Um recurso importante da comparação de esquema é que a direcionalidade da comparação é reversível. Como resultado, você pode usar a comparação de esquemas para entender as alterações de um projeto a ser implantado em um banco de dados ou as alterações de um banco de dados a serem adicionadas a um projeto. Você pode usar a comparação de esquema para identificar diferenças nas definições de objeto, como tabelas, exibições, procedimentos armazenados e funções.

O conjunto completo de diferenças ou um subconjunto selecionado pode ser usado para aplicar as alterações ao banco de dados ou projeto. A comparação de esquemas também pode gerar um script de implantação que, quando executado, aplica efetivamente as alterações a um banco de dados.

Saiba mais sobre a comparação de esquemas na visão geral da comparação de esquemas.

Relatório de implantação: revisar as alterações

Os relatórios de implantação exigem a CLI do SqlPackage.

dotnet tool install -g Microsoft.SqlPackage

Resumo

Um relatório de implantação fornece um resumo das alterações necessárias para atualizar um banco de dados para corresponder a um projeto. A CLI do SqlPackage gera um relatório de implantação comparando um modelo de origem (artefato de compilação de projeto SQL .dacpac ou banco de dados) com um banco de dados de destino. Por exemplo, o comando a seguir gera um relatório de implantação para um banco de dados chamado MyDatabase de um projeto SQL chamado MyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:deployreport /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /OutputPath:deployreport.xml

O XML produzido é uma forma simplificada do plano de implantação, resumindo as operações que seriam executadas se uma implantação de banco de dados fosse executada. A lista de operações a seguir não é completa:

  • Create
  • Alter
  • Drop
  • Refresh
  • UnbindSchemaBinding
  • UnbindFulltextIndex
  • TableDataMotion
  • SPRename
  • EnableChangeTrackingDatabase
  • DisableChangeTrackingDatabase

Um relatório de implantação pode ser revisado em um editor de texto ou no Visual Studio e seria semelhante ao seguinte:

<?xml version="1.0" encoding="utf-8"?>
<DeploymentReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DeployReport/2012/02">
    <Alerts />
    <Operations>
        <Operation Name="Create">
            <Item Value="[CO].[Products].[IX_Products_CategorySlug]" Type="SqlIndex" />
        </Operation>
        <Operation Name="Alter">
            <Item Value="[CO].[Brands]" Type="SqlTable" />
            <Item Value="[CO].[AddProductImage]" Type="SqlProcedure" />
        </Operation>
        <Operation Name="Refresh">
            <Item Value="[CO].[SelectStarView]" Type="SqlView" />
        </Operation>
    </Operations>
</DeploymentReport>

Um relatório de implantação pode ser usado para revisar as alterações, bem como monitorar eventos de impacto potencialmente alto, como movimentação de dados ou criação/descarte de índice clusterizado. Esses eventos seriam listados no relatório de implantação sob o elemento Alerts.

Uma vantagem da operação XML do relatório de implantação é que ela pode ser usada para automatizar a revisão das alterações necessárias para atualizar um banco de dados. O XML pode ser analisado e usado para gerar um relatório ou disparar alertas com base nas operações ou nos nomes de objetos listados.

Importar alterações de um banco de dados

Conforme mencionado na seção de comparação de esquemas, a comparação de esquemas pode ser usada para aplicar alterações de um banco de dados em um conjunto de arquivos de projeto SQL. A aplicação de alterações a um projeto SQL é um cenário comum quando você tem um banco de dados desenvolvido ativamente diretamente e um projeto SQL é usado para gerenciar os objetos de banco de dados no controle do código-fonte. A conclusão manual dessa operação por meio do Visual Studio ou do Azure Data Studio pode ser demorada, especialmente quando o banco de dados tem muitos objetos ou alterações esporádicas. Nesta seção, revisamos como automatizar a extração de definições de objeto de um banco de dados em um conjunto de arquivos de projeto SQL.

Pré-requisitos

Com foco na automação, utilizamos a CLI do SqlPackage para extrair definições de objeto de um banco de dados para um conjunto de arquivos de projeto SQL. Os modelos .NET Microsoft.Build.Sql.Templates são usados para criar um arquivo de projeto SQL, uma etapa opcional.

# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates

Resumo

O comando de extração SqlPackage usa um banco de dados de origem e gera um modelo de banco de dados de saída, como um arquivo .dacpac ou como um conjunto de scripts SQL. O padrão SqlPackage é gerar um arquivo .dacpac, mas a propriedade /p:ExtractTarget= pode ser usada para especificar um conjunto de scripts SQL. O comando a seguir extrai o banco de dados MyDatabase em um arquivo de projeto SQL definido na pasta MyDatabaseProject:

sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType

Quando uma pasta está sob controle do código-fonte, as definições de objeto extraído mostram diferenças nas ferramentas de controle do código-fonte. Usando o SqlPackage para gerar os arquivos e verificar se há diferenças no controle do código-fonte, você pode automatizar o processo de importação de alterações de um banco de dados para um conjunto de arquivos de projeto SQL.

Em uma série de três comandos, podemos remover o conjunto anterior de arquivos, extrair o banco de dados e verificar se há diferenças nas ferramentas de controle do código-fonte:

rm -rf MyDatabaseProject
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
git status --porcelain | wc -l

Nossa saída é o número de arquivos que foram alterados pela extração mais recente do SqlPackage. A saída do comando git status pode ser usada para acionar outras etapas de automação. Se quisermos usar esse conjunto de arquivos como um projeto SQL, podemos usar os modelos .NET Microsoft.Build.Sql.Templates para criar um arquivo de projeto SQL na pasta MyDatabaseProject:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Revisar scripts T-SQL de implantação

Conforme mencionado na seção de comparação de esquemas, a comparação de esquemas pode ser usada para gerar os scripts T-SQL necessários para atualizar um banco de dados para corresponder a um projeto SQL. Nesta seção, examinamos como usar o SqlPackage para automatizar a geração dos scripts T-SQL necessários para atualizar um banco de dados para corresponder a um projeto SQL, de modo que eles possam ser armazenados como um artefato de pipeline para revisão e aprovação.

Pré-requisitos

dotnet tool install -g Microsoft.SqlPackage

Resumo

A execução de uma implantação de projeto SQL com SqlPackage usa a ação de publicação, mas se quisermos examinar os scripts T-SQL executados, podemos usar a ação de script. O comando a seguir gera os scripts T-SQL necessários para atualizar um banco de dados chamado MyDatabase para corresponder a um projeto SQL chamado MyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:Script /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /DeployScriptPath:Deployment.sql