Publiceer data en databaseobjecten

Van toepassing op:SQL ServerAzure 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:

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:

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.