2009-01-16 3 views
11

Ich muss Versionen auf eine SQL Server 2005-Datenbank setzen und diese über eine .NET-Anwendung zugänglich machen. Was ich dachte, ist die Verwendung von Extended Properties auf der Datenbank mit dem Namen 'version' und natürlich würde der Wert die Version der Datenbank sein. Ich kann dann SQL verwenden, um dies zu erreichen. Meine Frage ist das klingt wie ein guter Plan oder gibt es eine bessere Möglichkeit zum Hinzufügen von Versionen zu einer SQL Server-Datenbank?Wie kann ich eine SQL Server-Datenbank versionieren?

Nehmen wir an, ich kann eine Tabelle nicht für die Metadaten verwenden.

+0

Meinst du Versionierung das Schema oder die darin enthaltenen Daten? – cdeszaq

+0

Versionierung des Schemas – widmayer

Antwort

2

Wenn ich Ihre Frage richtig verstehe (Unterscheidung zwischen internen Datenbankversionen, wie Buildnummern für Anwendungen), könnten Sie eine Art SYSVERSION-Tabelle haben, die eine einzelne Zeile mit diesen Informationen enthält.

Leichter abzufragen.

Konnte auch mehrere Spalten mit nützlichen Informationen oder mehrere Zeilen enthalten, die unterschiedliche Zeiten repräsentieren, zu denen die Kopie der Datenbank aktualisiert wurde.

Update: Nun, wenn Sie nicht eine Tabelle verwenden können, um die Metadaten zu halten, dann entweder externe Informationen einer Art (eine INFO-Datei auf der Festplatte?) Oder erweiterte Eigenschaften wäre der Weg zu gehen.

Ich mag immer noch die Idee der Tabelle, aber :) Sie könnten immer Sicherheit verwenden, um es nur durch eine benutzerdefinierte gespeicherte proc get_ db_version oder etwas zugänglich machen.

+0

Ich suche nach Alternativen zu dieser Methode aufgrund von Architekturrichtlinien usw. – widmayer

11

ich dies tun:

Erstellen Sie ein Schema Tabelle:

CREATE TABLE [dbo].[SchemaVersion](
    [Major] [int] NOT NULL, 
    [Minor] [int] NOT NULL, 
    [Build] [int] NOT NULL, 
    [Revision] [int] NOT NULL, 
    [Applied] [datetime] NOT NULL, 
    [Comment] [text] NULL) 

Update-Schema:

INSERT INTO SchemaVersion(Major, Minor, Build, Revision, Applied, Comment) 
VALUES (1, 9, 1, 0, getdate(), 'Add Table to track pay status') 

Get Datenbank-Schema-Version:

SELECT TOP 1 Major, Minor, Build from SchemaVersion 
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC 

Angepasst von dem, was ich weiterlesen Coding Horror

+0

Dies könnte einen Schritt weiter gehen und die Metadaten für das Schema enthalten, wie die Tabellen, Felder, Typen, usw. Das tut Es beginnt jedoch, sich für ein dynamisches System zu eignen, bei dem ein Teil der Daten des Programms das Schema selbst ist, das häufig in der medizinischen Industrie zu finden ist. – cdeszaq

6

Wir verwenden die erweiterten Eigenschaften, wie Sie es beschrieben haben, und es funktioniert wirklich gut.

Ich denke, einen Tisch zu haben ist übertrieben. Wenn ich die Unterschiede in meinen Datenbanken verfolgen möchte, benutze ich Quellcodeverwaltung und behalte alle db-Generierungsskripte darin.

Ich habe auch einige ER-Diagramm-Tools verwendet, um mir zu helfen, Änderungen in DB-Versionen zu verfolgen. Dies war außerhalb der eigentlichen Anwendung, aber es erlaubte mir schnell zu sehen, was sich geändert hat.

Ich denke, es war CASEStudio, oder so ähnlich.

+0

Das sieht sehr vielversprechend aus. Können Sie für bewährte Methoden auf Quellen verweisen? – BozoJoe

0

Der beste Weg zu tun ist, 2 Prozeduren zu haben: eine Kopfzeile, um zu steuern, was eingefügt wird, und Validierungen einer Fußzeile, um die Daten einzufügen, wenn die Freigabe gut ist oder nicht. Der Text enthält Ihre Skripte.

Sie benötigen einen Wrapper, der Ihr Skript kapselt und alle Informationen aufzeichnet: Wenn die Freigabe bereits erfolgt ist, wurde die Skriptnummer angewendet, applyby, Datum anwenden, Ergebnis "fehlgeschlagen oder erfolgreich" freigeben.

0

Ich verwende eine dedizierte Tabelle, die der Lösung von Matt ähnlich ist. Darüber hinaus müssen Datenbankalter die aktuelle Version überprüfen, bevor Änderungen am Schema vorgenommen werden.Wenn die aktuelle Version kleiner als erwartet ist, wird das Skript mit einem schwerwiegenden Fehler beendet. Wenn die aktuelle Version größer als erwartet ist, überspringt das Skript den aktuellen Schritt, da dieser Schritt manchmal bereits in der Vergangenheit ausgeführt wurde.

Dies ist die komplette Lösung mit Beispielen und Konventionen in schriftlicher Form Datenbank Skripts ändern: How to Maintain SQL Server Database Schema Version

Verwandte Themen