Aktualisieren von Datenebenenanwendungen

Das Upgraden einer bereitgestellten Datenebenenanwendung (DAC) auf eine neue Version ist einfacher als die Bereitstellung von Datenbanken oder Datenbankänderungen mithilfe von Skripts. Der Datenbankentwickler muss nur ein DAC-Paket erstellen, das das Schema und die Eigenschaften der neuen Version beschreibt. Beim DAC-Upgradevorgang wird das neue Schema mit dem vorhandenen bereitgestellten Schema verglichen, und die Aktionen, die zum Ändern des neuen Schemas erforderlich sind, werden anschließend dynamisch ausgeführt.

Der Upgradeprozess

Beim Upgradeprozess für die Datenebenenanwendung von SQL Server wird eine bereitgestellte DAC in eine andere Version derselben Anwendung konvertiert. Beispiel: das Upgrade von Finance, Version 1.0, auf Finance, Version 2.0. Die folgenden Schritte veranschaulichen einen einfachen Bereitstellungsvorgang:

  • Ein Datenbankentwickler schließt die Entwicklung der DAC mit dem Namen Finance, Version 1.0, ab und erstellt das DAC-Paket FinanceVersion1.dacpac.

  • Ein Datenbankadministrator stellt die DAC mit dem Namen Finance 1.0 für die Produktion bereit. Die Produktionsinstanz des Datenbankmoduls verfügt jetzt über eine bereitgestellte DAC mit dem Anwendungsnamen Finance, der Version 1.0 und einer zugehörigen Datenbank mit dem Namen Finance.

  • Der Datenbankentwickler beginnt daraufhin mit der Arbeit an der nächsten Version und erstellt am Ende des Entwicklungsprojekts das DAC-Paket FinanceVersion2.dacpac.

  • Der Datenbankadministrator plant den DAC-Upgradeprozess. Die Finance-Datenbank wird gesichert. Die Inhalte des DAC-Pakets und ein Bericht der beim Upgrade vorgenommenen Aktionen werden überprüft, um sicherzustellen, dass keine Probleme in der Produktionsdatenbank auftreten.

  • Der Datenbankadministrator führt anschließend ein DAC-Upgrade aus und gibt dabei sowohl die aktuell bereitgestellte DAC der Version 1.0 als auch das DAC-Paket der Version 2.0 an. Es gibt zwei Optionen zum Durchführen des Upgrades:

    • Durchführen eines direkten Upgrades mithilfe eines Windows PowerShell-Skripts, das die DAC-Methode IncrementalUpgrade() aufruft. Beim direkten Upgrade wird das Schema der vorhandenen Datenbank so geändert, dass es mit dem in der neuen DAC-Version definierten Schema übereinstimmt.

    • Das Durchführen eines parallelen Upgrades mithilfe der DAC-Methode Upgrade() oder des Assistenten Datenebenenanwendung aktualisieren. Beim parallelen Upgrade wird eine neue Datenbank mit dem neuen Schema erstellt, und die Daten werden von der ursprünglichen Datenbank in die neue übertragen.

  • Nach Abschluss des Upgrades verfügt die aktualisierte DAC immer noch über den Anwendungsnamen "Finance" und eine verknüpfte Datenbank mit dem Namen "Finance", jedoch ist die DAC-Version nun 2.0.

Ändern von Datenbanken nach der Bereitstellung

Wenn Änderungen an der Datenbank vorgenommen werden, die nicht von der Aktualisierung der DAC herrühren, weicht die Datenbank mit der Zeit von der zugehörigen DAC ab. Zu diesen Änderungen zählen das Hinzufügen eines neuen Triggers mit einer CREATE TRIGGER-Anweisung oder die Verwendung einer ALTER TABLE-Anweisung, um die Struktur einer Tabelle zu ändern. Durch verschiedene Änderungen wird je nach den angegebenen Upgradeoptionen möglicherweise verhindert, dass das DAC-Upgrade abgeschlossen werden kann. Die Änderungen sind außerdem in der aktualisierten Datenbank nicht vorhanden.

Beim DAC-Upgradeprozess wird nach Unterschieden zwischen dem Schema der aktuellen Datenbank und der DAC-Definition gesucht, die in der msdb-Systemdatenbank gespeichert ist. Sobald Unterschiede gefunden werden, öffnet er ein Warndialogfeld, in dem die Unterschiede aufgeführt sind. Sie sollten das Upgrade erst fortsetzen, nachdem Sie die gemeldeten Unterschiede analysiert sowie Prozesse oder Skripts eingerichtet haben, mit denen vom neuen System benötigte Objekte oder Daten übertragen werden, die vom Upgrade nicht übertragen werden können.

Die neue Datenbank enthält nach Abschluss des Upgrades alle in der neuen Version der DAC definierten Objekte, wie sie in der neuen DAC angegeben sind. In den meisten Fällen weisen sie die Form auf, die von der Version der Anwendungen benötigt wird, die mit der neuen Version der DAC und der Datenbank verknüpft sind. Analysieren Sie den Änderungsbericht des Upgrades sorgfältig, und übertragen Sie nur die Objekte, die im neuen System benötigt werden. Man spricht z. B. nicht unbedingt von einem Fehler, wenn mehrere in der aktuellen DAC und Datenbank vorhandenen Objekte in der neuen DAC fehlen. Möglicherweise sind sie mit Funktionen verknüpft, die in den neuen Versionen der Anwendungen, die die DAC verwenden, gelöscht oder neu programmiert wurden.

Bei einem direkten Upgrade werden die geänderten Objekte nicht beibehalten. Die Objektdefinitionen und Daten müssen gespeichert werden, bevor das Upgrade gestartet wird. Bei einem parallelen Upgrade werden die Objekte und Daten in der umbenannten ursprünglichen Datenbank beibehalten. Alle geänderten Objekte müssen manuell in die neue Datenbank übertragen werden.

Weitere Informationen zu den Vorgehensweisen bei der Skripterstellung für Objekte, die an die neue Datenbank übertragen werden sollen, finden Sie unter Vorgehensweise: Erstellen eines Skripts (SQL Server Management Studio).

DAC-Projekte können Skripts vor und nach der Bereitstellung angeben. Dabei handelt es sich um Transact-SQL-Skripts, die eine beliebige Aktion ausführen können, wie z. B. das Erstellen von Objekten, die in einer DAC nicht unterstützt werden. Wenn die ursprüngliche DAC ein nach der Bereitstellung auszuführendes Skript enthielt, mit dem Objekte erstellt wurden, die in einer DAC nicht unterstützt werden, müssen diese Objekte separat mit einem Mechanismus aktualisiert werden, der ermöglicht, dass diese Objekte während eines direkten Upgrades gelöscht werden oder in der ursprünglichen Datenbank durch ein paralleles Upgrade beibehalten werden.

Direktes Upgrade

Bei einem direkten Upgrade werden die folgenden Aktionen ausgeführt:

  • Es wird überprüft, ob die bereitgestellte DAC und das DAC-Paket über denselben Anwendungsnamen verfügen (beide Namen sind z. B. auf "Finance" festgelegt). Außerdem wird ausgewertet, ob die Instanz des Datenbankmoduls die in der Richtlinie zur Serverauswahl (sofern definiert) festgelegten Anforderungen in der neuen Version der DAC erfüllt und ob die vorhandene Datenbank Objekte enthält, die in einer DAC nicht unterstützt werden.

  • Es werden alle Änderungen wie CREATE-, ALTER- und DROP-Anweisungen durchgeführt, die erforderlich sind, um das Schema der Datenbank mit dem in der neuen Version der DAC definierten Schema abzugleichen.

Wenn die Option Datenverlust ignorieren auf True festgelegt ist, werden beim DAC-Upgrade möglicherweise Aktionen durchgeführt, bei denen Daten entfernt werden. Wenn beispielsweise eine Tabelle in der aktuellen Datenbank vorhanden ist, jedoch nicht im Schema der neuen DAC, wird die Datenbank beim Upgrade gelöscht. Vor dem Durchführen des Vorgangs muss der Datenbankadministrator alle Daten archivieren, die nach dem Upgrade benötigt werden.

Direkte Aktualisierungen werden sowohl in SQL Azure als auch in Instanzen von Database Engine (Datenbankmodul) unterstützt. Für direkte Upgrades sind DAC Framework 1.1 und ein neuer DAC-Aktualisierungs-Assistent erforderlich. Beide sind in SQL Server 2008 R2 Service Pack 1 (SP1) enthalten.

Paralleles Upgrade

Parallele Aktualisierungen werden in SQL Azure sowie in der nächsten Version von SQL Server nicht mehr unterstützt. Der empfohlene Aktualisierungsmechanismus ist die in SQL Server 2008 R2 SP1 enthaltene direkte Aktualisierung.

Bei einem parallelen Upgrade werden die folgenden Aktionen ausgeführt:

  • Es wird überprüft, ob die bereitgestellte DAC und das DAC-Paket über denselben Anwendungsnamen verfügen (beide Namen sind z. B. auf "Finance" festgelegt). Außerdem wird ausgewertet, ob die Instanz des Datenbankmoduls die in der Richtlinie zur Serverauswahl (sofern definiert) festgelegten Anforderungen in der neuen Version der DAC erfüllt und ob die vorhandene Datenbank Objekte enthält, die in einer DAC nicht unterstützt werden.

  • Die neue Version der DAC aus dem DAC-Paket wird bereitgestellt. Auf diese Weise wird eine neue Datenbank mit einem temporären Namen erstellt.

  • Er legt die ursprüngliche Datenbank auf den schreibgeschützten Modus fest, falls sie sich nicht bereits in diesem Modus befindet, und kopiert die Daten in die neue Datenbank.

  • Wenn sich die ursprüngliche Datenbank im schreibgeschützten Modus befand, wird für die neue Datenbank der schreibgeschützte Modus festgelegt.

  • Die ursprüngliche Datenbank wird umbenannt, indem eine Zeichenfolge an das Ende des Datenbanknamens angefügt wird.

  • Der neuen Datenbank wird der Name der ursprünglichen Datenbank zugewiesen.

  • Nachdem sich der Datenbankadministrator vergewissert hat, dass die neue Datenbank ordnungsgemäß funktioniert, kann die ursprüngliche Datenbank archiviert werden.

Datenbankänderungen können sich außerdem darauf auswirken, ob die Daten in einer Tabelle in die neue Datenbank übertragen werden. In Bezug auf die Datenbankänderungen können Tabellen den folgenden Status aufweisen:

  • Die Tabellenstruktur ist an allen drei Speicherorten gleich: in der aktuellen DAC-Definition in msdb, in der aktuellen Datenbank und in der neuen DAC. Die Tabelle ist in der neuen Datenbank vorhanden, und beim Upgradevorgang werden die Daten in die neue Datenbank übertragen. Die Übertragung erfolgt mithilfe einer INSERT-Anweisung, die auf einem SELECT-Vorgang für die alte Tabelle basiert.

  • Die Tabelle ist in der aktuellen DAC-Definition oder Datenbank nicht vorhanden, ist jedoch in der neuen DAC definiert. Die Tabelle ist in der neuen Datenbank vorhanden, enthält jedoch keine Daten, da keine Daten zur Übertragung vorhanden sind.

  • Die Tabelle fehlt in der aktuellen DAC-Definition, ist in der aktuellen Datenbank und der neuen DAC jedoch vorhanden. Die Tabelle ist in der neuen Datenbank vorhanden, die Daten werden beim Upgradevorgang jedoch nicht übertragen. Übertragen Sie die Daten manuell, nachdem das Upgrade abgeschlossen wurde.

  • Die Tabelle ist in der aktuellen DAC-Definition und Datenbank vorhanden, aber nicht in der neuen DAC. Die Tabelle ist in der neuen Datenbank nicht vorhanden. Wenn die Tabelle im neuen System erforderlich ist, erstellen Sie die Tabelle manuell und übertragen die Daten, nachdem das Upgrade abgeschlossen wurde.

  • Die Tabelle ist an allen drei Speicherorten vorhanden, aber die Struktur der Tabelle in der aktuellen DAC-Definition und Datenbank unterscheidet sich von der Struktur der Tabelle in der neuen DAC. Die Tabelle ist in der neuen Datenbank vorhanden und weist die Struktur auf, die in der neuen DAC definiert wurde.

    • Wenn Tabellen- und Spaltenname nicht übereinstimmen, wird vom Upgradevorgang gemeldet, dass keine Daten übertragen wurden. Übertragen Sie die Daten manuell, nachdem das Upgrade abgeschlossen wurde.

    • Wenn Tabellen- und Spaltennamen identisch sind, wird vom Upgradevorgang versucht, die Daten zu übertragen. Wenn sich der Datentyp mindestens einer Spalte geändert hat und nicht kompatibel ist, tritt ein Fehler bei der INSERT-Anweisung auf, der ein Rollback des Upgradevorgangs bewirkt.

Sie können einen beliebigen Mechanismus verwenden, um die Daten an die neue Version der Tabelle zu übertragen. Sie können eine INSERT-Anweisung verwenden, mit der Daten aus der alten Version der Tabelle ausgewählt werden. Sie können auch eines der Verfahren zur Masseneinfügung verwenden, die in Importieren und Exportieren von Massendaten erläutert werden.

Änderungsverlauf

Aktualisierter Inhalt

Das in DAC Framework 1.1 eingeführte direkte Upgrade wurde erläutert. Mit anderen Themen übereinstimmende Inhalte wurden entfernt.

SQL Server 2008 R2 SP1 hat eine vollständige Unterstützung für direkte Aktualisierungen, sowohl für DAC Framework 1.1, als auch für den Aktualisierungs-Assistant.