Partilhar via


Comparar um banco de dados e um projeto

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Compreender 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 esquema para visualizar as diferenças entre bancos de dados e/ou projetos. Essa comparação pode ajudá-lo a identificar 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 schema compare ou SqlPackage para extrair alterações de um banco de dados para um conjunto de arquivos de projeto SQL.
  • Você pode usar o script de implantação SqlPackage ou a comparação de esquema para revisar as instruções T-SQL que são executadas para atualizar um banco de dados para corresponder ao projeto.

Comparação de esquemas: visualizar diferenças

Prerequisites

A comparação de esquema gráfico ainda não está disponível na visualização 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 esquema requer uma ferramenta gráfica, como o Visual Studio, ou a extensão MSSQL para Visual Studio Code.

Summary

A comparação de esquema fornece a interface visualmente mais rica para entender as diferenças entre um banco de dados e um projeto. Um recurso chave com a comparação de esquema é que a direcionalidade da comparação é reversível. Como resultado, você pode usar a comparação de esquema 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 para adicionar 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 esquema 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 SqlPackage.

dotnet tool install -g Microsoft.SqlPackage

Summary

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 SqlPackage gera um relatório de implantação comparando um modelo de origem (.dacpac projeto SQL, artefato de compilação 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 nomeado MyDatabase a partir 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 seguinte lista de operações não é exaustiva:

  • 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 movimento de dados ou criação/queda de índice clusterizado. Esses eventos seriam listados no relatório de implantação sob o Alerts elemento .

Uma vantagem da operação de implantação de XML de relatório é 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 para disparar alertas com base nas operações ou nomes de objetos listados.

Importar alterações de um banco de dados

Conforme mencionado na seção de comparação de esquema, a comparação de esquema 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 que é desenvolvido ativamente diretamente e um projeto SQL é usado para gerenciar os objetos de banco de dados no controle do código-fonte. Concluir manualmente essa operação por meio do Visual Studio ou do Azure Data Studio pode ser demorado, especialmente quando o banco de dados tem muitos objetos ou alterações esporádicas. Nesta seção, analisamos como automatizar a extração de definições de objeto de um banco de dados em um conjunto de arquivos de projeto SQL.

Prerequisites

Com foco na automação, utilizamos a CLI SqlPackage para extrair definições de objeto de um banco de dados em 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

Summary

O comando SqlPackage extract usa um banco de dados de origem e gera um modelo de banco de dados de saída, como um .dacpac arquivo ou como um conjunto de scripts SQL. Por padrão, o SqlPackage gera um .dacpac ficheiro, 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ídas mostrariam diferenças nas ferramentas de controle do código-fonte. Usando SqlPackage para gerar os arquivos e verificar 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

Como mencionado na seção de comparação de esquema, a comparação de esquema 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, analisamos 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.

Prerequisites

dotnet tool install -g Microsoft.SqlPackage

Summary

Executar uma implementação de projeto SQL com SqlPackage usa a ação publish, mas se quisermos analisar os scripts T-SQL, podemos usar a ação script. O comando a seguir gera os scripts T-SQL necessários para atualizar um banco de dados nomeado 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