Freigeben über


Überprüfen eines DAC-Pakets

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.

  1. Vorbereitungen: Voraussetzungen

  2. So aktualisieren Sie eine DAC mit: Anzeigen des Inhalts einer DAC, Anzeigen von Datenbankänderungen, Anzeigen von Upgradeaktionen, Vergleichen von DACs

Voraussetzungen

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 Testinstanz von Database Engine (Datenbankmodul) bereit, führen Sie DBCC CHECKDB (Transact-SQL) für die Datenbank aus, und überprüfen Sie außerdem den Code in der Datenbank, z. B. gespeicherte Prozeduren oder sonstigen benutzerdefinierten Code.

[Nach oben]

Anzeigen des Inhalts einer DAC

Es gibt zwei Vorgehensweisen, um den Inhalt eines Datenebenenanwendungs-Pakets (DAC) anzuzeigen. Sie können das DAC-Paket in ein DAC-Projekt in SQL Server Developer Tools importieren. Der Inhalt des Pakets kann in einen Ordner entpackt werden.

Anzeigen einer DAC in SQL Server Developer Tools

  1. Öffnen Sie das Menü Datei, und wählen Sie Neu und dann Projekt… aus.

  2. Wählen Sie die SQL Server-Projektvorlage aus, und geben Sie Name, Speicherort und Projektmappenname ein.

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

  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.

[Nach oben]

Anzeigen einer DAC in einem Ordner

  • Entpacken Sie das DAC-Paket in einen Ordner anhand der Anweisungen unter Entpacken eines DAC-Pakets.

  • Zeigen Sie den Inhalt der Transact-SQL-Skripts an, indem Sie sie im Database Engine (Datenbankmodul)-Abfrage-Editor in Management Studio öffnen.

  • Zeigen Sie den Inhalt der Textdateien in Tools an, z. B. im Editor.

[Nach oben]

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.

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 zum Verwenden 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 GetDatabaseChanges()-Methode 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.

[Nach oben]

Anzeigen eines Beispiels für Datenbankänderungen (PowerShell)

Anzeigen eines Beispiels für Datenbankänderungen (PowerShell)

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

[Nach oben]

Anzeigen von Upgradeaktionen

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 zum Verwenden des Assistenten finden Sie unter Upgrade einer Datenebenenanwendung.

[Nach oben]

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 GetIncrementalUpgradeScript()-Methode 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.

[Nach oben]

Anzeigen eines Beispiels für Upgradeaktionen (PowerShell)

Anzeigen eines Beispiels für Upgradeaktionen (PowerShell)

Im folgenden Beispiel werden die Transact-SQL-Anweisungen gemeldet, die zum Aktualisieren der DAC "MyApplicaiton" auf das in einer MyApplicationVNext.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\MyApplicationVNext.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()

[Nach oben]

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.

[Nach oben]

Siehe auch

Konzepte

Datenebenenanwendungen

Bereitstellen einer Datenebenenanwendung

Upgrade einer Datenebenenanwendung