Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Wanneer u een publicatie maakt, kiest u de tabellen en andere databaseobjecten die u wilt publiceren. U kunt de volgende databaseobjecten publiceren met behulp van replicatie.
| Databaseobject | Momentopnamereplicatie en transactionele replicatie | Samengevoegde replicatie |
|---|---|---|
| Tables | X | X |
| Gepartitioneerde tabellen | X | X |
| Opgeslagen procedures : definitie (Transact-SQL en CLR) | X | X |
| Opgeslagen procedures : uitvoering (Transact-SQL en CLR) | X | no |
| Views | X | X |
| Geïndexeerde weergaven | X | X |
| Geïndexeerde weergaven als tabellen | X | no |
| User-Defined typen (CLR) | X | X |
| User-Defined Functions (Transact-SQL en CLR) | X | X |
| Aliasgegevenstypen | X | X |
| Indexen voor volledige tekst | X | X |
| Schemaobjecten (beperkingen, indexen, DML-triggers van gebruikers, uitgebreide eigenschappen en sortering) | X | X |
Publicaties maken
Als u een publicatie wilt maken, geeft u de volgende informatie op:
- De distributeur.
- De locatie van de momentopnamebestanden.
- De publicatiedatabase.
- Het type publicatie dat moet worden gemaakt (momentopname, transactioneel, transactioneel met updatable abonnementen of samenvoegen).
- De gegevens- en databaseobjecten (artikelen) die in de publicatie moeten worden opgenomen.
- Statische rijfilters en kolomfilters voor alle typen publicaties, en geparameteriseerde rijfilters en joinfilters voor samenvoegingspublicaties.
- De Snapshot Agent planning.
- Accounts waaronder de volgende agents worden uitgevoerd: de Snapshot Agent voor alle publicaties; de logboeklezeragent voor alle transactionele publicaties; de Queue Reader-agent voor transactionele publicaties die het bijwerken van abonnementen toestaan.
- Een naam en beschrijving voor de publicatie.
Zie de volgende onderwerpen voor meer informatie over het werken met publicaties:
- een publicatie maken
- Een artikel definiëren
- Publicatie-eigenschappen weergeven en wijzigen
- Artikeleigenschappen weergeven en wijzigen
- Een publicatie verwijderen
- Een artikel verwijderen
Note
Als u een artikel of publicatie verwijdert, worden objecten niet verwijderd uit de abonnee.
Tabellen publiceren
Het meest gepubliceerde object is een tabel. De volgende koppelingen bevatten aanvullende informatie over gebieden met betrekking tot publicatietabellen:
- Gepubliceerde gegevens filteren
- Artikelopties voor transactionele replicatie
- Artikelopties voor samenvoegingsreplicatie
- Identiteitskolommen repliceren
Wanneer u een tabel publiceert voor replicatie, kunt u opgeven welke schemaobjecten moeten worden gekopieerd naar de abonnee, zoals gedeclareerde referentiële integriteit (primaire-sleutelbeperkingen, referentiebeperkingen, unieke beperkingen), indexen, DML-triggers van gebruikers (DDL-triggers kunnen niet worden gerepliceerd), uitgebreide eigenschappen en sortering. Uitgebreide eigenschappen worden alleen gerepliceerd in de initiële synchronisatie tussen de uitgever en de abonnee. Als u een uitgebreide eigenschap toevoegt of wijzigt na de eerste synchronisatie, wordt de wijziging niet gerepliceerd.
Zie Schemaopties opgeven of als u schemaopties wilt SchemaOptionopgeven.
Gepartitioneerde tabellen en indexen
Replicatie ondersteunt het publiceren van gepartitioneerde tabellen en indexen. Het ondersteuningsniveau is afhankelijk van het type replicatie dat wordt gebruikt en de opties die u opgeeft voor de publicatie en de artikelen die zijn gekoppeld aan gepartitioneerde tabellen. Zie Gepartitioneerde tabellen en indexen repliceren voor meer informatie.
Opgeslagen procedures publiceren
Met alle typen replicatie kunt u opgeslagen proceduredefinities repliceren: het CREATE PROCEDURE wordt gekopieerd naar elke abonnee. In het geval van opgeslagen procedures voor Common Language Runtime (CLR), wordt de bijbehorende assembly ook gekopieerd. Wijzigingen in procedures worden gerepliceerd naar abonnees; wijzigingen in gekoppelde assembly's zijn niet.
Naast het repliceren van de definitie van een opgeslagen procedure, kunt u met transactionele replicatie de uitvoering van opgeslagen procedures repliceren. Dit is handig bij het repliceren van de resultaten van onderhoudsgerichte opgeslagen procedures die van invloed zijn op grote hoeveelheden gegevens. Zie De uitvoering van opgeslagen procedures publiceren in transactionele replicatie voor meer informatie.
Publicatieweergaven
Met alle typen replicatie kunt u weergaven repliceren. De weergave (en de bijbehorende index, als het een geïndexeerde weergave is) kunnen worden gekopieerd naar de abonnee, maar de basistabel moet ook worden gerepliceerd.
Voor geïndexeerde weergaven kunt u met transactionele replicatie ook de geïndexeerde weergave repliceren als een tabel in plaats van een weergave, waardoor u de basistabel niet meer hoeft te repliceren. Hiertoe geeft u een van de opties voor geïndexeerde weergavelogboeken op voor de parameter @type van sp_addarticle (Transact-SQL). Zie Een artikel definiëren voor meer informatie over het gebruik van sp_addarticle.
User-Defined-functies publiceren
De CREATE FUNCTION instructies voor CLR-functies en Transact-SQL-functies worden naar elke abonnee gekopieerd. In het geval van CLR-functies wordt ook de bijbehorende assembly gekopieerd. Wijzigingen in functies worden gerepliceerd naar abonnees; wijzigingen in gekoppelde assembly's zijn niet.
User-Defined typen en aliasgegevenstypen publiceren
Kolommen die gebruikmaken van door de gebruiker gedefinieerde typen of aliasgegevenstypen, worden gerepliceerd naar abonnees zoals andere kolommen. De CREATE TYPEinstructie voor elk gerepliceerd type wordt uitgevoerd bij Abonnee voordat de tabel wordt gemaakt. In het geval van door de gebruiker gedefinieerde typen wordt de bijbehorende assembly ook gekopieerd naar elke abonnee. Wijzigingen in door de gebruiker gedefinieerde typen en aliasgegevenstypen worden niet gerepliceerd naar abonnees.
Als een type is gedefinieerd in een database, maar niet wordt verwezen in kolommen wanneer een publicatie wordt gemaakt, wordt het type niet gekopieerd naar Abonnees. Als u vervolgens een kolom van dat type in de database maakt en deze wilt repliceren, moet u eerst het type (en de bijbehorende assembly voor een door de gebruiker gedefinieerd type) handmatig kopiëren naar elke abonnee.
Volledige-tekstindexen publiceren
De CREATE FULLTEXT INDEX instructie wordt gekopieerd naar elke abonnee en de volledige tekstindex wordt gemaakt bij de abonnee. Wijzigingen die zijn aangebracht in indexen in volledige tekst die worden gebruikt ALTER FULLTEXT INDEX , worden niet gerepliceerd.
Schemawijzigingen aanbrengen in gepubliceerde objecten
Replicatie ondersteunt een breed scala aan schemawijzigingen voor gepubliceerde objecten. Wanneer u een van de volgende schemawijzigingen aanbrengt in het juiste gepubliceerde object op een SQL Server Publisher, wordt deze wijziging standaard doorgegeven aan alle SQL Server abonnees:
ALTER TABLE
ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER
Zie Schemawijzigingen aanbrengen in publicatiedatabasesvoor meer informatie.
Overwegingen voor publicatie
Houd rekening met de volgende problemen bij het publiceren van databaseobjecten:
De database is toegankelijk voor gebruikers tijdens het maken van de publicatie en de eerste momentopname, maar het is raadzaam om publicaties te maken in tijden van lagere activiteit op de Publisher.
De naam van een database kan niet worden gewijzigd nadat een publicatie erin is gemaakt. Als u de naam ervan wilt wijzigen, moet u eerst de replicatie uit de database verwijderen.
Als u een databaseobject publiceert dat afhankelijk is van een of meer andere databaseobjecten, moet u alle objecten waarnaar wordt verwezen publiceren. Als u bijvoorbeeld een weergave publiceert die afhankelijk is van een tabel, moet u de tabel ook publiceren.
Note
Als u een artikel toevoegt aan een samenvoegpublicatie en een bestaand artikel afhankelijk is van het nieuwe artikel, moet u een verwerkingsvolgorde opgeven voor beide artikelen met behulp van de parameter @processing_order van sp_addmergearticle en sp_changemergearticle. Houd rekening met het volgende scenario: u publiceert een tabel, maar u publiceert geen functie waarnaar de tabel verwijst. Als u de functie niet publiceert, kan de tabel niet worden gemaakt bij de abonnee. Wanneer u de functie aan de publicatie toevoegt: geef een waarde op van 1 voor de parameter @processing_order van sp_addmergearticle; en geef een waarde op van 2 voor de parameter @processing_order van sp_changemergearticle, waarbij u de tabelnaam voor de parameter @article opgeeft. Deze verwerkingsvolgorde zorgt ervoor dat u de functie bij Abonnee maakt voordat de tabel ervan afhankelijk is. U kunt voor elk artikel verschillende getallen gebruiken zolang het getal voor de functie lager is dan het getal voor de tabel.
Publicatienamen mogen niet de volgende tekens bevatten: % * [ ] | : " ? \ / <>.
Beperkingen voor publicatieobjecten
Het maximum aantal artikelen en kolommen dat kan worden gepubliceerd, verschilt per publicatietype. Zie de sectie 'Replicatieobjecten' van maximumcapaciteitsspecificaties voor SQL Server voor meer informatie.
Opgeslagen procedures, weergaven, triggers en door de gebruiker gedefinieerde functies die zijn gedefinieerd als WITH ENCRYPTION, kunnen niet worden gepubliceerd als onderdeel van SQL Server replicatie.
XML-schemaverzamelingen kunnen worden gerepliceerd, maar wijzigingen worden niet gerepliceerd na de eerste momentopname.
Tabellen die zijn gepubliceerd voor transactionele replicatie, moeten een primaire sleutel hebben. Als een tabel zich in een transactionele replicatiepublicatie bevindt, kunt u geen indexen uitschakelen die zijn gekoppeld aan primaire-sleutelkolommen. Deze indexen zijn vereist voor replicatie. Als u een index wilt uitschakelen, moet u eerst de tabel uit de publicatie verwijderen.
Afhankelijke standaardinstellingen die zijn gemaakt met sp_bindefault (Transact-SQL) worden niet gerepliceerd (afhankelijke standaardwaarden worden afgeschaft ten gunste van standaardinstellingen die zijn gemaakt met het DEFAULT trefwoord of ALTER TABLECREATE TABLE).
Functies met de NOEXPAND-hint voor geïndexeerde weergaven kunnen niet worden gepubliceerd in dezelfde publicatie als de tabellen waarnaar wordt verwezen en geïndexeerde weergaven, vanwege de volgorde waarin de distributieagent deze levert. Als u dit probleem wilt omzeilen, plaatst u de tabel en geïndexeerde weergave in een eerste publicatie en voegt u functies toe met de NOEXPAND-hint voor de geïndexeerde weergaven aan een tweede publicatie die u publiceert nadat de eerste publicatie is voltooid. U kunt ook scripts voor deze functies maken en het script leveren met behulp van de parameter @post_snapshot_script van sp_addpublication.
Schema's en objecteigendom
Replicatie heeft het volgende standaardgedrag in de wizard Nieuwe publicatie met betrekking tot schema's en objecteigendom:
Voor artikelen in samenvoegpublicaties met een compatibiliteitsniveau van 90 of hoger, momentopnamepublicaties en transactionele publicaties: standaard is de objecteigenaar van de abonnee hetzelfde als de eigenaar van het bijbehorende object in Publisher. Als de schema's die eigenaar zijn van objecten niet bestaan bij de abonnee, worden ze automatisch gemaakt.
Voor artikelen in samenvoegpublicaties met een compatibiliteitsniveau lager dan 90: de eigenaar wordt standaard leeg gelaten en gespecificeerd als dbo tijdens het maken van het object op de Subscribent.
Voor artikelen in Oracle-publicaties: standaard wordt de eigenaar opgegeven als dbo.
Voor artikelen in publicaties die gebruikmaken van momentopnamen in tekenmodus (die worden gebruikt voor niet-SQL Server-abonnees en SQL Server Compact-abonnees): standaard blijft de eigenaar leeg. De eigenaar wordt standaard ingesteld op de eigenaar die is gekoppeld aan het account dat wordt gebruikt door de distributieagent of de samenvoegagent om verbinding te maken met de abonnee.
De objecteigenaar kan worden gewijzigd via de Artikeleigenschappen - <Artikel> dialoogvenster en via de volgende opgeslagen procedures: sp_addarticle, sp_addmergearticle, sp_changearticle en sp_changemergearticle. Zie Publicatie-eigenschappen weergeven en wijzigen, een artikel definiërenen Artikeleigenschappen weergeven en wijzigen voor meer informatie.
Gegevens publiceren naar abonnees met eerdere versies van SQL Server
Als u publiceert naar een abonnee met een eerdere versie van SQL Server, bent u beperkt tot de functionaliteit van die versie, zowel wat betreft replicatiespecifieke functionaliteit als de functionaliteit van het product als geheel.
Samenvoegpublicaties maken gebruik van een compatibiliteitsniveau, waarmee wordt bepaald welke functies in een publicatie kunnen worden gebruikt en waarmee u abonnees met eerdere versies van SQL Server kunt ondersteunen.
Tabellen publiceren in meer dan één publicatie
Replicatie ondersteunt het publiceren van artikelen in meerdere publicaties (inclusief het opnieuw publiceren van gegevens) met de volgende beperkingen:
Als een artikel wordt gepubliceerd in een transactionele publicatie en een samenvoegpublicatie, moet u ervoor zorgen dat de eigenschap @published_in_tran_pub is ingesteld op TRUE voor het samenvoegartikel. Zie Eigenschappen van publicatie weergeven en wijzigen voor meer informatie over het instellen van eigenschappen en het weergeven en wijzigen van artikeleigenschappen.
U moet ook de eigenschap @published_in_tran_pub instellen als een artikel deel uitmaakt van een transactioneel abonnement en is opgenomen in een samenvoegpublicatie. Als dit het geval is, moet u er rekening mee houden dat bij transactionele replicatie standaard wordt verwacht dat tabellen bij de abonnee als alleen-lezen worden behandeld; als bij samenvoegingsreplicatie gegevenswijzigingen aanbrengt in een tabel in een transactioneel abonnement, kunnen er geen convergentie van gegevens optreden. Om deze mogelijkheid te voorkomen, raden we u aan een dergelijke tabel op te geven als alleen-downloaden in de samenvoegpublicatie. Hiermee voorkomt u dat een samenvoegabonnee gegevenswijzigingen naar de tabel uploadt. Zie De prestaties van samenvoeging optimaliseren met Download-Only artikelen voor meer informatie.
Een artikel kan niet worden gepubliceerd in zowel een samenvoegpublicatie als een transactionele publicatie met abonnementen in de wachtrij.
Artikelen die zijn opgenomen in transactionele publicaties die ondersteuning bieden voor het bijwerken van abonnementen, kunnen niet opnieuw worden gepubliceerd.
Als een artikel wordt gepubliceerd in meer dan één transactionele publicatie die ondersteuning biedt voor het bijwerken van abonnementen in de wachtrij, moeten de volgende eigenschappen dezelfde waarde hebben voor het artikel in alle publicaties:
Property Parameter in sp_addarticle Identiteitsbereikbeheer @auto_identity_range (afgeschaft) en @identityrangemangementoption Publisher identiteitsbereik @pub_identity_range Identiteitsbereik @identity_range Drempelwaarde voor identiteitsbereik @threshold Zie sp_addarticle (Transact-SQL) voor meer informatie over deze parameters.
Als een artikel wordt gepubliceerd in meer dan één samenvoegpublicatie, moeten de volgende eigenschappen dezelfde waarde hebben voor het artikel in alle publicaties:
Property Parameter in sp_addmergearticle Kolomtracering @column_tracking Schemaopties @schema_option Kolomfiltering @vertical_partition Opties voor uploaden van abonnees @subscriber_upload_options Bijhouden van voorwaardelijk verwijderen @delete_tracking Foutcompensatie @compensate_for_errors Identiteitsbereikbeheer @auto_identity_range (afgeschaft) en @identityrangemangementoption Publisher identiteitsbereik @pub_identity_range Identiteitsbereik @identity_range Drempelwaarde voor identiteitsbereik @threshold Partitieopties @partition_options Blob-kolomstreaming @stream_blob_columns Filtertype @filter_type (parameter in sp_addmergefilter) Zie sp_addmergearticle (Transact-SQL) en sp_addmergefilter (Transact-SQL) voor meer informatie over deze parameters.
Transactionele replicatie en ongefilterde samenvoegingsreplicatie ondersteunen het publiceren van een tabel in meerdere publicaties en vervolgens abonneren binnen één tabel in de abonnementsdatabase (ook wel een samengetelde scenario genoemd). Samengeteld wordt vaak gebruikt voor het samenvoegen van subsets van gegevens van meerdere locaties in één tabel bij een centrale abonnee. Gefilterde samenvoegpublicaties bieden geen ondersteuning voor het centrale abonneescenario. Voor samenvoegreplicatie wordt samenvouwen doorgaans geïmplementeerd via één publicatie met geparameteriseerde rijfilters. Zie Geparameteriseerde rijfiltersvoor meer informatie.