Publicera data och databasobjekt

gäller för:SQL ServerAzure SQL Managed Instance

När du skapar en publikation väljer du de tabeller och andra databasobjekt som du vill publicera. Du kan publicera följande databasobjekt med hjälp av replikering.

Databasobjekt Replikering av ögonblicksbilder och transaktionsreplikering Slå samman replikeringsmetod
Tables X X
Partitionerade tabeller X X
Lagrade procedurer – Definition (Transact-SQL och CLR) X X
Lagrade procedurer – körning (Transact-SQL och CLR) X no
Views X X
Indexerade vyer X X
Indexerade vyer som tabeller X no
Användardefinierade datatyper (CLR) X X
User-Defined Functions (Transact-SQL och CLR) X X
Aliasdatatyper X X
Fulltextindex X X
Schemaobjekt (begränsningar, index, DML-utlösare för användare, utökade egenskaper och sortering) X X

Skapa publikationer

Om du vill skapa en publikation anger du följande information:

  • Distributören.
  • Platsen för ögonblicksbildfilerna.
  • Publikationsdatabasen.
  • Vilken typ av publikation som ska skapas (ögonblicksbild, transaktionell, transaktionell med uppdateringsbara prenumerationer eller sammanslagning).
  • De data- och databasobjekt (artiklar) som ska ingå i publikationen.
  • Statiska radfilter och kolumnfilter för alla typer av publikationer samt parameteriserade radfilter och kopplingsfilter för sammanslagningspublikationer.
  • Schemat för Snapshot Agent.
  • Konton under vilka följande agenter ska köras: Snapshot Agent för alla publikationer, Log Reader Agent för alla transaktionspublikationer, Köläsaragenten för transaktionspublikationer som tillåter uppdatering av prenumerationer.
  • Ett namn och en beskrivning för publikationen.

Information om hur du arbetar med publikationer finns i följande avsnitt:

Note

Om du tar bort en artikel eller publikation tas inga objekt bort från prenumeranten.

Tabeller för publicering

Det vanligaste publicerade objektet är en tabell. Följande länkar innehåller ytterligare information om områden som rör publiceringstabeller:

När du publicerar en tabell för replikering kan du ange vilka schemaobjekt som ska kopieras till Prenumeranten, till exempel deklarerad referensintegritet (primära nyckelbegränsningar, referensbegränsningar, unika begränsningar), index, DML-utlösare (DDL-utlösare kan inte replikeras), utökade egenskaper och sortering. Utökade egenskaper replikeras endast i den inledande synkroniseringen mellan utgivaren och prenumeranten. Om du lägger till eller ändrar en utökad egenskap efter den inledande synkroniseringen replikeras inte ändringen.

Information om hur du anger schemaalternativ finns i Ange schemaalternativ eller SchemaOption.

Partitionerade tabeller och index

Replikering stöder publicering av partitionerade tabeller och index. Stödnivån beror på vilken typ av replikering som används och vilka alternativ du anger för publikationen och de artiklar som är associerade med partitionerade tabeller. Mer information finns i Replikera partitionerade tabeller och index.

Publicera lagrade procedurer

Med alla typer av replikering kan du replikera lagrade procedurdefinitioner: CREATE PROCEDURE kopieras till varje prenumerant. När det gäller clr-lagrade procedurer (Common Language Runtime) kopieras även den associerade sammansättningen. Ändringar i procedurerna repliceras till prenumeranter; ändringar i tillhörande sammansättningar repliceras inte.

Förutom att replikera definitionen av en lagrad procedur kan du med transaktionsreplikering replikera körningen av lagrade procedurer. Detta är användbart när du replikerar resultatet av underhållsorienterade lagrade procedurer som påverkar stora mängder data. Mer information finns i Publicera körning av lagrad procedur i transaktionsreplikering.

Publiceringsvyer

Med alla typer av replikering kan du replikera vyer. Vyn (och dess tillhörande index, om det är en indexerad vy) kan kopieras till prenumeranten, men bastabellen måste också replikeras.

För indexerade vyer kan transaktionsreplikering också replikera den indexerade vyn som en tabell i stället för en vy, vilket eliminerar behovet av att även replikera bastabellen. Om du vill göra detta anger du något av alternativen "indexerad vyloggbaserad" för parametern @typeför sp_addarticle (Transact-SQL). Mer information om hur du använder sp_addarticle finns i Definiera en artikel.

Publicera användardefinierade funktioner

Instruktioner CREATE FUNCTION för CLR-funktioner och Transact-SQL funktioner kopieras till varje prenumerant. När det gäller CLR-funktioner kopieras även den associerade sammansättningen. Ändringar i funktioner replikeras till prenumeranter; ändringar i associerade assemblyer gör det inte.

Publicering av användardefinierade typer och aliastyper

Kolumner som använder användardefinierade typer eller aliasdatatyper replikeras till Prenumeranter som andra kolumner. Instruktionen CREATE TYPEför varje replikerad typ körs i Prenumeranten innan tabellen skapas. När det gäller användardefinierade typer kopieras även den associerade sammansättningen till varje prenumerant. Ändringar av användardefinierade typer och aliasdatatyper replikeras inte till prenumeranter.

Om en typ definieras i en databas, men den inte refereras i några kolumner när en publikation skapas, kopieras inte typen till Prenumeranter. Om du sedan skapar en kolumn av den typen i databasen och vill replikera den måste du först kopiera typen (och den associerade sammansättningen för en användardefinierad typ) till varje prenumerant.

Publicering av fulltextindex

Satsen CREATE FULLTEXT INDEX kopieras till varje prenumerant och fulltextindexet skapas hos prenumeranten. Ändringar som görs i fulltextindex med hjälp av ALTER FULLTEXT INDEX replikeras inte.

Göra schemaändringar i publicerade objekt

Replikering stöder en mängd olika schemaändringar för publicerade objekt. När du gör någon av följande schemaändringar för lämpligt publicerat objekt på en SQL Server Publisher sprids ändringen som standard till alla SQL Server Prenumeranter:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

Mer information finns i Göra schemaändringar i publikationsdatabaser.

Överväganden för publicering

Tänk på följande när du publicerar databasobjekt:

  • Databasen är tillgänglig för användare när publikationen skapas och den första ögonblicksbilden skapas, men det är lämpligt att skapa publikationer under tider med lägre aktivitet på Publisher.

  • Det går inte att byta namn på en databas när en publikation har skapats i den. Om du vill byta namn på den måste du först ta bort replikeringen från databasen.

  • Om du publicerar ett databasobjekt som är beroende av ett eller flera andra databasobjekt måste du publicera alla refererade objekt. Om du till exempel publicerar en vy som är beroende av en tabell måste du även publicera tabellen.

    Note

    Om du lägger till en artikel i en sammanslagningspublikation och en befintlig artikel är beroende av den nya artikeln måste du ange en bearbetningsordning för båda artiklarna med parametern @processing_orderför sp_addmergearticle och sp_changemergearticle. Tänk på följande scenario: du publicerar en tabell men du publicerar inte en funktion som tabellen refererar till. Om du inte publicerar funktionen kan tabellen inte skapas i Prenumeranten. När du lägger till funktionen i publikationen: ange värdet 1 för parametern @processing_orderför sp_addmergearticle. och ange värdet 2 för parametern @processing_orderför sp_changemergearticle och ange tabellnamnet för parametern @article. Den här bearbetningsordningen säkerställer att du skapar funktionen hos prenumeranten före tabellen som är beroende av funktionen. Du kan använda olika tal för varje artikel så länge talet för funktionen är lägre än talet för tabellen.

  • Publikationsnamn kan inte innehålla följande tecken: % * [ ] | : " ? \ / <>.

Begränsningar för publiceringsobjekt

  • Det maximala antalet artiklar och kolumner som kan publiceras skiljer sig åt beroende på publikationstyp. Mer information finns i avsnittet "Replikeringsobjekt" i Maximum Capacity Specifications for SQL Server (Högsta kapacitetsspecifikationer för SQL Server).

  • Lagrade procedurer, vyer, utlösare och användardefinierade funktioner som definieras som WITH ENCRYPTION kan inte publiceras som en del av SQL Server replikering.

  • XML-schemasamlingar kan replikeras men ändringarna replikeras inte efter den första ögonblicksbilden.

  • Tabeller som publicerats för transaktionsreplikering måste ha en primärnyckel. Om en tabell finns i en transaktionsreplikeringspublikation kan du inte inaktivera index som är associerade med primärnyckelkolumner. Dessa index krävs av replikering. Om du vill inaktivera ett index måste du först släppa tabellen från publikationen.

  • Bundna standardvärden som skapas med sp_bindefault (Transact-SQL) replikeras inte (bundna standardvärden är inaktuella till förmån för standardvärden som skapats med nyckelordet DEFAULTALTER TABLE eller CREATE TABLE).

  • Funktioner som innehåller NOEXPAND-tipset för indexerade vyer kan inte publiceras i samma publikation som de refererade tabellerna och indexerade vyerna, på grund av den ordning i vilken distributionsagenten levererar dem. Om du vill undvika det här problemet placerar du tabellen och den indexerade vyn i en första publikation och lägger till funktioner som innehåller NOEXPAND-tipset om indexerade vyer i en andra publikation som du publicerar när den första publikationen har slutförts. Du kan också skapa skript för dessa funktioner och leverera skriptet med hjälp av parametern @post_snapshot_scriptför sp_addpublication.

Scheman och objektägarskap

Replikering har följande standardbeteende i guiden Ny publikation med avseende på scheman och objektägarskap:

  • För artiklar i sammanslagningspublikationer med en kompatibilitetsnivå på 90 eller högre, ögonblickspublikationer och transaktionspublikationer är objektägaren på Prenumeranten som standard densamma som ägaren av motsvarande objekt hos utgivaren. Om scheman som äger objekt inte finns hos Prenumeranten, skapas de automatiskt.

  • För artiklar i sammanslagningspublikationer med en kompatibilitetsnivå som är lägre än 90: som standard lämnas ägaren tom och anges som dbo när objektet skapas på Prenumeranten.

  • För artiklar i Oracle-publikationer: som standard anges ägaren som dbo.

  • För artiklar i publikationer som använder ögonblicksbilder i teckenläge (som används för icke-SQL Server-prenumeranter och SQL Server Compact-prenumeranter): som standard lämnas ägaren tom. Ägaren standardinställs till den ägare som är associerad med användarkontot som används av Distributionsagenten eller Mergeagenten för att ansluta till prenumeranten.

Objektägaren kan ändras via dialogrutan Artikelegenskaper – <artikel> och genom följande lagrade procedurer: sp_addarticle, sp_addmergearticle, sp_changearticle och sp_changemergearticle. Mer information finns i Visa och ändra publikationsegenskaper, Definiera en artikel och Visa och ändra artikelegenskaper.

Publicera data till prenumeranter som kör tidigare versioner av SQL Server

  • Om du publicerar till en prenumerant som kör en tidigare version av SQL Server är du begränsad till funktionerna i den versionen, både när det gäller replikeringsspecifika funktioner och funktionaliteten för produkten som helhet.

  • Sammanfoga publikationer använder en kompatibilitetsnivå som avgör vilka funktioner som kan användas i en publikation och gör att du kan stödja prenumeranter som kör tidigare versioner av SQL Server.

Publicera tabeller i mer än en publikation

Replikering stöder publicering av artiklar i flera publikationer (inklusive återpublicering av data) med följande begränsningar:

  • Om en artikel publiceras i en transaktionspublikation och en sammanslagningspublikation kontrollerar du att egenskapen @published_in_tran_pub är inställd på TRUE för kopplingsartikeln. Mer information om hur du anger egenskaper finns i Visa och ändra publikationsegenskaper samt Visa och Ändra artikelegenskaper.

    Du bör också ange egenskapen @published_in_tran_pub om en artikel ingår i en transaktionsprenumeration och ingår i en sammanslagningspublikation. Om så är fallet bör du vara medveten om att transaktionsreplikering som standard förutsätter att tabeller hos prenumeranten behandlas som skrivskyddade; om sammanfogningsreplikering ändrar data i en tabell i en transaktionsprenumeration kan bristande datakonvergens uppstå. För att undvika den här möjligheten rekommenderar vi att en sådan tabell anges som endast nedladdning i sammanslagningspublikationen. Detta förhindrar att en sammanslagningsprenumerant laddar upp dataändringar till tabellen. Mer information finns i Optimera prestandan för sammanslagningsreplikering med artiklar endast för nedladdning.

  • Det går inte att publicera en artikel i både en sammanslagningspublikation och en transaktionspublikation med prenumerationer i kö.

  • Artiklar som ingår i transaktionspublikationer som stöder uppdatering av prenumerationer kan inte publiceras på nytt.

  • Om en artikel publiceras i mer än en transaktionspublikation som stöder köade uppdateringsprenumerationer måste följande egenskaper ha samma värde för artikeln i alla publikationer:

    Fastighet Parameter i sp_addarticle
    Hantering av identitetsintervall @auto_identity_range (inaktuell) och @identityrangemangementoption
    Utgivaridentitetsintervall @pub_identity_range
    Identitetsområde @identity_range
    Tröskelvärde för identitetsintervall @threshold

    Mer information om dessa parametrar finns i sp_addarticle (Transact-SQL).

  • Om en artikel publiceras i mer än en sammanslagningspublikation måste följande egenskaper ha samma värde för artikeln i alla publikationer:

    Fastighet Parameter i sp_addmergearticle
    Kolumnspårning @column_tracking
    Schemaalternativ @schema_option
    Kolumnfiltrering @vertical_partition
    Alternativ för prenumerantuppladdning @subscriber_upload_options
    Spårning av villkorliga raderingar @delete_tracking
    Felkompensation @compensate_for_errors
    Hantering av identitetsintervall @auto_identity_range (inaktuell) och @identityrangemangementoption
    Utgivaridentitetsomfång @pub_identity_range
    Identitetsområde @identity_range
    Tröskelvärde för identitetsintervall @threshold
    Partitionsalternativ @partition_options
    Strömning av blobkolumner @stream_blob_columns
    Filtertyp @filter_type (parameter i sp_addmergefilter)

    Mer information om dessa parametrar finns i sp_addmergearticle (Transact-SQL) och sp_addmergefilter (Transact-SQL).

  • Transaktionsreplikering och ofiltrerad sammanfogningsreplikering har stöd för att publicera en tabell i flera publikationer och sedan prenumerera på dessa inom en enda tabell i prenumerationsdatabasen (vanligen kallat ett rollup-scenario). Sammanslagning används ofta för att aggregera delmängder av data från flera platser i en tabell hos en central prenumerant. Filtrerade sammanslagningspublikationer stöder inte det centrala prenumerantscenariot. För sammanslagningsreplikering implementeras aggregering vanligtvis med en enda publikation med parametriserade radfilter. Mer information finns i Parameteriserade radfilter.