Delen via


Schema beheren in een SaaS-toepassing met behulp van het database-per-tenant-patroon met Azure SQL Database

Van toepassing op: Azure SQL Database

Naarmate een databasetoepassing evolueert, moeten er onvermijdelijk wijzigingen worden aangebracht in het databaseschema of de referentiegegevens. Onderhoudstaken voor de database zijn ook regelmatig nodig. Als u een toepassing wilt beheren die gebruikmaakt van het database-per-tenant-patroon, moet u deze wijzigingen of onderhoudstaken toepassen op een fleet van tenantdatabases.

In deze zelfstudie worden twee scenario's beschreven: referentiegegevensupdates implementeren voor alle tenants en een opnieuw index bouwen van de tabel met de referentiegegevens. De functie Elastische taken wordt gebruikt om deze acties uit te voeren voor alle tenantdatabases, en voor de sjabloondatabase die gebruikt wordt om nieuwe tenantdatabases te maken.

In deze zelfstudie leert u het volgende:

  • Een taakagent maken
  • Ervoor zorgen dat T-SQL-taken worden uitgevoerd op alle tenantdatabases
  • Referentiegegevens in alle tenantdatabases bijwerken
  • Een index in een tabel maken in alle tenantdatabases

Voor het voltooien van deze zelfstudie moet u ervoor zorgen dat aan de volgende vereisten wordt voldaan:

Kennismaking met patronen voor SaaS-schemabeheer

Het database-per-tenant-patroon isoleert tenantgegevens effectief, maar verhoogt het aantal databases dat beheerd en onderhouden moet worden. Elastische taken vereenvoudigt het onderhoud en het beheer van meerdere databases. Met Elastische taken kunt u veilig en betrouwbaar taken uitvoeren (T-SQL-scripts) voor een groep databases. Taken kunnen wijzigingen in het schema en in de algemene referentiegegevens implementeren voor alle tenantdatabases in een toepassing. Elastische taken kan ook worden gebruikt om een sjabloon van de gebruikte database op te slaan voor het maken van nieuwe tenants. Op die manier beschikken deze altijd over het nieuwste schema en de meest recente referentiegegevens.

screen

Openbare preview Elastische taken

Er is een nieuwe versie beschikbaar van Elastische taken; dit is nu een ingebouwde functie in Azure SQL Database. Van deze nieuwe versie van Elastische taken is momenteel een openbare preview beschikbaar. Deze openbare preview biedt ondersteuning voor PowerShell voor het maken van een taakagent en voor T-SQL voor het maken en beheren van taken. Raadpleeg het artikel over Elastic Database-taken voor meer informatie.

De Wingtip Tickets-SaaS-database-per-tenant-toepassingsscripts ophalen

De broncode en beheerscripts van de app zijn beschikbaar in de GitHub-opslagplaats WingtipTicketsSaaS-DbPerTenant. Bekijk de algemene richtlijnen voor stappen voor het downloaden en het deblokkeren van de Wingtip Tickets-SaaS-scripts.

Een taakagentdatabase en een nieuwe taakagent maken

In deze zelfstudie moet u PowerShell gebruiken om een taakagent en de achterliggende taakagentdatabase te maken. De taakagentdatabase bevat taakdefinities, de taakstatus en de geschiedenis. Wanneer de taakagent en de database zijn gemaakt, kunt u direct aan de slag met het maken en bewaken van taken.

  1. Open in PowerShell ISE ...\Learning Modules\Schema Management\Demo-SchemaManagement.ps1.
  2. Druk op F5 om het script uit te voeren.

Met het script Demo-SchemaManagement.ps1 wordt het script Deploy-SchemaManagement.ps1 aangeroepen om op de catalogusserver een database te maken met de naam osagent. Vervolgens wordt de taakagent gemaakt met behulp van de database als een parameter.

Een taak maken om nieuwe referentiegegevens te implementeren voor alle tenants

In de Wingtip tickets-app bevat elke tenantdatabase een set ondersteunde locatietypen. Elke locatie behoort tot een specifiek locatietype, dat bepaalt welke soorten gebeurtenissen er kunnen worden gehouden, en de achtergrondafbeelding gebruikt in de app. Deze referentiegegevens moeten worden bijgewerkt en nieuwe locatietypen worden toegevoegd zodat de toepassing nieuwe soorten gebeurtenissen kan ondersteunen. In deze oefening implementeert u een update voor alle tenantdatabases waarbij twee nieuwe locatietypen worden toegevoegd: Motorcycle Racing en Swimming Club.

Controleer eerst de locatietypen die zijn opgenomen in elke tenantdatabase. Maak verbinding met een van de tenantdatabases in SQL Server Management Studio (SSMS) en inspecteer de tabel VenueTypes. U kunt ook een query uitvoeren op deze tabel in de Query-editor in het Azure-portaal, toegankelijk vanaf de databasepagina.

  1. Open SSMS en maak verbinding met de tenantserver: tenants1-dpt-<user>.database.windows.net
  2. Om te bevestigen dat Motorcycle Racing en Swimming Clubmomenteel niet zijn opgenomen, bladert u naar de contosoconcerthall-database op de tenants1-dpt-user-server<> en voert u een query uit op de tabel VenueTypes.

We gaan nu een taak maken om de tabel VenueTypes in alle tenantdatabases bij te werken om de nieuwe locatietypen toe te voegen.

Voor het maken van een nieuwe taak gebruikt u een reeks in het systeem opgeslagen procedures uit de taakagent-database die is gemaakt tijdens het maken van het taakagent.

  1. Maak in SSMS verbinding met de catalogusserver: server catalog-dpt-<user>.database.windows.net
  2. Open in SSMS het bestand ...\Learning Modules\Schema Management\DeployReferenceData.sql
  3. Wijzig de instructie: SET @wtpUser = <gebruiker> en vervang de gebruikerswaarde die wordt gebruikt bij het implementeren van de Wingtip Tickets SaaS Database Per Tenant-app
  4. Zorg dat u verbinding hebt met de jobagent-database en druk op F5 om het script uit te voeren

Bekijk de volgende elementen in het script DeployReferenceData.sql:

  • sp_add_target_group maakt de doelgroepnaam DemoServerGroup.
  • sp_add_target_group_member wordt gebruikt om de set doeldatabases te definiëren. Eerst wordt de server tenants1-dpt-<user> toegevoegd. De server toevoegen als een doel zorgt ervoor de databases op die server op de moment van de taakuitvoering worden opgenomen in de taak. Vervolgens worden de database basetenantdb en de database adhocreporting (gebruikt in een latere zelfstudie) als doelen toegevoegd.
  • sp_add_job maakt een taak met de naam Reference Data Deployment.
  • sp_add_jobstep maakt de taakstap met T-SQL-opdrachttekst om de referentietabel VenueTypes bij te werken.
  • De resterende weergaven in het script tonen het bestaan van de objecten en controleren de taakuitvoering. Gebruik deze query's om de statuswaarde in de kolom levenscyclus te controleren om te bepalen wanneer de taak is voltooid voor alle doeldatabases.

Zodra het script is voltooid, kunt u controleren of de referentiegegevens zijn bijgewerkt. Ga in SSMS naar de database contosoconcerthall op de server tenants1-dpt-<user> en voer een query uit op de tabel VenueTypes. Controleer of Motor Racing en Swimming Clubnu aanwezig zijn .

Een taak maken voor het beheren van de referentietabelindex

In deze oefening wordt een taak gebruikt om de index opnieuw samen te stellen op de primaire sleutel van de referentietabel. Dit is een typische bewerking voor het onderhoud van een database, die kan plaatsvinden nadat grote hoeveelheden gegevens geladen zijn.

Maak een taak met dezelfde in het systeem opgeslagen procedures.

  1. Open SSMS en maak verbinding met de server catalog-dpt-<user>.database.windows.net
  2. Open het bestand ...\Learning Modules\Schema Management\OnlineReindex.sql
  3. Klik met de rechtermuisknop, selecteer Verbinding en maak verbinding met de server catalog-dpt-user.database.windows.net<>, als deze nog niet is verbonden
  4. Zorg dat u verbinding hebt met de jobagent-database en druk op F5 om het script uit te voeren

Bekijk de volgende elementen in het script OnlineReindex.sql:

  • sp_add_job maakt een nieuwe taak met de naam 'Online opnieuw indexeren PK__VenueTyp__265E44FD7FD4C885'
  • sp_add_jobstep maakt de taakstap met T-SQL-opdrachttekst om de index bij te werken
  • De resterende weergaven van de script controleren taakuitvoering. Gebruik deze query's om de statuswaarde in de kolom levenscyclus te controleren om te bepalen wanneer de taak is voltooid voor alle groepsleden.

Volgende stappen

In deze zelfstudie hebt u het volgende geleerd:

  • Een taakagent maken om uit te voeren op T-SQL-taken op meerdere databases
  • Referentiegegevens in alle tenantdatabases bijwerken
  • Een index in een tabel maken in alle tenantdatabases

Probeer vervolgens de zelfstudie Ad-hoc uit om te ontdekken hoe u gedistribueerde query's kunt uitvoeren op tenantdatabases.

Aanvullende bronnen