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 |
| Door de gebruiker gedefinieerde typen (CLR) | X | X |
| Door de gebruiker gedefinieerde functies (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 oprichten
Om een publicatie te maken, verstrekt u de volgende informatie:
- De distributeur.
- De locatie van de momentopnamebestanden.
- De publicatiedatabase.
- Het type publicatie dat moet worden gemaakt (momentopnamepublicatie, transactionele publicatie, transactionele publicatie met bijwerkbare abonnementen, of samenvoegpublicatie).
- 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.
- Het schema van de Snapshot Agent.
- Accounts waaronder de volgende agenten draaien: de Snapshot Agent voor alle publicaties; de Log Reader Agent voor alle transactionele publicaties; de Queue Reader Agent voor transactionele publicaties die het bijwerken van abonnementen mogelijk maken.
- Een naam en beschrijving voor de publicatie.
Voor informatie over hoe je met publicaties kunt omgaan, zie de volgende artikelen:
- een publicatie maken
- Een artikel definiëren
- Publicatie-eigenschappen weergeven en wijzigen
- Artikeleigenschappen weergeven en wijzigen
- Een publicatie verwijderen
- Een artikel verwijderen
Note
Het verwijderen van een artikel of publicatie verwijdert geen objecten van de abonnee.
Publicatietabellen
Het meest gepubliceerde object is een tabel. De volgende links geven meer informatie over het publiceren van tabellen:
- Gepubliceerde gegevens filteren
- Artikelopties voor transactionele replicatie
- Artikelopties voor samenvoegingsreplicatie
- Identiteitskolommen repliceren
Wanneer je een tabel publiceert voor replicatie, kun je specificeren welke schema-objecten naar de abonnee gekopieerd moeten worden, zoals declareerde referentiële integriteit (primaire sleutelbeperkingen, referentiebeperkingen, unieke constraints), indexen, gebruikers-DML-triggers (DDL-triggers kunnen niet worden gerepliceerd), uitgebreide eigenschappen en collatie. 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 initiële synchronisatie, wordt de wijziging niet gerepliceerd.
Als u schemaopties wilt opgeven, raadpleegt u Schemaopties opgeven of SchemaOption.
Gepartitioneerde tabellen en indexen
Replicatie ondersteunt het publiceren van gepartitioneerde tabellen en indexen. Het ondersteuningsniveau hangt af van het type replicatie dat je gebruikt, en de opties die je specificeert voor de publicatie en de artikelen die bij gepartitioneerde tabellen horen. Zie Gepartitioneerde tabellen en indexen repliceren voor meer informatie.
Opgeslagen procedures publiceren
Alle soorten replicatie maken het mogelijk om opgeslagen procedure-definities te repliceren: de CREATE PROCEDURE instructie wordt naar elke abonnee gekopieerd. 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 aan bijbehorende assemblies niet.
Naast het repliceren van de definitie van een opgeslagen procedure, kunt u met transactionele replicatie de uitvoering van opgeslagen procedures repliceren. Deze functie is nuttig voor het repliceren van de resultaten van onderhoudsgerichte opgeslagen procedures die grote hoeveelheden data beïnvloeden. Zie De uitvoering van opgeslagen procedures publiceren in transactionele replicatie voor meer informatie.
Weergaven publiceren
Met alle typen replicatie kunt u weergaven repliceren. Je kunt de weergave en de bijbehorende index (als het een geïndexeerde weergave is) kopiëren naar de abonnee, maar je moet ook de basistabel repliceren.
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.
Publiceren van door gebruikers gedefinieerde functies
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 aan functies worden gerepliceerd naar abonnees; wijzigingen aan bijbehorende assemblies niet.
Door de gebruiker gedefinieerde typen en aliasgegevenstypen publiceren
Replicatie behandelt kolommen die gebruikmaken van door de gebruiker gedefinieerde types of aliasgegevenstypen zoals andere kolommen en repliceert deze naar abonnees. Het proces voert de CREATE TYPE instructie uit voor elk gerepliceerd gegevenstype bij de Abonnee voordat het de tabel aanmaakt. Voor door de gebruiker gedefinieerde types kopieert replicatie ook de bijbehorende assembly naar elke abonnee. Bij replicatie worden wijzigingen in door de gebruiker gedefinieerde typen en aliastypen niet naar Abonnees gerepliceerd.
Als je een type definieert in een database maar het niet in kolommen verwijst bij het aanmaken van een publicatie, kopieert replicatie het type niet naar abonnees. Als je later een kolom van dat type in de database aanmaakt en deze wilt repliceren, moet je eerst handmatig het type (en de bijbehorende assembly voor een door de gebruiker gedefinieerd type) 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 aan full-textindexen met behulp van ALTER FULLTEXT INDEX worden niet gerepliceerd.
Schemawijzigingen aanbrengen in gepubliceerde objecten
Replicatie ondersteunt een breed scala aan schemawijzigingen voor gepubliceerde objecten. Wanneer je een van de volgende schemawijzigingen aanbrengt op het juiste gepubliceerde object op een SQL Server Publisher, verspreidt replicatie standaard die wijziging naar alle SQL Server abonnees:
ALTER TABLE
ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER
Zie Schemawijzigingen aanbrengen in publicatiedatabasesvoor meer informatie.
Overwegingen voor publicaties
Houd de volgende overwegingen in gedachten bij het publiceren van databaseobjecten:
Gebruikers kunnen de database raadplegen tijdens het aanmaken van de publicatie en de eerste snapshot, maar het is het beste om publicaties aan te maken tijdens tijden van lagere activiteit op de Publisher.
Je kunt een database niet hernoemen nadat je er een publicatie in hebt gemaakt. Om de database te hernoemen, moet je eerst replicatie uit de database verwijderen.
Als je een databaseobject publiceert dat afhankelijk is van een of meer andere databaseobjecten, moet je alle gerefereerde objecten publiceren. Als u bijvoorbeeld een weergave publiceert die afhankelijk is van een tabel, moet u de tabel ook publiceren.
Note
Als je een artikel toevoegt aan een samengevoegde publicatie en een bestaand artikel afhankelijk is van het nieuwe artikel, moet je een verwerkingsvolgorde voor beide artikelen specificeren door gebruik te maken van de @processing_order parameter sp_addmergearticle en sp_changemergearticle. Beschouw het volgende scenario: je publiceert een tabel, maar je publiceert geen functie waar de tabel naar verwijst. Als je de functie niet publiceert, kan de tabel niet worden aangemaakt 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 de volgende personages niet bevatten: % * [ ] | : " ? \ / <>.
Beperkingen op het publiceren van objecten
Het maximale aantal artikelen en columns dat je kunt publiceren verschilt per publicatietype. Zie de sectie 'Replicatieobjecten' van maximumcapaciteitsspecificaties voor SQL Server voor meer informatie.
Je kunt geen opgeslagen procedures, views, triggers en door de gebruiker gedefinieerde functies publiceren die als MET ENCRYPTIE zijn gedefinieerd als onderdeel van SQL Server-replicatie.
Je kunt XML-schemacollecties repliceren, maar veranderingen worden niet gerepliceerd na de eerste snapshot.
Tabellen die zijn gepubliceerd voor transactionele replicatie, moeten een primaire sleutel hebben. Als een tabel in een transactionele replicatiepublicatie staat, kun je geen indexen uitschakelen die gekoppeld zijn aan primaire sleutelkolommen. Replicatie vereist deze indexen. Als u een index wilt uitschakelen, moet u eerst de tabel uit de publicatie verwijderen.
Gebonden standaardwaarden die zijn gemaakt met sp_bindefault (Transact-SQL) worden niet gerepliceerd (gebonden standaardwaarden worden afgeschaft ten gunste van standaardwaarden die zijn gemaakt met het DEFAULT sleutelwoord of ALTER TABLECREATE TABLE).
Je kunt geen functies publiceren die de NOEXPAND-hint bevatten op geïndexeerde weergaven in dezelfde publicatie als de gerefereerde tabellen en geïndexeerde weergaven, vanwege de volgorde waarin de distributieagent ze 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 eigendom van objecten
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.
Je kunt de objecteigenaar wijzigen via het dialoogvenster Artikel Eigenschappen - <Artikel> 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 je publiceert naar een abonnee die een eerdere versie van SQL Server draait, ben je beperkt tot de functionaliteit van die versie. Deze beperking geldt zowel voor replicatie-specifieke functionaliteit als voor de algehele functionaliteit van het product.
Samengevoegde publicaties gebruiken een compatibiliteitsniveau, dat bepaalt welke functies je in een publicatie kunt gebruiken en waarmee je abonnees ondersteunt met eerdere versies van SQL Server.
Publicatietabellen in meer dan één publicatie
Replicatie ondersteunt het publiceren van artikelen in meerdere publicaties, inclusief het herpubliceren van data, met de volgende beperkingen:
Als je een artikel publiceert in zowel een transactionele publicatie als een mergepublicatie, stel dan de @published_in_tran_pub-eigenschap op WAAR voor het merge-artikel. Zie Eigenschappen van publicatie weergeven en wijzigen voor meer informatie over het instellen van eigenschappen en het weergeven en wijzigen van artikeleigenschappen.
Stel de @published_in_tran_pub-eigenschap in als een artikel deel uitmaakt van een transactioneel abonnement en is opgenomen in een mergepublicatie. Standaard verwacht transactionele replicatie dat tabellen bij de abonnee alleen-lezen zijn. Als merge-replicatie datawijzigingen aanbrengt in een tabel in een transactioneel abonnement, kan er sprake worden van niet-convergentie van data. Om dit probleem te voorkomen, specificeer je in de mergepublicatie een tabel als download-alleen. Deze instelling voorkomt dat een merge Subscriber datawijzigingen uploadt naar de tabel. Zie Prestaties van samenvoegreplicatie optimaliseren met artikelen die alleen kunnen worden gedownload voor meer informatie.
Je kunt een artikel niet publiceren in zowel een merge-publicatie als in een transactionele publicatie met abonnementen met updates in de wachtrij.
Je kunt geen artikelen herpubliceren die zijn opgenomen in transactionele publicaties die het bijwerken van abonnementen ondersteunen.
Als je een artikel publiceert in meer dan één transactionele publicatie die wachtrij-updates ondersteunt, moet het artikel dezelfde waarde hebben voor de volgende eigenschappen in alle publicaties:
Property Parameter in sp_addarticle Identiteitsbereikbeheer @auto_identity_range (verouderd) 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 je een artikel publiceert in meer dan één samengevoegde publicatie, moet het artikel dezelfde waarde hebben voor de volgende eigenschappen in alle publicaties:
Property Parameter in sp_addmergearticle Kolom volgen @column_tracking Schemaopties @schema_option Kolomfilter @vertical_partition Uploadopties voor abonnees @subscriber_upload_options Voorwaardelijke verwijdering bijhouden @delete_tracking Foutcompensatie @compensate_for_errors Identiteitsbereikbeheer @auto_identity_range (verouderd) en @identityrangemangementoption Publisher identiteitsbereik @pub_identity_range Identiteitsbereik @identity_range Drempelwaarde voor identiteitsbereik @threshold Partitieopties @partition_options Blobkolom streamen @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 samenvoeging ondersteunen het publiceren van een tabel in meerdere publicaties en het vervolgens abonneren binnen één enkele tabel in de abonnementsdatabase (vaak een rollup-scenario genoemd). Rollup wordt vaak gebruikt om deelsets van gegevens van meerdere locaties in één tabel bij een centrale abonnee te aggregeren. Gefilterde samenvoegpublicaties ondersteunen het scenario met een centrale abonnee niet. Voor merge-replicatie wordt rollup doorgaans geïmplementeerd via één publicatie met geparametriseerde rijfilters. Zie Geparameteriseerde rijfiltersvoor meer informatie.