Vorgehensweise: Überprüfen eines DAC-Pakets

Es empfiehlt sich, den Inhalt eines DAC-Pakets (Data-tier Application, Datenebenenanwendung) zu überprüfen, bevor es in der Produktionsumgebung bereitgestellt wird. Außerdem sollten Sie die Updateaktionen überprüfen, bevor Sie eine bestehende DAC mithilfe eines DAC-Pakets aktualisieren. Dies gilt insbesondere für die Bereitstellung von Paketen, die nicht im Unternehmen entwickelt wurden.

Anzeigen des Inhalts einer DAC

Es gibt zwei Vorgehensweisen, um den Inhalt eines DAC-Pakets anzuzeigen. Sie können ein DAC-Projekt in Microsoft Visual Studio 2010 erstellen und das DAC-Paket in das Projekt importieren. Der Inhalt des Pakets kann in einen Ordner entpackt werden.

SicherheitshinweisSicherheitshinweis

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

Eine Möglichkeit zum Anzeigen des Inhalts eines DAC-Pakets besteht darin, ein DAC-Projekt in Microsoft Visual Studio 2010 zu erstellen und das Paket in das Projekt zu importieren. Anschließend können Sie mit dem Projektmappen-Explorer alle Dateien in der DAC öffnen, z. B. die Richtlinie zur Serverauswahl und die nach der Bereitstellung auszuführenden Skripts. Sie können alle Objekte im Schema mithilfe der Schemaansicht überprüfen, insbesondere auch den Code in Objekten wie Funktionen oder gespeicherten Prozeduren.

Wenn Sie keinen Zugriff auf Visual Studio 2010 haben, können Sie den Inhalt der DAC in einen Ordner entpacken. Anschließend können Sie die Transact-SQL-Skripts im Datenbankmodul-Abfrage-Editor in SQL Server Management Studio und die Dateien in Tools wie dem Editor öffnen. Weitere Anweisungen finden Sie unter Vorgehensweise: Entpacken eines DAC-Pakets.

Überprüfen einer Aktualisierung mithilfe eines Assistenten

Bevor Sie eine DAC aktualisieren, empfiehlt es sich, zunächst nach Änderungen zu suchen, die an der Datenbank nach der ersten DAC-Bereitstellung vorgenommen wurden, und ein Skript der Änderungen zu überprüfen, die durch die Aktualisierung vorgenommen werden. Sie können diese Informationen mithilfe des Assistenten zum Aktualisieren von Datenebenenanwendungen anzeigen. Die Datenbankänderungen können Sie auf der Seite Änderung erkennen und die Updateaktionen auf der Seite Zusammenfassung anzeigen. Klicken Sie auf der Seite Zusammenfassung auf Abbrechen, wenn Sie die Aktualisierung nicht durchführen möchten. Weitere Informationen finden Sie unter Vorgehensweise: Aktualisieren einer Datenebenenanwendung.

Anzeigen von Datenbankänderungen mithilfe von PowerShell

Überprüfen Sie vor der Verwendung einer neuen Version eines DAC-Pakets zum Aktualisieren einer DAC, die aus einem früheren DAC-Paket bereitgestellt wurde, ob Änderungen an der Datenbank vorgenommen wurden, die sich auf die Aktualisierung auswirken könnten.

HinweisHinweis

In den PowerShell-Beispielen in diesem Thema werden die im DAC Framework 1.1 Feature Pack eingeführten Methoden verwendet. Sie können das Feature Pack von dieser Webseite herunterladen.

Erstellen Sie eine PowerShell-Skriptdatei (PS1-Datei), die den folgenden Code enthält:

  1. Fügen Sie Code hinzu, um ein SMO-Serverobjekt zu erstellen, und legen Sie es auf die Instanz fest, die die zu aktualisierende DAC enthält. Mit dem folgenden Beispiel wird ein Serverobjekt auf die Standardinstanz auf dem lokalen Computer festgelegt:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Fügen Sie Code hinzu, um ein ServerConnection-Objekt zu öffnen und eine Verbindung mit derselben Instanz herzustellen.

    ## 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)
    
  3. Fügen Sie Code hinzu, um das zuvor bereitgestellte DAC anzugeben, erstellen Sie anschließend ein ChangeResults-Objekt und speichern Sie es als Textdatei, um einen einfachen Bericht für neue, gelöschte und geänderte Objekte zu generieren.

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

Führen Sie die PS1-Datei entweder über eine PowerShell-Sitzung aus, in die Sie die SQL Server PowerShell-Snap-Ins geladen haben, oder verwenden Sie das Eingabeaufforderungs-Hilfsprogramm sqlps.

Generieren eines Aktualisierungsskripts mithilfe von PowerShell

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 eine Skriptdatei generieren, die Transact-SQL-Anweisungen enthält, die während der Aktualisierung ausgeführt werden, und das Skript dann überprüfen. Erstellen Sie eine PowerShell-Skriptdatei (PS1-Datei), die den folgenden Code enthält:

  1. Fügen Sie Code hinzu, um ein SMO-Serverobjekt zu erstellen, und legen Sie es auf die Instanz fest, die die zu aktualisierende DAC enthält. Mit dem folgenden Beispiel wird ein Serverobjekt auf die Standardinstanz auf dem lokalen Computer festgelegt:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. Fügen Sie Code hinzu, um ein ServerConnection-Objekt zu öffnen und eine Verbindung mit derselben Instanz herzustellen.

    ## 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)
    
  3. Fügen Sie Code hinzu, um die DAC-Paketdatei zu laden. In diesem Beispiel wird die Datei MyApplication.dacpac geladen.

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplication.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. Fügen Sie Code hinzu, um das zuvor bereitgestellte DAC anzugeben, erstellen Sie anschließend ein Transact-SQL-Skript, und speichern Sie es als SQL-Datei. Schließen Sie den Filestream, der zum Lesen des neuen DAC-Pakets verwendet wurde.

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

Führen Sie die PS1-Datei entweder über eine PowerShell-Sitzung aus, in die Sie die SQL Server PowerShell-Snap-Ins geladen haben, oder verwenden Sie das Eingabeaufforderungs-Hilfsprogramm sqlps.

Vergleichen von DACs

Vor dem Aktualisieren einer DAC können Sie außerdem auch die Unterschiede in der Datenbank und in den Objekten auf Instanzebene zwischen der aktuellen und der neuen DAC 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 Visual Studio 2010 importieren, können Sie das Tool Schemavergleich verwenden, um die Unterschiede zwischen den beiden DACs zu analysieren.

Wenn Sie keinen Zugriff auf Visual Studio 2010 haben, entpacken Sie die DACs in separate Ordner. Anschließend können Sie die Unterschiede mit einem Vergleichstool wie dem Hilfsprogramm WinDiff analysieren.