Delen via


Schema beheren in een SaaS-toepassing die gebruikmaakt van Shard-databases met meerdere tenants

Van toepassing op: Azure SQL Database

In deze zelfstudie wordt besproken welke de uitdagingen zijn om een reeks databases te onderhouden in een SaaS-toepassing (Software as a Service). Oplossingen worden gedemonstreerd om schemawijzigingen uit te waaieren voor de reeks databases.

Net als elke toepassing verandert de Wingtip Tickets SaaS-app na verloop van tijd, en moeten er wijzigingen worden aangebracht aan de database. Wijzigingen kunnen van invloed zijn op schema- of referentiegegevens of om onderhoudstaken voor de database toe te passen. Met een SaaS-toepassing die gebruikmaakt van een database-per-tenant-patroon, moeten de wijzigingen mogelijk worden gecoördineerd voor een enorm aantal tenantdatabases. Daarnaast moet u deze wijzigingen opnemen in het inrichtingsproces voor de database om ervoor ze zorgen dat ze worden opgenomen in nieuwe databases wanneer deze worden aangemaakt.

Twee scenario's

In deze zelfstudie worden de volgende twee scenario's besproken:

  • Updates voor referentiegegevens implementeren voor alle tenants.
  • Een index opnieuw samenstellen voor de tabel die de referentiegegevens bevat.

De functie Elastische taken van Azure SQL Database wordt gebruikt om deze bewerkingen uit te voeren in de tenantdatabases. De taken worden ook toegepast op de 'sjabloon'-tenantdatabase. In de Wingtip Tickets-voorbeeldapp wordt deze sjabloondatabase gekopieerd om een nieuwe tenantdatabase in te richten.

In deze zelfstudie leert u het volgende:

  • Een taakagent maken.
  • Een T-SQL-query uitvoeren op meerdere tenantdatabases.
  • Referentiegegevens in alle tenantdatabases bijwerken.
  • Een index in een tabel maken in alle tenantdatabases.

Vereisten

Notitie

In deze zelfstudie wordt gebruikgemaakt van de functies van de Azure SQL Database-service die deel uitmaken van een beperkte preview (Elastische databasetaken). Als u deze zelfstudie wilt volgen, stuurt u uw abonnements-id naar SaaSFeedback@microsoft.com, met als onderwerp 'Elastic Jobs Preview'. Wanneer u de bevestiging hebt ontvangen dat uw abonnement is ingeschakeld, downloadt en installeert u de taak-cmdlets van de voorlopige versie. Deze preview is beperkt, neem dus contact op met SaaSFeedback@microsoft.com voor gerelateerde vragen of ondersteuning.

Kennismaking met patronen voor SaaS-schemabeheer

Met het het sharddatabasemodel voor meerdere tenants dat in dit voorbeeld wordt gebruikt, kan een tenantsdatabase een of meer tenants bevatten. In dit voorbeeld wordt gebruikgemaakt van een combinatie van databases met veel tenants en databases met één tenant, waardoor een hybride model voor tenantbeheer mogelijk is. Wijzigingen beheren in deze databases kan moeilijk zijn. Elastische taken vereenvoudigt het onderhoud en het beheer van grote aantallen databases. Met Elastische taken kunt u veilig en betrouwbaar Transact-SQL-scripts als taken uitvoeren voor een groep tenantdatabases. De taken staan los van gebruikersinteractie of invoer. Deze methode kan worden gebruikt om wijzigingen in het schema of in de algemene referentiegegevens te implementeren voor alle tenants in een toepassing. Elastische taken kan ook worden gebruikt voor het onderhouden van een gouden sjabloon voor de database. De sjabloon wordt gebruikt om nieuwe tenants te maken, zodat altijd het meest recente schema- en de referentiegegevens worden gebruikt.

screen

Beperkte preview voor 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 beperkte preview beschikbaar. Deze beperkte preview biedt ondersteuning voor PowerShell voor het maken van een taakagent en voor T-SQL voor het maken en beheren van taken.

Notitie

In deze zelfstudie wordt gebruikgemaakt van de functies van de SQL Database-service die deel uitmaken van een beperkte preview (elastische databasetaken). Als u deze zelfstudie wilt volgen, stuurt u uw abonnements-id naar SaaSFeedback@microsoft.com, met als onderwerp 'Elastic Jobs Preview'. Wanneer u de bevestiging hebt ontvangen dat uw abonnement is ingeschakeld, downloadt en installeert u de taak-cmdlets van de voorlopige versie. Deze preview is beperkt, neem dus contact op met SaaSFeedback@microsoft.com voor gerelateerde vragen of ondersteuning.

De broncode en scripts van de Wingtip Tickets SaaS-databasetoepassing downloaden

De Wingtip Tickets SaaS-multitenantdatabasescripts en broncode van de toepassing zijn beschikbaar in de WingtipTicketsSaaS-MultitenantDB-opslagplaats in GitHub. Raadpleeg de algemene richtlijnen voor stappen voor het downloaden en deblokkeren van de scripts voor de SaaS-app Wingtip Tickets.

Een taakagentdatabase en een nieuwe taakagent maken

In deze zelfstudie moet u PowerShell gebruiken om de taakagentdatabase en het taakagent te maken. Net als de msdb database die door SQL Agent wordt gebruikt, gebruikt een taakagent een database in Azure SQL Database om taakdefinities, taakstatus en geschiedenis op te slaan. Nadat de taakagent is 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.

Het script Demo-SchemaManagement.ps1 roept het script Deploy-SchemaManagement.ps1 aan om een database te maken met de naam jobagent op de catalogusserver. Het script maakt vervolgens de taakagent en geeft de jobagent database door als parameter.

Een taak maken om nieuwe referentiegegevens te implementeren voor alle tenants

Voorbereiden

De database van elke tenant bevat een set locatietypen in de VenueTypes tabel. Elk locatietype definieert het soort gebeurtenissen dat kan worden gehouden op een locatie. Deze locatietypen sluiten aan op de achtergrondafbeeldingen die u in de app voor tenantevenementen ziet. In deze oefening implementeert u een update voor alle databases om twee extra locatietypen toe te voegen: 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 VenueTypes tabel. 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. Als u wilt 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 VenueTypes tabel.

Stappen

U maakt nu een taak om de VenueTypes tabel in elke tenantdatabase bij te werken door de twee nieuwe locatietypen toe te voegen.

Als u een nieuwe taak wilt maken, gebruikt u de set opgeslagen procedures voor taken die in de jobagent database zijn gemaakt. De opgeslagen procedures zijn aangemaakt toen de taakagent werd gemaakt.

  1. Maak in SSMS verbinding met de tenantserver: tenants1-mt-<user>.database.windows.net.

  2. Blader naar de tenants1 database.

  3. Voer een query uit in de VenueTypes tabel om te bevestigen dat Motorcycle Racing en Swimming Club nog niet in de lijst met resultaten staan.

  4. Maak verbinding met de catalogusserver.catalog-mt-<user>.database.windows.net

  5. Maak verbinding met de jobagent database op de catalogusserver.

  6. Open in SSMS het bestand ...\Learning Modules\Schema Management\DeployReferenceData.sql.

  7. Wijzig de instructie: set @User = <user> en vervang de gebruikerswaarde die wordt gebruikt bij het implementeren van de Wingtip Tickets SaaS Multitenant Database-toepassing.

  8. Druk op F5 om het script uit te voeren.

Bekijk

Bekijk de volgende items in het script DeployReferenceData.sql:

  • sp_add_target_group maakt de doelgroepnaam DemoServerGroup en voegt doelleden toe aan de groep.

  • sp_add_target_group_member voegt de volgende items toe:

    • Een doelgroeplid an het type server.
      • Dit is de tenants1-mt-<user> server die de tenantdatabases bevat.
      • Door de server op te nemen, neemt u ook de tenantdatabases op die bestaan op het moment dat de taak wordt uitgevoerd.
    • Een databasedoellidtype voor de sjabloondatabase (basetenantdb) die zich op catalog-mt-<user> de server bevindt,
    • Een databasedoellidtype om de adhocreporting database op te nemen die in een latere zelfstudie wordt gebruikt.
  • 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 bij te werken. VenueTypes

  • 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. Met de taak wordt de tenantsdatabase bijgewerkt en worden de twee aanvullende databases die de referentietabel bevatten bijgewerkt.

Blader in SSMS naar de tenantdatabase op de tenants1-mt-<user> server. Voer een query uit op de VenueTypes tabel om te bevestigen dat Motorcycle Racing en Swimming Club nu aan de tabel zijn toegevoegd. Het totale aantal locatietypen moet met twee worden verhoogd.

Een taak maken voor het beheren van de referentietabelindex

In deze oefening wordt een taak gemaakt om de index opnieuw samen te stellen op de primaire sleutel van de referentietabel voor alle tenantdatabases. Het opnieuw opbouwen van een index is een typische bewerking voor databasebeheer die een beheerder kan uitvoeren nadat een grote hoeveelheid gegevens zijn geladen om de prestaties te verbeteren.

  1. Maak in SSMS verbinding met jobagent de database op de catalog-mt-<user>.database.windows.net server.

  2. Open in SSMS ...\Learning Modules\Schema Management\OnlineReindex.sql.

  3. Druk op F5 om het script uit te voeren.

Bekijk

Bekijk de volgende items 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 lifecycle kolom te controleren om te bepalen wanneer de taak is voltooid voor alle leden van de doelgroep.

Aanvullende bronnen

Volgende stappen

In deze zelfstudie hebt u het volgende geleerd:

  • Een taakagent maken om T-SQL-taken uit te voeren 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.