Megosztás a következőn keresztül:


Adatbázis és projekt összehasonlítása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Az adatbázis és az SQL-projekt objektumdefiníciós különbségeinek megértése értékes betekintést nyújthat az adatbázis és a projekt állapotába, beleértve a folyamatban lévő fejlesztés vagy regressziós hibaelhárítás során is. Az SQL-projektek magukban foglalják a különbségek vizualizációjának eszközét, az adatbázis frissítéséhez szükséges módosítások elemzését, az adatbázis módosításainak SQL-projektfájlkészletbe való importálását, valamint a projektnek megfelelő adatbázis frissítéséhez végrehajtandó T-SQL-szkriptek áttekintését.

Ez a cikk egy adatbázis és egy SQL-projekt különböző megközelítések használatával történő összehasonlításának módszereit ismerteti:

Séma összehasonlítása: különbségek megjelenítése

Prerequisites

A grafikus séma összehasonlítása még nem érhető el az SDK-stílusú SQL-projektek előzetes verziójában a Visual Studióban. A sémák összehasonlítása az Azure Data Studióval vagy a Visual Studióval.

A séma-összehasonlításhoz grafikus eszközre, például Visual Studióra vagy a Visual Studio Code MSSQL-bővítményére van szükség.

Summary

A séma-összehasonlítás vizuálisan leggazdagabb felületet biztosít az adatbázis és a projekt közötti különbségek megértéséhez. A séma-összehasonlítás egyik fő képessége, hogy az összehasonlítás iránya megfordítható. Ennek eredményeképpen séma-összehasonlítással megismerheti az adatbázisba üzembe helyezendő projekt módosításait, illetve az adatbázis módosításait, hogy hozzáadjanak egy projektet. Séma-összehasonlítással azonosíthatja az objektumdefiníciók, például táblák, nézetek, tárolt eljárások és függvények közötti különbségeket.

A teljes különbségkészlet vagy egy kijelölt részhalmaz használható a módosítások adatbázisra vagy projektre való alkalmazásához. A séma-összehasonlítás olyan üzembehelyezési szkriptet is létrehozhat, amely futtatáskor hatékonyan alkalmazza a módosításokat egy adatbázisra.

További információ a séma-összehasonlításról a séma-összehasonlítás áttekintésében.

Jelentés üzembe helyezése: módosítások áttekintése

A jelentések üzembe helyezéséhez az SqlPackage parancssori felületre van szükség.

dotnet tool install -g Microsoft.SqlPackage

Summary

Az üzembe helyezési jelentés összefoglalja az adatbázis projektnek megfelelő frissítéséhez szükséges módosításokat. Az SqlPackage CLI üzembe helyezési jelentést hoz létre egy forrásmodell (.dacpac SQL-projekt buildelési összetevőjének vagy adatbázisának) a céladatbázissal való összehasonlításával. Például a következő parancs létrehoz egy üzembe helyezési jelentést egy MyDatabase nevű adatbázishoz egy MyProject nevű SQL-projektből.

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

A létrehozott XML az üzembe helyezési terv egyszerűsített formája, amely összegzi azokat a műveleteket, amelyeket az adatbázis-telepítés futtatásakor hajtanak végre. A műveletek alábbi listája nem teljes:

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

Az üzembe helyezési jelentések áttekinthetők egy szövegszerkesztőben vagy a Visual Studióban, és az alábbihoz hasonlóan néznek ki:

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

Az üzembe helyezési jelentésekkel áttekintheti a módosításokat, valamint figyelheti a potenciálisan nagy hatású eseményeket, például az adatmozdulást vagy a fürtözött indexek létrehozását/elvetést. Ezek az események az elem alatti Alerts üzembehelyezési jelentésben lesznek felsorolva.

A jelentés XML-műveletének egyik előnye, hogy automatizálható az adatbázis frissítéséhez szükséges módosítások felülvizsgálata. Az XML elemezhető és használható jelentés létrehozásához vagy riasztások aktiválásához a felsorolt műveletek vagy objektumnevek alapján.

Módosítások importálása adatbázisból

Ahogy a séma-összehasonlítás szakaszban is említettük, a séma összehasonlítása használható az adatbázis módosításainak SQL-projektfájl-készletbe való alkalmazásához. Az SQL-projektek módosításainak alkalmazása gyakori forgatókönyv, ha egy közvetlenül aktívan fejlesztett adatbázissal rendelkezik, és egy SQL-projekt használatával kezeli az adatbázis-objektumokat a forrásvezérlőben. A művelet Visual Studióval vagy Azure Data Studióval történő manuális végrehajtása időigényes lehet, különösen akkor, ha az adatbázis sok objektumot vagy szórványos módosítást végez. Ebben a szakaszban áttekintjük, hogyan automatizálható az objektumdefiníciók kinyerése egy adatbázisból egy SQL-projektfájlkészletbe.

Prerequisites

Az automatizálásra összpontosítva az SqlPackage CLI használatával kinyerjük az objektumdefiníciókat egy adatbázisból egy SQL-projektfájl-készletbe. A Microsoft.Build.Sql.Templates .NET-sablonok egy SQL-projektfájl létrehozására szolgálnak, amely nem kötelező lépés.

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

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

Summary

Az SqlPackage kivonat parancs egy forrásadatbázist használ, és létrehoz egy kimeneti adatbázismodellt .dacpac fájlként vagy SQL-szkriptek halmazaként. Az SqlPackage alapértelmezés szerint létrehoz egy .dacpac fájlt, de a /p:ExtractTarget= tulajdonság használható SQL-szkriptek halmazának megadására. Az alábbi parancs kinyeri az adatbázist MyDatabase egy SQL-projektfájlba a mappában MyDatabaseProject:

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

Ha egy mappa forrásvezérlés alatt áll, a kinyert objektumdefiníciók különbségeket mutatnak a forrásvezérlő eszközkészletben. Ha az SqlPackage használatával hozza létre a fájlokat, és ellenőrzi a forrásvezérlés eltéréseit, automatizálhatja az adatbázis módosításainak SQL-projektfájlkészletbe való importálását.

Három parancsból álló sorozatban eltávolíthatjuk az előző fájlkészletet, kinyerhetjük az adatbázist, és ellenőrizhetjük a forrásvezérlő eszköz különbségeit:

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

A kimenet a legújabb SqlPackage-kivonat által módosított fájlok száma. A parancs kimenete git status más automatizálási lépések indítására is használható. Ha ezt a fájlkészletet SQL-projektként szeretnénk használni, a Microsoft.Build.Sql.Templates .NET-sablonokkal létrehozhatunk egy SQL-projektfájlt a mappában MyDatabaseProject:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Üzembehelyezési T-SQL-szkriptek áttekintése

Ahogy a séma-összehasonlítás szakaszban említettük, a séma összehasonlítása használható az adatbázisok SQL-projekttel való frissítéséhez szükséges T-SQL-szkriptek létrehozásához. Ebben a szakaszban áttekintjük, hogyan használható az SqlPackage a T-SQL szkriptek generálásának automatizálására, amelyek szükségesek egy adatbázis frissítéséhez úgy, hogy az megfeleljen egy SQL projektnek. Ezek a szkriptek folyamatként tárolhatók, hogy felülvizsgálatra és jóváhagyásra kerüljenek.

Prerequisites

dotnet tool install -g Microsoft.SqlPackage

Summary

Az SQL-projekt sqlpackage-beli üzembe helyezésének futtatása a közzétételi műveletet használja, de ha a végrehajtott T-SQL-szkripteket szeretnénk áttekinteni, használhatjuk a szkriptműveletet. A következő parancs létrehozza a szükséges T-SQL-szkripteket egy MyDatabase nevű adatbázis frissítéséhez, hogy az megfeleljen egy MyProject nevű SQL-projektnek.

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