Wie aktualisiert man in einer Multi Tenant App das gesamte Schema aller Mandanten?

8

Ich entwickle eine Multi-Tenant-App. Ich wählte den Ansatz "Gemeinsame Datenbank / Separate Schemata".

Meine Idee ist, ein Standardschema ( dbo ) zu haben und bei der Bereitstellung dieses Schemas eine Aktualisierung der Schemata der Mandanten durchzuführen ( tenantA , tenantB , tenantC ); mit anderen Worten, um synchronisierte Schemas zu machen.

Wie kann ich die Schemata von Mandanten mit dem Standardschema synchronisieren?

Ich verwende SQL Server 2008.

    
Juliano Oliveira 03.06.2010, 15:57
quelle

2 Antworten

5

Zunächst benötigen Sie eine Tabelle oder einen anderen Mechanismus, um die Versionsinformationen des Schemas zu speichern. Wenn nichts anderes, dass Sie Ihre Anwendung und Ihr Schema miteinander verbinden können. Es gibt nichts schmerzhafteres als eine Version der Anwendung gegen das falsche schemafehlende, korrumpierende Daten, etc.

Die Anwendung sollte ablehnen oder herunterfahren, wenn es nicht die richtige Version ist - Sie könnten einen Rückstoß bekommen, wenn es nicht richtig ist, aber Sie schützt vor dem wirklich schlechten Tag, wenn die Datenbank die wertvollen Daten beschädigt.

Sie müssen eine Möglichkeit haben, Änderungen wie Subversion oder etwas anderes zu verfolgen - aus SQL können Sie das ursprüngliche Schema exportieren. Von hier aus benötigen Sie einen Mechanismus, um Änderungen mit einem netten Werkzeug wie SQL-Vergleich zu verfolgen und dann die Schemaänderungen zu verfolgen und zu einem Update in der Versionsnummer in der Zieldatenbank zu passen.

Wir behalten jedes Delta in einem separaten Ordner unterhalb des von uns erstellten Upgrade-Tools. Dieses Dienstprogramm meldet sich am Server an, liest die Versionsinformationen und wendet die Transformationsskripts von der nächsten Version in der Datenbank an, bis keine weiteren Upgrade-Skripts in seinem Unterordner gefunden werden. Dies gibt uns die Möglichkeit, eine Datenbank zu aktualisieren, egal wie alt sie auf die aktuelle Version ist. Wenn es Datentransformationen gibt, die für den Mandanten eindeutig sind, werden diese knifflig.

Natürlich sollten Sie immer eine Sicherungskopie der Datenbank erstellen, die in eine externe Datei schreibt, vorzugsweise mit einer vom Benutzer identifizierbaren Versionsnummer, so dass Sie sie finden und wiederherstellen können, wenn die Skripts fehlerhaft sind. Und schließlich wird es nur planen, herauszufinden, wie zu erholen und wiederherzustellen.

Ich habe gesehen, dass es im neuen VS 2010 eine Art Schema-Upgrader-Tool gibt, aber ich habe es nicht benutzt. Das könnte dir auch nützlich sein.

    
MikeJ 08.06.2010, 21:56
quelle
1

Es gibt keinen magischen Befehl, um die Schemas zu synchronisieren, soweit ich weiß. Sie müssten ein Werkzeug verwenden - entweder im Haus gebaut oder gekauft (überprüfen Sie Red Gate's SQL Compare und SQL Examiner - Sie müssen dazu zwinge sie, verschiedene Schemas zu vergleichen).

Gerade das Synchronisieren kann jedoch oft knifflige Angelegenheit sein. Wenn Sie eine Spalte hinzugefügt haben, müssen Sie diese Spalte auch mit Daten füllen? Wenn Sie eine Spalte in zwei neue Spalten aufteilen, müssen Sie einen Conversion-Code für so etwas haben.

Mein Vorschlag wäre, alle Skripts, die Sie für das dbo-Schema ausführen, sehr sorgfältig zu verfolgen und sicherzustellen, dass sie auch bei den anderen Schemas ausgeführt werden. Sie können dann ein Tool wie SQL Compare als gelegentliche Plausibilitätsprüfung verwenden, um nach unerwarteten Unterschieden zu suchen.

    
Tom H 03.06.2010 16:48
quelle