Delen via


Aanbevolen procedures voor Azure SQL Data Sync

Van toepassing op: Azure SQL Database

In dit artikel worden de aanbevolen procedures voor Azure SQL Data Sync beschreven.

Zie Gegevens synchroniseren tussen meerdere cloud- en on-premises databases met SQL Data Sync voor een overzicht van SQL Data Sync.

Belangrijk

Azure SQL Data Sync biedt momenteel geen ondersteuning voor Azure SQL Managed Instance of Azure Synapse Analytics.

Beveiliging en betrouwbaarheid

Clientagent

  • Installeer de clientagent met behulp van het gebruikersaccount met minimale bevoegdheden dat toegang heeft tot de netwerkservice.
  • Installeer de clientagent op een server die verschilt van de locatie waarop SQL Server is geïnstalleerd.
  • Registreer geen on-premises database met meer dan één agent.
    • Vermijd dit, zelfs als u verschillende tabellen synchroniseert voor verschillende synchronisatiegroepen.
    • Het registreren van een on-premises database met meerdere clientagents brengt uitdagingen met zich mee wanneer u een van de synchronisatiegroepen verwijdert.

Databaseaccounts met minimaal vereiste bevoegdheden

  • Voor synchronisatie-instellingen:

    • SQL Server-machtigingen: CREATE/ALTER TABLE, ALTER DATABASE, CREATE PROCEDURE, SELECT/ALTER SCHEMA, CREATE TYPE. Deze machtigingen zijn opgenomen (samen met andere machtigingen) in de ingebouwde databaserol ddl_admin.
    • Op het niveau van de resourcegroep is het lidmaatschap van de rol Inzender voor SQL DB nodig. Zie Azure-rollen toewijzen met behulp van Azure Portal voor meer informatie. Lidmaatschap van bredere rollen, zoals Inzender of Eigenaar, als deze al is toegewezen.
    • Machtigingen op abonnementsniveau hoeven niet nodig te zijn, maar kunnen een vereenvoudigde (maar niet minst vereiste) manier bieden om de benodigde machtigingen te bieden voor meerdere Azure Data Sync-implementaties in een abonnement. Een oorspronkelijke, afgeschafte API vereist deze Azure RBAC-machtigingen, maar mag niet meer worden gebruikt.
      • "Microsoft.Sql/locations/syncMemberOperationResults/read"
      • "Microsoft.Sql/locations/syncAgentOperationResults/read"
      • "Microsoft.Sql/locations/syncGroupOperationResults/read"
  • Voor doorlopende synchronisatie.

    • SQL Server-machtigingen: SELECTEER, INSERT, UPDATE en DELETE-machtiging voor gebruikerstabellen die zijn geselecteerd voor synchronisatie. EXECUTE-machtiging voor door de gebruiker gedefinieerde tabeltypen.
    • SQL Server-machtigingen: SELECT, INSERT, UPDATE en DELETE-machtiging voor synchronisatiemetagegevens en door het systeem gemaakte traceringstabellen. EXECUTE-machtiging voor opgeslagen procedures die door de service zijn gemaakt.
      • Het DataSync schema wordt gebruikt voor door het systeem gemaakte objecten in de hub- en liddatabases.
      • De dss en TaskHosting schema's worden gebruikt voor door het systeem gemaakte objecten in de database met synchronisatiemetagegevens.
  • Voor het ongedaan maken van de inrichting.

    • SQL Server-machtigingen: ALTER on all tables part of sync; SELECT en DELETE bij synchronisatiemetagegevenstabellen; CONTROL voor synchronisatietraceringstabellen, opgeslagen procedures en door de gebruiker gedefinieerde typen.
    • Voor het opschonen verwijdert u door het systeem gemaakte objecten in de DataSyncen dssTaskHosting schema's.

Azure SQL Database ondersteunt slechts één set referenties. Als u deze taken binnen deze beperking wilt uitvoeren, kunt u de volgende opties overwegen:

  • Wijzig de referenties voor verschillende fasen (bijvoorbeeld referenties1 voor installatie en referenties2 voor doorlopend).
  • Wijzig de machtiging van de referenties (wijzig de machtiging nadat de synchronisatie is ingesteld).

Controle

Het wordt aanbevolen om controle in te schakelen op het niveau van de databases in de synchronisatiegroepen. Meer informatie over het inschakelen van controle in uw Azure SQL-database of het inschakelen van controle op uw SQL Server-database.

Instellingen

Overwegingen en beperkingen voor databases

Databaseomvang

Wanneer u een nieuwe database maakt, stelt u de maximale grootte in, zodat deze altijd groter is dan de database die u implementeert. Als u de maximale grootte niet instelt op groter dan de geïmplementeerde database, mislukt de synchronisatie. Hoewel SQL Data Sync geen automatische groei biedt, kunt u de ALTER DATABASE opdracht uitvoeren om de grootte van de database te vergroten nadat deze is gemaakt. Zorg ervoor dat u binnen de limieten van de databasegrootte blijft.

Belangrijk

SQL Data Sync slaat extra metagegevens op voor elke database. Zorg ervoor dat u rekening houdt met deze metagegevens wanneer u de benodigde ruimte berekent. De hoeveelheid extra overhead is gerelateerd aan de breedte van de tabellen (bijvoorbeeld smalle tabellen vereisen meer overhead) en de hoeveelheid verkeer.

Overwegingen en beperkingen voor tabellen

Tabellen selecteren

U hoeft niet alle tabellen in een database in een synchronisatiegroep op te nemen. De tabellen die u in een synchronisatiegroep opneemt, zijn van invloed op efficiëntie en kosten. Neem tabellen op en de tabellen waarvoor ze afhankelijk zijn, alleen in een synchronisatiegroep als dat nodig is voor het bedrijf.

Primaire sleutels

Elke tabel in een synchronisatiegroep moet een primaire sleutel hebben. SQL Data Sync kan geen tabel synchroniseren die geen primaire sleutel heeft.

Voordat u SQL Data Sync in productie gebruikt, test u de initiële en doorlopende synchronisatieprestaties.

Lege tabellen bieden de beste prestaties

Lege tabellen bieden de beste prestaties tijdens de initialisatie. Als de doeltabel leeg is, gebruikt Data Sync bulksgewijs invoegen om de gegevens te laden. Anders voert Data Sync een vergelijking en invoeging van rijen uit om te controleren op conflicten. Als de prestaties echter geen probleem zijn, kunt u synchronisatie instellen tussen tabellen die al gegevens bevatten.

Doeldatabases inrichten

SQL Data Sync biedt eenvoudige automatische inrichting van databases.

In deze sectie worden de beperkingen van het inrichten in SQL Data Sync beschreven.

Beperkingen voor automatisch inrichten

SQL Data Sync heeft de volgende beperkingen voor automatisch inrichten:

  • Selecteer alleen de kolommen die zijn gemaakt in de doeltabel. Kolommen die geen deel uitmaken van de synchronisatiegroep, worden niet ingericht in de doeltabellen.
  • Indexen worden alleen gemaakt voor geselecteerde kolommen. Als de brontabelindex kolommen bevat die geen deel uitmaken van de synchronisatiegroep, worden deze indexen niet ingericht in de doeltabellen.
  • Indexen voor XML-typekolommen worden niet ingericht.
  • Data Sync ondersteunt alleen de volgende twee indexeigenschappen: uniek, gegroepeerd/niet-geclusterd. Andere eigenschappen van index zoals IGNORE_DUP_KEY, waarbij filterpredicaat enzovoort niet wordt ondersteund en de doelindex wordt ingericht zonder deze eigenschappen, zelfs als de bronindex deze eigenschappen heeft ingesteld.
  • CHECK-beperkingen zijn niet ingericht.
  • Bestaande triggers in de brontabellen worden niet ingericht.
  • Weergaven en opgeslagen procedures worden niet gemaakt in de doeldatabase.
  • BIJ UPDATE CASCADE en ON DELETE CASCADE worden acties voor externe-sleutelbeperkingen niet opnieuw gemaakt in de doeltabellen.
  • Als u decimale of numerieke kolommen hebt met een precisie die groter is dan 28, kan SQL Data Sync tijdens de synchronisatie een conversieoverloopprobleem ondervinden. U wordt aangeraden de precisie van decimale of numerieke kolommen te beperken tot 28 of minder.

Aanbevelingen

  • Gebruik de functie voor automatische inrichting van SQL Data Sync alleen wanneer u de service probeert uit te proberen.
  • Richt voor productie het databaseschema in.

Waar vind ik de hubdatabase?

Enterprise-to-cloud-scenario

Als u de latentie wilt minimaliseren, houdt u de hubdatabase dicht bij de grootste concentratie van het databaseverkeer van de synchronisatiegroep.

Cloud-naar-cloudscenario

  • Wanneer alle databases in een synchronisatiegroep zich in één datacenter bevinden, moet de hub zich in hetzelfde datacenter bevinden. Deze configuratie vermindert de latentie en de kosten van gegevensoverdracht tussen datacenters.
  • Wanneer de databases in een synchronisatiegroep zich in meerdere datacenters bevinden, moet de hub zich in hetzelfde datacenter bevinden als het merendeel van de databases en het databaseverkeer.

Gemengde scenario's

Pas de voorgaande richtlijnen toe op complexe configuraties van synchronisatiegroepen, zoals configuraties die een combinatie zijn van bedrijfs-naar-cloud- en cloud-naar-cloudscenario's.

Sync

Vermijd trage en kostbare initiële synchronisatie

In deze sectie bespreken we de eerste synchronisatie van een synchronisatiegroep. Leer hoe u kunt voorkomen dat een initiële synchronisatie langer duurt en duurder is dan nodig is.

Hoe initiële synchronisatie werkt

Wanneer u een synchronisatiegroep maakt, begint u met gegevens in slechts één database. Als u gegevens in meerdere databases hebt, beschouwt SQL Data Sync elke rij als een conflict dat moet worden opgelost. Deze conflictoplossing zorgt ervoor dat de eerste synchronisatie langzaam verloopt. Als u gegevens in meerdere databases hebt, kan de eerste synchronisatie enkele dagen tot enkele maanden duren, afhankelijk van de grootte van de database.

Als de databases zich in verschillende datacenters bevinden, moet elke rij tussen de verschillende datacenters reizen. Hierdoor worden de kosten van een eerste synchronisatie verhoogd.

Aanbeveling

Begin indien mogelijk met gegevens in slechts één van de databases van de synchronisatiegroep.

Ontwerpen om synchronisatielussen te voorkomen

Er treedt een synchronisatielus op wanneer er kringverwijzingen binnen een synchronisatiegroep zijn. In dat scenario wordt elke wijziging in één database eindeloos en circulair gerepliceerd via de databases in de synchronisatiegroep.

Zorg ervoor dat u synchronisatielussen vermijdt, omdat deze prestatievermindering veroorzaken en de kosten aanzienlijk kunnen verhogen.

Wijzigingen die niet kunnen worden doorgegeven

Redenen waarom wijzigingen niet kunnen worden doorgegeven

Wijzigingen kunnen om een van de volgende redenen niet worden doorgegeven:

  • Incompatibiliteit van schema/gegevenstype.
  • Null invoegen in niet-null-kolommen.
  • Beperkingen van refererende sleutels schenden.

Wat gebeurt er wanneer wijzigingen niet worden doorgegeven?

  • Synchronisatiegroep geeft aan dat deze de status Waarschuwing heeft.
  • Details worden weergegeven in de logboekviewer van de gebruikersinterface van de portal.
  • Als het probleem 45 dagen niet is opgelost, wordt de database verouderd.

Notitie

Deze wijzigingen worden nooit doorgevoerd. De enige manier om in dit scenario te herstellen, is door de synchronisatiegroep opnieuw te maken.

Aanbeveling

Controleer regelmatig de synchronisatiegroep en databasestatus via de portal en de logboekinterface.

Onderhoud

Verouderde databases en synchronisatiegroepen voorkomen

Een synchronisatiegroep of een database in een synchronisatiegroep kan verouderd raken. Wanneer de status van een synchronisatiegroep verouderd is, werkt deze niet meer. Wanneer de status van een database verouderd is, gaan gegevens mogelijk verloren. Het is raadzaam om dit scenario te vermijden in plaats van te proberen om ermee te herstellen.

Verouderde databases voorkomen

De status van een database is ingesteld op Verouderd wanneer deze 45 dagen of langer offline is geweest. Als u een verouderde status van een database wilt voorkomen, moet u ervoor zorgen dat geen van de databases 45 dagen of langer offline is.

Verouderde synchronisatiegroepen voorkomen

De status van een synchronisatiegroep is ingesteld op Verouderd wanneer een wijziging in de synchronisatiegroep gedurende 45 dagen of langer niet kan worden doorgegeven aan de rest van de synchronisatiegroep. Als u een verouderde status voor een synchronisatiegroep wilt voorkomen, controleert u regelmatig het geschiedenislogboek van de synchronisatiegroep. Zorg ervoor dat alle conflicten zijn opgelost en dat wijzigingen zijn doorgevoerd in de databases van de synchronisatiegroep.

Een synchronisatiegroep kan een wijziging om een van deze redenen niet toepassen:

  • Schema-incompatibiliteit tussen tabellen.
  • Gegevenscompatibiliteit tussen tabellen.
  • Het invoegen van een rij met een null-waarde in een kolom die geen null-waarden toestaat.
  • Een rij bijwerken met een waarde die een beperking voor refererende sleutels schendt.

Verouderde synchronisatiegroepen voorkomen:

  • Werk het schema bij om de waarden in de mislukte rijen toe te staan.
  • Werk de refererende-sleutelwaarden bij om de waarden op te nemen die zijn opgenomen in de mislukte rijen.
  • Werk de gegevenswaarden in de mislukte rij bij, zodat ze compatibel zijn met het schema of de refererende sleutels in de doeldatabase.

Problemen met het ongedaan maken van de inrichting voorkomen

In sommige gevallen kan het ongedaan maken van de registratie van een database met een clientagent ertoe leiden dat synchronisatie mislukt.

Scenario

  1. Synchronisatiegroep A is gemaakt met behulp van een SQL Database-exemplaar en een SQL Server-database, die is gekoppeld aan lokale agent 1.
  2. Dezelfde on-premises database wordt geregistreerd bij lokale agent 2 (deze agent is niet gekoppeld aan een synchronisatiegroep).
  3. Als u de registratie van de on-premises database bij lokale agent 2 ongedaan wilt maken, worden de tracerings- en metatabellen voor synchronisatiegroep A voor de on-premises database verwijderd.
  4. Synchronisatiegroep A mislukt, met deze fout: 'De huidige bewerking kan niet worden voltooid omdat de database niet is ingericht voor synchronisatie of u beschikt niet over machtigingen voor de synchronisatieconfiguratietabellen.'

Oplossing

Als u dit scenario wilt voorkomen, moet u geen database met meer dan één agent registreren.

Ga als volgt te werk om te herstellen uit dit scenario:

  1. Verwijder de database uit elke synchronisatiegroep waartoe deze behoort.
  2. Voeg de database weer toe aan elke synchronisatiegroep waaruit u deze hebt verwijderd.
  3. Implementeer elke betrokken synchronisatiegroep (deze actie richt de database in).

Een synchronisatiegroep wijzigen

Probeer geen database uit een synchronisatiegroep te verwijderen en bewerk vervolgens de synchronisatiegroep zonder eerst een van de wijzigingen te implementeren.

Verwijder in plaats daarvan eerst een database uit een synchronisatiegroep. Implementeer vervolgens de wijziging en wacht tot het ongedaan maken van de inrichting is voltooid. Wanneer het ongedaan maken van de inrichting is voltooid, kunt u de synchronisatiegroep bewerken en de wijzigingen implementeren.

Als u probeert een database te verwijderen en vervolgens een synchronisatiegroep te bewerken zonder eerst een van de wijzigingen te implementeren, mislukt een of meer bewerkingen. De portalinterface kan inconsistent worden. Als dit gebeurt, vernieuwt u de pagina om de juiste status te herstellen.

Time-out voor schemavernieuwing voorkomen

Als u een complex schema hebt dat moet worden gesynchroniseerd, kan er een time-out voor bewerkingen optreden tijdens het vernieuwen van een schema als de database met synchronisatiemetagegevens een lagere SKU heeft (bijvoorbeeld: basic).

Oplossing

U kunt dit probleem oplossen door uw databasebronnen voor synchronisatiemetagegevens op te schalen.

Volgende stappen

Zie de volgende onderwerpen voor meer informatie over SQL Data Sync:

Meer informatie over SQL Database vindt u in: