Überprüfen eines DAC-Pakets

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Es wird empfohlen, den Inhalt eines DAC-Pakets vor der Bereitstellung in der Produktionsumgebung sowie die Upgradeaktionen vor dem Aktualisieren einer vorhandenen DAC zu überprüfen. Dies gilt insbesondere für die Bereitstellung von Paketen, die nicht im Unternehmen entwickelt wurden.

Methoden zum Aktualisieren eines DAC-Pakets umfassen:

Nicht vertrauenswürdige DAC-Pakete

Das Bereitstellen eines DAC-Pakets aus unbekannten oder nicht vertrauenswürdigen Quellen wird nicht empfohlen. Solche DACs könnten schädlichen Code enthalten, der unbeabsichtigten Transact-SQL-Code ausführen oder Fehler verursachen kann, indem das Schema geändert wird. Bevor Sie einen DAC aus einer unbekannten oder nicht vertrauenswürdigen Quelle verwenden, stellen Sie ihn in einer isolierten Testinstanz des Datenbankmoduls bereit, führen SIE DBCC CHECKDB (Transact-SQL) in der Datenbank aus, und überprüfen Sie den Code, z. B. gespeicherte Prozeduren oder anderen benutzerdefinierten Code, in der Datenbank.

Anzeigen des Inhalts einer DAC

Es gibt zwei Mechanismen zum Anzeigen des Inhalts eines DAC-Pakets (Data Tier Application):

  • Importieren des DAC-Pakets in ein SQL-Projekt in SQL Server Developer Tools
  • Veröffentlichen des DAC-Pakets in einer Testinstanz

Importieren eines DAC in SQL Server Developer Tools

  1. Öffnen Sie das Menü Datei, und klicken Sie auf Neu und dann auf Projekt....

  2. Wählen Sie die SQL Server -Projektvorlage aus, und geben Sie Name, Speicherortund Projektmappennameein.

  3. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie "Eigenschaften" aus.

  4. Aktivieren Sie auf der Registerkarte Projekteinstellungen im Abschnitt Ausgabetypen das Kontrollkästchen Datenebenenanwendung (DACPAC-Datei) , und schließen Sie dann das Dialogfeld mit den Eigenschaften.

  5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie " Datenebenenanwendung importieren" aus.

  6. Öffnen Sie mit dem Projektmappen-Explorer alle Dateien in der DAC, z. B. die Richtlinie zur Serverauswahl und die vor und nach der Bereitstellung auszuführenden Skripts.

  7. Überprüfen Sie alle Objekte im Schema mithilfe der Schemaansicht , insbesondere auch den Code in Objekten wie Funktionen oder gespeicherten Prozeduren.

Veröffentlichen des DAC-Pakets in einer Testinstanz

Es stehen mehrere Tools zum Veröffentlichen eines DAC-Pakets in einer Testinstanz zur Verfügung. Die SQL Server Dacpac-Erweiterung für Azure Data Studio enthält den Assistenten für Datenebenenanwendung. Wir werden durch die Veröffentlichung eines DAC-Pakets in einer Testinstanz geführt.

  1. Stellen Sie bei Bedarf eine Testinstanz mithilfe des Bereitstellungs-Assistenten bereit.

  2. Stellen Sie eine Verbindung mit Ihrer Testinstanz in Azure Data Studio her, und klicken Sie mit der rechten Maustaste auf den Serverknoten. Wählen Sie im Kontextmenü den Assistenten für Anwendungen auf Datenebene aus.

  3. Wählen Sie in Schritt 1 des Assistenten die Option "Deploy a data-tier application .dacpac file to an instance of SQL Server" aus.

  4. Ein Schritt 2 des Assistenten, geben Sie den Dateispeicherort ein, und wählen Sie "Neue Datenbank " für die Zieldatenbank aus. Geben Sie einen Datenbanknamen ein.

  5. Überprüfen Sie in Schritt 3 des Assistenten die Zusammenfassung, bevor Sie "Bereitstellen" auswählen.

  6. Überprüfen Sie nach Abschluss der Bereitstellung den Inhalt der Datenbank im Objekt-Explorer.

  7. OPTIONAL: Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Datenbank, und wählen Sie "Projekt aus Datenbank erstellen" aus, um ein SQL-Projekt aus der Datenbank zu generieren.

Datenbankänderungen anzeigen

Nach der Bereitstellung der aktuellen Version einer DAC in der Produktionsumgebung wurden möglicherweise Änderungen direkt an der zugeordneten Datenbank vorgenommen, die einen Konflikt mit dem in einer neuen Version der DAC definierten Schema verursachen. Überprüfen Sie vor dem Upgrade auf eine neue Version der DAC, ob solche Änderungen an der Datenbank vorgenommen wurden. Unter mehreren Szenarien können Sie den Unterschied zwischen einer Datenbank und einem DAC-Paket anzeigen. Beispielsweise wurden Änderungen möglicherweise direkt an der zugeordneten Datenbank vorgenommen, die mit dem in einer neuen Version des DAC definierten Schemas in Konflikt stehen könnten.

Alle Datenbanken

Anzeigen von Datenbankänderungen mithilfe des Schemaabgleichs

Anzeigen von Datenbankänderungen mithilfe von SqlPackage CLI

Die SQLPackage CLI kann mit der DeployReport-Aktion verwendet werden, um die Unterschiede zwischen einer DACPAC-Datei und einer Datenbank anhand der Aktionen anzuzeigen, die ausgeführt werden, wenn die dacpac in der Datenbank veröffentlicht wurde.

Datenbanken, die als Datenebenenanwendung registriert sind

Anzeigen von Datenbankänderungen mithilfe eines Assistenten

  1. Führen Sie den Assistenten zum Aktualisieren von Datenebenenanwendungen aus, und geben Sie die derzeit bereitgestellte DAC und das DAC-Paket mit der neuen Version der DAC an.

  2. Überprüfen Sie auf der Seite Änderung erkennen den Bericht der an der Datenbank vorgenommenen Änderungen.

  3. Wählen Sie Abbrechen , wenn Sie das Upgrade nicht fortsetzen möchten.

  4. Weitere Informationen zur Verwendung des Assistenten finden Sie unter Upgrade einer Datenebenenanwendung.

Anzeigen von Datenbankänderungen mithilfe von PowerShell

  1. Erstellen Sie ein SMO-Serverobjekt, und legen Sie es auf die Instanz fest, die die anzuzeigende DAC enthält.

  2. Öffnen Sie ein ServerConnection -Objekt, und stellen Sie eine Verbindung mit derselben Instanz her.

  3. Gibt den DAC-Namen in einer Variablen an.

  4. Rufen Sie mit der Methode GetDatabaseChanges() ein ChangeResults -Objekt ab, und übergeben Sie das Objekt an eine Textdatei, um einen einfachen Bericht der neuen, gelöschten und geänderten Objekte zu generieren.

Im folgenden Beispiel werden alle Datenbankänderungen gemeldet, die in einem bereitgestellten DAC mit dem Namen "MyApplication" vorgenommen wurden.

## Set a SMO Server object to the default instance on the local computer.  
CD SQLSERVER:\SQL\localhost\DEFAULT  
$srv = get-item .  
  
## Open a Common.ServerConnection to the same instance.  
$serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)  
$serverconnection.Connect()  
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)  
  
## Specify the DAC instance name.  
$dacName  = "MyApplication"  
  
## Generate the change list and save to file.  
$dacChanges = $dacstore.GetDatabaseChanges($dacName) | Out-File -Filepath C:\DACScripts\MyApplicationChanges.txt  

Anzeigen von Datenbankänderungen mithilfe von SqlPackage CLI

Die SQLPackage CLI kann mit der DriftReport-Aktion verwendet werden, um die Änderungen anzuzeigen, die seit der letzten Registrierung an einer Datenbank vorgenommen wurden.

Upgradeaktionen anzeigen

Alle Datenbanken

Anzeigen von Datenbankänderungen mithilfe der SQL-Projektveröffentlichung

  • Mithilfe der ERWEITERUNG SQL-Datenbankprojekte in Azure Data Studio können die Aktionen, die ausgeführt werden, wenn ein SQL-Projekt in einer Datenbank veröffentlicht wird, unter Windows, macOS und Linux angezeigt werden, indem während des Veröffentlichungsprozesses "Skript generieren" ausgewählt wird.

  • Mithilfe von SQL Server Data Tools in Visual Studio können die Aktionen, die ausgeführt werden, wenn ein SQL-Projekt in einer Datenbank veröffentlicht wird, unter Windows als Bereitstellungsskript angezeigt werden.

Zeigen Sie Upgradeaktionen mithilfe der SqlPackage CLI an. Die SqlPackage CLI kann mit der DeployReport-Aktion verwendet werden, um die Unterschiede zwischen einem dacpac und einer Datenbank über die Aktionen anzuzeigen, die ausgeführt werden würden, wenn die dacpac in der Datenbank veröffentlicht wurde.

Datenbanken, die als Datenebenenanwendung registriert sind

Bevor Sie eine neue Version eines DAC-Pakets zum Upgrade eines DAC-Pakets verwenden, das aus einem früheren DAC-Paket bereitgestellt wurde, können Sie einen Bericht generieren, der die Transact-SQL-Anweisungen enthält, die während des Upgrades ausgeführt werden, und dann die Anweisungen überprüfen.

Melden von Upgradeaktionen mithilfe eines Assistenten

  1. Führen Sie den Assistenten zum Aktualisieren von Datenebenenanwendungen aus, und geben Sie die derzeit bereitgestellte DAC und das DAC-Paket mit der neuen Version der DAC an.

  2. Überprüfen Sie auf der Seite Zusammenfassung den Bericht der Upgradeaktionen.

  3. Wählen Sie Abbrechen , wenn Sie das Upgrade nicht fortsetzen möchten.

  4. Weitere Informationen zur Verwendung des Assistenten finden Sie unter Upgrade einer Datenebenenanwendung.

Melden von Upgradeaktionen mithilfe von PowerShell

  1. Erstellen Sie ein SMO-Serverobjekt, und legen Sie es auf die Instanz fest, die die bereitgestellte DAC enthält.

  2. Öffnen Sie ein ServerConnection -Objekt, und stellen Sie eine Verbindung mit derselben Instanz her.

  3. Laden Sie die DAC-Paketdatei mithilfe von System.IO.File .

  4. Gibt den DAC-Namen in einer Variablen an.

  5. Rufen Sie mithilfe der Methode GetIncrementalUpgradeScript() eine Liste der Transact-SQL-Anweisungen ab, die bei einem Upgrade ausgeführt werden würden, und übergeben Sie die Liste an eine Textdatei.

  6. Schließen Sie den Dateidatenstrom, der zum Lesen der DAC-Paketdatei verwendet wurde.

Im folgenden Beispiel werden die Transact-SQL-Anweisungen gemeldet, die ausgeführt werden, um einen DAC mit dem Namen MyApplication auf das schema zu aktualisieren, das in einer MyApplication2017.dacpac-Datei definiert ist.

## Set a SMO Server object to the default instance on the local computer.  
CD SQLSERVER:\SQL\localhost\DEFAULT  
$srv = get-item .  
  
## Open a Common.ServerConnection to the same instance.  
$serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)  
$serverconnection.Connect()  
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)  
  
## Load the DAC package file.  
$dacpacPath = "C:\MyDACs\MyApplication2017.dacpac"  
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)  
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)  
  
## Specify the DAC instance name.  
$dacName  = "MyApplication"  
  
## Generate the upgrade script and save to file.  
$dacstore.GetIncrementalUpgradeScript($dacName, $dacType) | Out-File -Filepath C:\DACScripts\MyApplicationUpgrade.sql  
  
## Close the filestream to the new DAC package.  
$fileStream.Close()  

Vergleichen von DACs

Vor dem Aktualisieren einer DAC empfiehlt es sich, die Unterschiede in der Datenbank und in den Objekten auf Instanzebene zwischen der aktuellen und der neuen DAC zu vergleichen. Wenn Sie über keine Kopie des Pakets für die aktuelle DAC verfügen, können Sie ein Paket aus der aktuellen Datenbank extrahieren.

Wenn Sie beide DAC-Pakete in DAC-Projekte in SQL Server Developer Tools importieren, können Sie das Tool "Schemavergleich" verwenden, um die Unterschiede zwischen den beiden DACs zu analysieren.

Entpacken Sie alternativ die DACs in separate Ordner. Anschließend können Sie die Unterschiede mit einem Vergleichstool wie dem Hilfsprogramm "WinDiff" analysieren.

Weitere Informationen

Datenebenenanwendungen
Bereitstellen einer Datenebenenanwendung
Upgrade einer Datenebenenanwendung