2008-12-30 14 views
5

Ich arbeite an einigen Schemaänderungen an einer vorhandenen Datenbank.Die beste Methode zum Erstellen eines SQL Server-Rollback-Skripts?

Ich habe die Datenbank gesichert, um eine Entwicklerkopie zu erhalten, und habe meine Änderungen vorgenommen. Ich werde ein einzelnes Roll-Skript erstellen, um die Änderungen auf der Produktionsmaschine in einer einzigen Transaktion zu migrieren.

Gibt es eine Best Practice zum Erstellen eines Rollback-Skripts, in dem ein Bereitstellungsproblem auftritt? Bevor ich das folgende Muster dann von Hand geschrieben haben, mit:

  • Tropfen neue Einschränkungen und Indizes
  • Tabellen ändern, um neue Spalten zu entfernen
  • Tropfen hinzugefügt Tabellen
  • Transaktion Commit

Gibt es einen besseren Ansatz?

Antwort

4

Das ist es im Grunde, ich glaube nicht, dass es viel hinzuzufügen, abgesehen von dem, was Sie ansprechen. So machen wir das in unserem Unternehmen, wir Entwickler sind verantwortlich für das Erstellen des Skripts und des Rollback-Skripts, und wir sind dafür verantwortlich, die Datenbank in dem Zustand zu belassen, in dem sie sich vor den ersten Änderungen befand. Dann führen die DBAs es in der Produktion aus. Wenn es jemals ein Problem gibt, werden sie das Rollback-Skript ausführen und alles ist wieder normal. Denken Sie nur an die Abhängigkeiten und die Reihenfolge, in der Sie Ihre Objekte ändern, und erstellen Sie das Rollback-Skript dann rückwärts.

1

Wenn es eine relativ kleine Datenbank ist, erstellen Sie einfach eine Sicherungskopie, bevor Sie das Upgrade anwenden. Wenn alles drunter und drüber geht, machen Sie eine Wiederherstellung.

Sobald es in Betrieb genommen wird und neue Daten eingegeben werden, können Sie es nicht wirklich zurück rollen. Sie müssen nur die Probleme beheben.

+0

Wir nicht Backups erstellen und von Sicherungen auf diesem Computer wiederherstellen. Es muss als Transaktion vorwärts und rückwärts rollen. – FlySwat

4

Sie vermissen den fünften Schritt

  • Tropfen neue Einschränkungen und Indizes
  • Tabellen Alter neue Spalten
  • Tropfen hinzugefügt Tabellen
  • Commit-Transaktion aus
  • Test, um die Hölle zu entfernen das Skript vor der Ausführung in der Produktion

Ein effizienterer Ansatz besteht darin, die Änderungen so zu speichern, wie sie vorkommen, wie RoRmigrationsdo. Für jede DB-Änderung erstellen Sie ein Skript, das die Änderung anwendet und es zurückrollt (natürlich nach Ihrer Wahl). Sie können diese Skripts dann genauso wie Ihren Code unter Versionskontrolle setzen.

Wenn Sie eine Versionsnummer in der Datenbank behalten, können Sie sie zusätzlich automatisieren, indem Sie jedes Skript mit einer Versionsnummer versehen und die Versionsnummer in der Datenbank entsprechend der ausgeführten Aktion erhöhen oder verringern.

1

Wenn Sie ein Tool wie Redgate's SQL Compare verwenden, können Sie den Vergleich zwischen den beiden Datenbanken auf beide Arten durchführen und beide verwenden, um die benötigten Skripte zu erstellen. Das Skript "dev to prod" würde die Änderungen enthalten, die Sie vornehmen, und das Script "prd to dev" würde zum ursprünglichen Produktionsdatenbankstatus zurückkehren. Dies stellt sicher, dass Sie auch in beiden Skripten nichts vergessen.

Verwandte Themen