Verwalten von Schemas in einer SaaS-Anwendung, die mehrinstanzenfähige Datenbanken mit Sharding verwendet
Gilt für: Azure SQL-Datenbank
In diesem Tutorial werden die Herausforderungen bei der Verwaltung einer großen Anzahl von Datenbanken in einer SaaS-Anwendung (Software-as-a-Service) betrachtet. Für das Auffächern von Schemaänderungen über alle Datenbanken hinweg werden Lösungen gezeigt.
Wie jede andere Anwendung wird die Wingtip Tickets-SaaS-App laufend weiterentwickelt und macht dadurch Änderungen an der Datenbank erforderlich. Änderungen wirken sich möglicherweise auf das Schema oder Verweisdaten aus oder gehen mit Aufgaben zur Datenbankwartung einher. Bei einer SaaS-Anwendung, die das Muster mit einer Datenbank pro Mandant verwendet, müssen die Änderungen übergreifend für eine potenziell sehr große Anzahl von Mandantendatenbanken koordiniert werden. Darüber hinaus müssen Sie diese Änderungen in den Datenbankbereitstellungsprozess einbinden, um sicherzustellen, dass die Änderungen bei der Erstellung auch in neue Datenbanken einfließen.
Zwei Szenarien
In diesem Tutorial werden die folgenden zwei Szenarien untersucht:
- Bereitstellen der Aktualisierungen von Verweisdaten für alle Mandanten
- Neuerstellen eines Index für die Tabelle mit den Verweisdaten
Für die mandantendatenbankübergreifende Ausführung dieser Vorgänge wird das Feature Elastische Aufträge von Azure SQL-Datenbank verwendet. Die Aufträge gelten auch für die als Vorlage verwendete Mandantendatenbank. Bei der Wingtip Tickets-Beispielanwendung wird diese Vorlagendatenbank kopiert, um eine neue Mandantendatenbank bereitzustellen.
In diesem Tutorial lernen Sie Folgendes:
- Erstellen eines Auftrags-Agents
- Ausführen einer T-SQL-Abfrage in mehreren Mandantendatenbanken
- Aktualisieren von Verweisdaten in allen Mandantendatenbanken
- Erstellen eines Index für eine Tabelle in allen Mandantendatenbanken
Voraussetzungen
Die mehrinstanzenfähige Datenbankanwendung Wingtip Tickets muss bereitgestellt sein:
- Anleitungen hierzu finden Sie im ersten Tutorial, in dem die mehrinstanzenfähige SaaS-Datenbankanwendung Wingtip Tickets vorgestellt wird:
Bereitstellen und Kennenlernen einer mehrinstanzenfähigen Anwendung mit Sharding, die Azure SQL-Datenbank verwendet- Der Bereitstellungsprozess dauert weniger als fünf Minuten.
- Sie müssen die mehrinstanzenfähige Wingtip-Version mit Sharding installiert haben. Die Versionen Eigenständig und Datenbank pro Mandant unterstützen das vorliegende Tutorial nicht.
- Anleitungen hierzu finden Sie im ersten Tutorial, in dem die mehrinstanzenfähige SaaS-Datenbankanwendung Wingtip Tickets vorgestellt wird:
Die aktuelle Version von SQL Server Management Studio (SSMS) muss installiert sein. Laden Sie SSMS herunter, und installieren Sie es.
Azure PowerShell muss installiert sein. Ausführliche Informationen finden Sie unter Erste Schritte mit Azure PowerShell.
Einführung in SaaS-Schemaverwaltungsmuster
Das in diesem Beispiel verwendete mehrinstanzenfähige Datenbankmodell mit Sharding ermöglicht, dass eine Mandantendatenbank einen oder mehrere Mandanten enthält. In diesem Beispiel wird untersucht, wie Sie eine Mischung aus einer Datenbank mit mehreren Mandanten und einer Datenbank mit nur einem Mandanten und damit ein hybrides Mandantenverwaltungsmodell verwenden können. Das Verwalten von Änderungen an diesen Datenbanken kann kompliziert sein. Elastische Aufträge erleichtern die Verwaltung einer großen Anzahl von Datenbanken. Aufträge ermöglichen es Ihnen, auf sichere und zuverlässige Weise Transact-SQL-Skripts als Aufgaben für eine Gruppe von Mandantendatenbanken auszuführen. Die Aufgaben sind unabhängig von Benutzerinteraktionen oder Eingaben. Mithilfe dieser Methode können Änderungen an Schemadaten oder an gemeinsamen Verweisdaten für alle Mandanten in einer Anwendung bereitgestellt werden. Elastische Aufträge können auch verwendet werden, um eine Gold-Version der Datenbank als Vorlage zu verwalten. Diese Vorlage dient zum Erstellen neuer Mandanten, wodurch immer sichergestellt wird, das die neuesten Schema- und Verweisdaten verwendet werden.
Elastische Aufträge
Im Jahr 2024 wurden elastische Aufträge als allgemein verfügbares Produkt mit neuen Features veröffentlicht. Ein integriertes Feature von Azure SQL-Datenbank finden Sie unter Aufträge für die elastische Datenbank.
Abrufen von Quellcode und Skripts zur Anwendung Wingtip Tickets SaaS Multi-tenant Database
Die Skripts und der Quellcode der mehrinstanzenfähigen Wingtip Tickets-SaaS-Datenbank stehen im Repository WingtipTicketsSaaS-MultiTenantDB auf GitHub zur Verfügung. Schritte zum Herunterladen und Entsperren der Wingtip Tickets-SaaS-Skripts finden Sie unter General guidance for working with Wingtip Tickets sample SaaS apps (Allgemeine Hinweise zur Verwendung von Wingtip Tickets-Beispiel-SaaS-Apps).
Erstellen einer Auftrags-Agent-Datenbank und eines neuen Auftrags-Agents
Für dieses Tutorial müssen Sie mit PowerShell die Auftrags-Agent-Datenbank und den Auftrags-Agent erstellen. In gleicher Weise, wie der SQL-Agent eine msdb
-Datenbank verwendet, nutzt ein Auftrags-Agent eine Datenbank in Azure SQL-Datenbank, um Auftragsdefinitionen, Auftragsstatus und den Verlauf zu speichern. Sobald der Auftrags-Agent erstellt wurde, können Sie sofort Aufträge erstellen und überwachen.
- Öffnen Sie …Learning Modules\Schema Management\Demo-SchemaManagement.ps1 in der PowerShell ISE.
- Drücken Sie F5 , um das Skript auszuführen.
Das Skript Demo-SchemaManagement.ps1 ruft das Skript Deploy-SchemaManagement.ps1 auf, um die Datenbank jobagent
auf dem Katalogserver zu erstellen. Das Skript erstellt dann den Auftrags-Agent, und übergibt die Datenbank jobagent
als Parameter.
Erstellen eines Auftrags, um neue Verweisdaten für alle Mandanten bereitzustellen
Vorbereiten
Jede Mandantendatenbank enthält in der Tabelle VenueTypes
eine Gruppe von Veranstaltungsorttypen. Jeder Typ definiert eine bestimmte Art von Ereignissen, die an einem Veranstaltungsort präsentiert werden können. Diese Veranstaltungsorttypen entsprechen den Hintergrundbildern, die in der Mandantenereignis-App angezeigt werden. In dieser Übung stellen Sie eine Aktualisierung für alle Datenbanken bereit, wobei zwei weitere Veranstaltungsorttypen hinzugefügt werden: Motorcycle Racing und Swimming Club.
Prüfen Sie zunächst die in jeder Mandantendatenbank enthaltenen Veranstaltungsorttypen. Stellen Sie in SQL Server Management Studio (SSMS) eine Verbindung mit einer der Mandantendatenbanken her, und untersuchen Sie die Tabelle VenueTypes
. Sie können diese Tabelle auch im Azure-Portal im Abfrage-Editor abfragen, den Sie über die Seite „Datenbank“ aufrufen können.
- Öffnen Sie SSMS, und stellen Sie eine Verbindung mit den Mandantenserver her:
tenants1-dpt-<user>.database.windows.net
. - Um zu bestätigen, dass Motorcycle Racing und Swimming Club derzeit nicht enthalten sind, navigieren Sie zur Datenbank
contosoconcerthall
auf dem Servertenants1-dpt-<user>
, und fragen Sie die TabelleVenueTypes
ab.
Schritte
Nun erstellen Sie einen Auftrag zum Aktualisieren der Tabelle VenueTypes
(Veranstaltungsorttypen) in jeder Mandantendatenbank durch Hinzufügen der beiden neuen Veranstaltungsorttypen.
Zum Erstellen eines neuen Auftrags verwenden Sie die Gruppe der im System gespeicherten Auftragsprozeduren, die in der Datenbank jobagent
erstellt wurden. Die gespeicherten Prozeduren wurden beim Erstellen des Auftrags-Agents erstellt.
Stellen Sie in SSMS eine Verbindung mit den Mandantenserver her:
tenants1-mt-<user>.database.windows.net
.Navigieren Sie zur Datenbank
tenants1
.Fragen Sie die Tabelle
VenueTypes
ab, um sich zu überzeugen, dass Motorcycle Racing und Swimming Club noch nicht in der Ergebnisliste erscheinen.Stellen Sie eine Verbindung mit dem Katalogserver
catalog-mt-<user>.database.windows.net
her.Stellen Sie eine Verbindung zur Datenbank
jobagent
auf dem Katalogserver her.Öffnen Sie in SSMS die Datei …\Learning Modules\Schema Management\DeployReferenceData.sql.
Ändern Sie die Anweisung
set @User = <user>
, und ersetzen Sie den Wert von „User“ durch die oder den Benutzer*in, die/der beim Bereitstellen der mehrinstanzenfähigen Wingtip Tickets-SaaS-Datenbankanwendung verwendet wurde.Drücken Sie F5 , um das Skript auszuführen.
Beobachen
Beachten Sie die folgenden Elemente im Skript DeployReferenceData.sql:
sp_add_target_group erstellt den Zielgruppennamen DemoServerGroup und fügt Zielmember zur Gruppe hinzu.
sp_add_target_group_member fügt die folgenden Elemente hinzu:
- Einen Zielmembertyp server
- Dies ist der Server
tenants1-mt-<user>
, der die Mandantendatenbanken enthält. - Durch das Einschließen des Servers werden auch die Mandantendatenbanken einbezogen, die zum Zeitpunkt der Auftragsausführung vorhanden sind.
- Dies ist der Server
- Einen Zielmembertyp database für die Vorlagedatenbank (
basetenantdb
), die sich auf dem Servercatalog-mt-<user>
befindet - Einen Zielmembertyp database, der die in einem späteren Tutorial verwendete Datenbank
adhocreporting
enthält
- Einen Zielmembertyp server
sp_add_job erstellt einen Auftrag mit dem Namen Reference Data Deployment(Verweisdatenbereitstellung).
sp_add_jobstep erstellt den Auftragsschritt mit dem T-SQL-Befehlstext zum Aktualisieren der Verweistabelle
VenueTypes
.Die übrigen Ansichten im Skript zeigen das Vorhandensein der Objekte an und überwachen die Auftragsausführung. Verwenden Sie diese Abfragen, um den Statuswert in der Spalte lifecycle zu überprüfen und zu ermitteln, wann der Auftrag abgeschlossen wurde. Der Auftrag aktualisiert die Mandantendatenbank und die zwei weiteren Datenbanken mit der Verweistabelle.
Wechseln Sie in SSMS zur Mandantendatenbank auf dem Server tenants1-mt-<user>
. Fragen Sie die Tabelle VenueTypes
ab, um sich zu überzeugen, dass Motorcycle Racing und Swimming Club jetzt der Tabelle hinzugefügt wurden. Die Gesamtzahl der Veranstaltungsorttypen sollte um zwei gestiegen sein.
Erstellen eines Auftrags zum Verwalten des Index der Verweistabelle
In dieser Übung wird ein Auftrag erstellt, um den Index für den Primärschlüssel der Verweistabelle neu zu erstellen. Eine Indexneuerstellung ist ein typischer Datenbankverwaltungsvorgang, den Administratoren nach dem Laden großer Datenmengen ausführen, um die Leistung zu verbessern.
Stellen Sie in SSMS eine Verbindung mit der
jobagent
-Datenbank auf dem Servercatalog-mt-<user>.database.windows.net
her.Öffnen Sie die Datei …\Learning Modules\Schema Management\OnlineReindex.sqlin SSMS.
Drücken Sie F5 , um das Skript auszuführen.
Beobachen
Beachten Sie folgende Elemente im Skript OnlineReindex.sql:
sp_add_job
erstellt einen neuen Auftrag mit dem Namen Online Reindex PK__VenueTyp__265E44FD7FD4C885.sp_add_jobstep
erstellt den Auftragsschritt mit dem T-SQL-Befehlstext zum Aktualisieren des Index.Die verbleibenden Ansichten im Skript überwachen die Auftragsausführung. Verwenden Sie diese Abfragen, um den Statuswert in der
lifecycle
-Spalte zu überprüfen und zu ermitteln, wann der Auftrag für alle Zielgruppenelemente erfolgreich abgeschlossen wurde.
Zusätzliche Ressourcen
Nächste Schritte
In diesem Tutorial haben Sie Folgendes gelernt:
- Erstellen eines Auftrags-Agents zum datenbankübergreifenden Ausführen von T-SQL-Aufträgen
- Aktualisieren von Verweisdaten in allen Mandantendatenbanken
- Erstellen eines Index für eine Tabelle in allen Mandantendatenbanken
Absolvieren Sie als Nächstes das Tutorial Ad-hoc-Berichterstellung, um das Ausführen verteilter Abfragen über Mandantendatenbanken hinweg zu untersuchen.