Aracılığıyla paylaş


Veritabanı ve projeyi karşılaştırma

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Veritabanı ve SQL projesi arasındaki nesne tanımı farklarını anlamak, devam eden geliştirme veya regresyon sorunlarını giderme de dahil olmak üzere veritabanınızın ve projenizin durumu hakkında değerli içgörüler sağlayabilir. SQL projeleri arasında farkları görselleştirmeye, veritabanını güncelleştirmek için gereken değişiklikleri analiz etmeye, değişiklikleri veritabanından SQL proje dosya kümesine aktarmaya ve veritabanını projeyle eşleşecek şekilde güncelleştirmek için yürütülecek T-SQL betiklerini gözden geçirmeye yönelik araçlar bulunur.

Bu makalede, farklı yaklaşımlar kullanarak veritabanı ve SQL projesini karşılaştırma yöntemleri inceleniyor:

  • Veritabanları ve/veya projeler arasındaki farkları görselleştirmek için şema karşılaştırmasını kullanabilirsiniz. Bu karşılaştırma, veritabanı ve proje arasında eşitlenmesi gereken değişiklikleri belirlemenize yardımcı olabilir.
  • Veritabanını güncelleştirmek için gereken değişiklikleri özetlemek ve gözden geçirmeleri otomatikleştirmek için dağıtım raporu kullanabilirsiniz.
  • Veritabanındaki değişiklikleri SQL proje dosya kümesine aktarmak için şema karşılaştırmasını veya SqlPackage ayıklamasını kullanabilirsiniz.
  • SqlPackage dağıtım betiğini veya şema karşılaştırmasını kullanarak veritabanını projeyle eşleşecek şekilde güncelleştirmek üzere yürütülen T-SQL deyimlerini gözden geçirebilirsiniz .

Şema karşılaştırması: farkları görselleştirme

Prerequisites

Visual Studio'daki SDK tarzı SQL projeleri önizlemesinde grafiksel şema karşılaştırması henüz mevcut değil. Şemaları karşılaştırmak için Azure Data Studio veya Visual Studio kullanın.

Şema karşılaştırması için Visual Studio gibi bir grafik aracı veya Visual Studio Code için MSSQL uzantısı gerekir.

Summary

Şema karşılaştırması, veritabanı ve proje arasındaki farkları anlamak için görsel olarak en zengin arabirimi sağlar. Şema karşılaştırmasının önemli bir özelliği, karşılaştırmanın yön yönünün geri alınamaz olmasıdır. Sonuç olarak, bir projeden veritabanına dağıtılacak değişiklikleri veya bir veritabanından projeye eklenecek değişiklikleri anlamak için şema karşılaştırmasını kullanabilirsiniz. Tablolar, görünümler, saklı yordamlar ve işlevler gibi nesne tanımlarındaki farkları belirlemek için şema karşılaştırmasını kullanabilirsiniz.

Değişiklikleri veritabanına veya projeye uygulamak için tüm fark kümesi veya seçili bir alt küme kullanılabilir. Şema karşılaştırması, çalıştırıldığında değişiklikleri veritabanına etkili bir şekilde uygulayan bir dağıtım betiği de oluşturabilir.

Şema karşılaştırması hakkında daha fazla bilgi için bkz. Şema karşılaştırmaya genel bakış.

Raporu dağıtma: değişiklikleri gözden geçirme

Raporları dağıtma için SqlPackage CLI gerekir.

dotnet tool install -g Microsoft.SqlPackage

Summary

Dağıtım raporu, veritabanını projeyle eşleşecek şekilde güncelleştirmek için gereken değişikliklerin özetini sağlar. SqlPackage CLI, bir kaynak modeli (SQL projesi derleme yapıtı veya veritabanı) hedef veritabanıyla karşılaştırarak bir .dacpac. Örneğin, aşağıdaki komut adlı MyDatabasebir SQL projesinden adlı MyProject veritabanı için bir dağıtım raporu oluşturur:

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

Üretilen XML, bir veritabanı dağıtımı çalıştırılırsa gerçekleştirilecek işlemleri özetleyen, dağıtım planının basitleştirilmiş bir biçimidir. Aşağıdaki işlem listesi kapsamlı değildir:

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

Dağıtım raporu bir metin düzenleyicisinde veya Visual Studio'da gözden geçirilebilir ve aşağıdakine benzer olacaktır:

<?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>

Dağıtım raporu, değişiklikleri gözden geçirmek ve veri hareketi veya kümelenmiş dizin oluşturma/bırakma gibi olası yüksek etki olaylarını izlemek için kullanılabilir. Bu olaylar dağıtım raporunda öğesinin Alerts altında listelenir.

Rapor XML'sini dağıtma işleminin avantajlarından biri, veritabanını güncelleştirmek için gereken değişikliklerin gözden geçirilmesini otomatikleştirmek için kullanılabilmesidir. XML ayrıştırılabilir ve rapor oluşturmak veya listelenen işlemlere veya nesne adlarına göre uyarıları tetikleme amacıyla kullanılabilir.

Veritabanından değişiklikleri içeri aktarma

Şema karşılaştırma bölümünde belirtildiği gibi, şema karşılaştırması veritabanındaki değişiklikleri SQL proje dosya kümesine uygulamak için kullanılabilir. Bir SQL projesine değişiklikleri uygulamak, doğrudan içinde etkin olarak geliştirilmiş bir veritabanınız olduğunda ve kaynak denetimindeki veritabanı nesnelerini yönetmek için bir SQL projesi kullanıldığında yaygın bir senaryodur. Bu işlemi Visual Studio veya Azure Data Studio aracılığıyla el ile tamamlamak, özellikle veritabanında çok sayıda nesne veya düzensiz değişiklik olduğunda zaman alabilir. Bu bölümde, bir veritabanından SQL proje dosya kümesine nesne tanımlarının ayıklanması işleminin nasıl otomatikleştirebileceğimizi gözden geçireceğiz.

Prerequisites

Otomasyona odaklanarak sqlpackage CLI'yi kullanarak veritabanından SQL proje dosya kümesine nesne tanımlarını ayıklarız. Microsoft.Build.Sql.Templates .NET şablonları, isteğe bağlı bir adım olan SQL proje dosyası oluşturmak için kullanılır.

  • .NET 8 SDK
  • SqlPackage CLI
  • Microsoft.Build.Sql.Templates .NET şablonlarını
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

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

Summary

SqlPackage ayıklama komutu bir kaynak veritabanı alır ve dosya olarak veya SQL betikleri kümesi olarak .dacpac bir çıkış veritabanı modeli oluşturur. SqlPackage varsayılan olarak bir .dacpac dosya oluşturmak için kullanılır, ancak /p:ExtractTarget= özelliği bir SQL betikleri kümesi belirtmek için kullanılabilir. Aşağıdaki komut, veritabanını MyDatabase klasöründeki MyDatabaseProjectbir SQL proje dosyası kümesine ayıklar:

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

Bir klasör kaynak denetimi altında olduğunda, ayıklanan nesne tanımları kaynak denetim araçlarındaki farkları gösterir. SqlPackage kullanarak dosyaları oluşturabilir ve kaynak denetimindeki farkları denetleyerek, değişiklikleri veritabanından SQL proje dosya kümesine aktarma işlemini otomatikleştirebilirsiniz.

Üç komut serisinde, önceki dosya kümesini kaldırabilir, veritabanını ayıklayabilir ve kaynak denetimi araçlarındaki farkları denetleyebiliriz:

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

Çıktımız, en son SqlPackage ayıklaması tarafından değiştirilen dosyaların sayısıdır. Komutun git status çıkışı diğer otomasyon adımlarını tetikleme amacıyla kullanılabilir. Bu dosya kümesini bir SQL projesi olarak kullanmak istiyorsak, klasöründe MyDatabaseProjectbir SQL proje dosyası oluşturmak için Microsoft.Build.Sql.Templates .NET şablonlarını kullanabiliriz:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Dağıtım T-SQL betiklerini gözden geçirme

Şema karşılaştırma bölümünde belirtildiği gibi, bir veritabanını sql projesiyle eşleşecek şekilde güncelleştirmek için gereken T-SQL betiklerini oluşturmak için şema karşılaştırması kullanılabilir. Bu bölümde, SqlPackage'ın bir veritabanını bir SQL projesiyle eşleşecek şekilde güncelleştirmek için gerekli olan T-SQL betiklerinin oluşturulmasını otomatikleştirmeyi ve gözden geçirme ve onay için işlem hattı yapıtı olarak depolanmalarını sağlamayı gözden geçireceğiz.

Prerequisites

dotnet tool install -g Microsoft.SqlPackage

Summary

SqlPackage ile SQL projesi dağıtımı çalıştırmak yayımlama eylemini kullanır, ancak yürütülen T-SQL betiklerini gözden geçirmek istiyorsak betik eylemini kullanabiliriz. Aşağıdaki komut, adlı veritabanını adlı MyDatabase sql projesiyle MyProjecteşleşecek şekilde güncelleştirmek için gereken T-SQL betiklerini oluşturur:

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