Teilen über


Überprüfen eines DAC-Pakets

Gilt für: SQL Server Azure SQL-Datenbank Azure 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önnen schädlichen Code enthalten, der möglicherweise unbeabsichtigten Transact-SQL-Code ausführt oder Fehler verursacht, indem er das Schema ändert. Bevor Sie eine DAC aus einer unbekannten oder nicht vertrauenswürdigen Quelle verwenden, stellen Sie sie auf einer isolierten Datenbank-Engine-Testinstanz bereit, führen DBCC CHECKDB (Transact-SQL) für die Datenbank aus und überprüfen außerdem den Code, z. B. gespeicherte Prozeduren oder sonstigen benutzerdefinierten Code.

Anzeigen des Inhalts einer DAC

Es gibt zwei Vorgehensweisen, um den Inhalt eines Datenebenenanwendungs-Pakets (DAC) anzuzeigen:

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

Importieren einer 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 dann 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 Datenschichtanwendungen. 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 Datenschichtanwendungen aus.

  3. Wählen Sie in Schritt 1 des Assistenten die Option Bereitstellen einer .dacpac-Datei einer Datenschichtanwendung auf einer Instanz von SQL Server aus

  4. Ein Schritt 2 des Assistenten ist die Eingabe des Dateispeicherorts, und die Auswahl von Neue Datenbank für die Zieldatenbank. 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.

Anzeigen von Datenbankänderungen

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. Möglicherweise wurden Änderungen direkt an der zugeordneten Datenbank vorgenommen, die einen Konflikt mit dem in einer neuen Version der DAC definierten Schema verursachen.

Alle Datenbanken

Anzeigen von Datenbankänderungen mithilfe des Schemavergleichs

Anzeigen von Datenbankänderungen mithilfe von SqlPackage CLI

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

Datenbanken, die als Datenschichtanwendung registriert sind

Anzeigen von Datenbankänderungen mit einem 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 einer bereitgestellten DAC namens „MyApplicaiton“ 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 Aktion DriftReport verwendet werden, um die Änderungen anzuzeigen, die seit der letzten Registrierung an einer Datenbank vorgenommen wurden.

Anzeigen von Upgradeaktionen

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. Hierfür wählen Sie während des Veröffentlichungsprozesses „Skript generieren“ aus.

  • 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 einer .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 Datenschichtanwendung registriert sind

Vor der Verwendung einer neuen Version eines DAC-Pakets zum Aktualisieren einer DAC, die aus einem früheren DAC-Paket bereitgestellt wurde, können Sie einen Bericht generieren, der Transact-SQL-Anweisungen enthält, die während des Upgrades ausgeführt werden, und die Anweisungen dann ü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 zum Aktualisieren der DAC „MyApplicaiton“ auf das in einer „MyApplication2017.dacpac“-Datei definierte Schema ausgeführt werden würde.

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