Bekijk en wijzig publicatie-eigenschappen

Van toepassing op:SQL ServerAzure SQL Managed Instance

Dit onderwerp beschrijft hoe je publicatie-eigenschappen kunt bekijken en wijzigen in SQL Server met behulp van SQL Server Management Studio, Transact-SQL of Replication Management Objects (RMO).

Beperkingen en beperkingen

  • Sommige eigenschappen kunnen niet worden aangepast nadat een publicatie is gemaakt, en andere kunnen niet worden aangepast als er abonnementen op de publicatie zijn. Eigenschappen die niet kunnen worden gewijzigd, worden als alleen-lezen weergegeven.

Aanbevelingen

SQL Server Management Studio gebruiken

Bekijk en wijzig publicatie-eigenschappen in het dialoogvenster Publicatie-eigenschappen - <Publicatie>, dat beschikbaar is in SQL Server Management Studio en Replication Monitor. Zie Replicatiecontrole starten voor meer informatie over het starten van replicatiecontrole.

Het dialoogvenster Publicatie-eigenschappen - <Publicatie> bevat de volgende pagina's:

  • De algemene pagina bevat de publicatienaam en beschrijving, de databasenaam, het type publicatie en de instellingen voor de vervaldatum van het abonnement.

  • De Artikelenpagina komt overeen met de Artikelenpagina in de Nieuwe Publicatie Wizard. Gebruik deze pagina om artikelen toe te voegen en te verwijderen, en om eigenschappen en kolomfiltering voor artikelen aan te passen.

  • De pagina Filterrijen komt overeen met de pagina Filtertabel Rijen in de Nieuwe Publicatie Wizard. Gebruik deze pagina om statische rijfilters toe te voegen, te bewerken en te verwijderen voor alle soorten publicaties, en om geparametriseerde rijfilters en joinfilters voor samengevoegde publicaties toe te voegen, te bewerken en te verwijderen.

  • Op de Snapshot-pagina kun je het formaat en de locatie van de snapshot specificeren, of de snapshot gecomprimeerd moet worden, en scripts die vóór en na het toepassen van de snapshot moeten worden uitgevoerd.

  • De FTP Snapshot-pagina (voor snapshot- en transactionele publicaties, en mergeerpublicaties voor uitgevers die versies draaien vóór SQL Server 2005) stelt u in staat aan te geven of abonnees snapshotbestanden kunnen downloaden via File Transfer Protocol (FTP).

  • De FTP Snapshot en Internetpagina (voor mergeerpublicaties van uitgevers die SQL Server 2005 of later draaien) stelt je in staat aan te geven of abonnees snapshotbestanden via FTP kunnen downloaden, en of abonnees abonnementen via HTTPS kunnen synchroniseren.

  • Op de pagina Abonnementsopties kun je een aantal opties instellen die op alle abonnementen van toepassing zijn. De opties verschillen afhankelijk van het type publicatie.

  • Op de pagina Publicatietoegangslijst kun je specificeren welke inloggegevens en groepen toegang hebben tot een publicatie.

  • De Agent Security-pagina stelt u in staat instellingen te benaderen voor de accounts waaronder de volgende agenten draaien en verbindingen te maken met de computers in een replicatietopologie: de Snapshot Agent voor alle publicaties; de Log Reader Agent voor alle transactionele publicaties; en de Queue Reader Agent voor transactionele publicaties die wachtrij-updates mogelijk maken.

  • De pagina Data Partitions (voor samengevoegde publicaties van uitgevers die SQL Server 2005 of later draaien) stelt je in staat aan te geven of abonnees van publicaties met geparametriseerde filters een snapshot kunnen aanvragen als die niet beschikbaar is. Het stelt je ook in staat om snapshots te genereren voor één of meer partities, één keer of op een terugkerend schema.

Om publicatie-eigenschappen te bekijken en aan te passen in Management Studio

  1. Maak verbinding met Publisher in Management Studio en vouw vervolgens het serverknooppunt uit.

  2. Vouw de map Replicatie uit en vouw vervolgens de map Lokale publicaties uit.

  3. Klik met de rechtermuisknop op een publicatie en klik vervolgens op Eigenschappen.

  4. Wijzig indien nodig eigenschappen en klik op OK.

Om publicatie-eigenschappen te bekijken en aan te passen in Replication Monitor

  1. Breid een Publisher-groep uit in het linkerpaneel van Replication Monitor, en breid vervolgens een Publisher uit.

  2. Klik met de rechtermuisknop op een publicatie en klik vervolgens op Eigenschappen.

  3. Wijzig indien nodig eigenschappen en klik op OK.

Transact-SQL gebruiken

Publicaties kunnen worden aangepast en hun eigenschappen programmatisch worden teruggegeven met behulp van replicatie-opgeslagen procedures. De opgeslagen procedures die je gebruikt hangt af van het type publicatie.

Om de eigenschappen van een snapshot of transactionele publicatie te bekijken

  1. Voer sp_helppublication uit en specificeer de naam van de publicatie voor de @publication parameter. Als u deze parameter niet specificeert, wordt informatie over alle publicaties bij de Publisher teruggegeven.

Om de eigenschappen van een snapshot of transactionele publicatie te wijzigen

  1. Voer sp_changepublication uit, waarbij je de publicatie-eigenschap specificeert die moet veranderen in de @property-parameter en de nieuwe waarde van deze eigenschap in de @value-parameter .

    Note

    Als de wijziging het genereren van een nieuwe snapshot vereist, moet je ook een waarde van 1 specificeren voor @force_invalidate_snapshot, en als de wijziging vereist dat abonnees opnieuw geïntitialiseerd worden, moet je een waarde van 1 voor @force_reinit_subscription specificeren. Voor meer informatie over de eigenschappen die, wanneer gewijzigd, een nieuwe snapshot of herinitialisatie vereisen, zie Wijzigingen Publicatie en Artikeleigenschappen.

Om de eigenschappen van een samenvoegpublicatie te bekijken

  1. Voer sp_helpmergepublication uit en specificeer de naam van de publicatie voor de @publication parameter. Als u deze parameter niet specificeert, wordt informatie over alle publicaties bij de Publisher teruggegeven.

Om de eigenschappen van een samenvoegpublicatie te wijzigen

  1. Voer sp_changemergepublication uit, waarbij de publicatie-eigenschap die wordt gewijzigd in de @property-parameter wordt gespecificeerd en de nieuwe waarde van deze eigenschap in de @value-parameter .

    Note

    Als de wijziging de generatie van een nieuwe snapshot vereist, moet je ook een waarde van 1 specificeren voor @force_invalidate_snapshot, en als de wijziging vereist dat abonnees opnieuw worden geïntialiseerd, moet je een waarde van 1 specificeren voor @force_reinit_subscription Voor meer informatie over de eigenschappen die, wanneer gewijzigd, een nieuwe snapshot of herinitialisatie vereisen, zie Wijzigingen Publicatie en Artikeleigenschappen.

Om de eigenschappen van een snapshot te bekijken

  1. Voer sp_helppublication_snapshot uit en specificeer de naam van de publicatie voor de @publication-parameter .

Om de eigenschappen van een snapshot te wijzigen

  1. Voer sp_changepublication_snapshot uit en specificeer een of meer van de nieuwe snapshot-eigenschappen voor de juiste snapshotparameters.

Voorbeelden (Transact-SQL)

Dit voorbeeld van transactionele replicatie geeft de eigenschappen van de publicatie terug.

DECLARE @myTranPub AS sysname
SET @myTranPub = N'AdvWorksProductTran' 

USE [AdventureWorks2022]
EXEC sp_helppublication @publication = @myTranPub
GO

Dit voorbeeld van transactionele replicatie schakelt schemareplicatie uit voor de publicatie.

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

Dit voorbeeld van samenvoegingsreplicatie geeft de eigenschappen van de publicatie terug.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';

USE [AdventureWorks2022]
EXEC sp_helpmergepublication @publication = @publication;
GO

Dit voorbeeld van samengevoegde replicatie schakelt schemareplicatie uit voor de publicatie.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge'; 

-- Disable DDL replication for the publication.
USE [AdventureWorks2022]
EXEC sp_changemergepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0,
  @force_invalidate_snapshot = 0, 
  @force_reinit_subscription = 0;
GO

Replicatiebeheerobjecten (RMO) gebruiken

Je kunt publicaties aanpassen en hun eigenschappen programmatisch benaderen door gebruik te maken van Replication Management Objects (RMO). De RMO-klassen die je gebruikt om publicatie-eigenschappen te bekijken of aan te passen, hangen af van het type publicatie.

Om eigenschappen van een snapshot of transactionele publicatie te bekijken of te wijzigen

  1. Maak een verbinding met publisher met behulp van de ServerConnection klasse.

  2. Maak een instantie van de TransPublication klasse aan, stel de Name en DatabaseName eigenschappen in voor de publicatie, en stel de ConnectionContext eigenschap in op de verbinding die in stap 1 is gemaakt.

  3. Roep de LoadProperties methode aan om de eigenschappen van het object op te halen. Als deze methode onwaarretourneert, zijn de publicatie-eigenschappen in stap 2 onjuist gedefinieerd of bestaat de publicatie niet.

  4. (Optioneel) Om eigenschappen te wijzigen, stel je een nieuwe waarde in voor een of meer van de instelbare eigenschappen. Gebruik de logische EN-operator (& in Microsoft Visual C# en And in Microsoft Visual Basic) om te bepalen of voor de eigenschap een bepaalde waarde is ingesteld. Gebruik de inclusieve logische OR-operator (|in Visual C# en Or in Visual Basic) en de exclusieve logische OR-operator (^in Visual C# en Xor in Visual Basic) om de PublicationAttributes waarden voor de Attributes eigenschap te wijzigen.

  5. (Optioneel) Als je voor CachePropertyChanges de waarde true hebt opgegeven, roep je de methode CommitPropertyChanges aan om wijzigingen op de server door te voeren. Als je een waarde van false voor CachePropertyChanges hebt opgegeven (de standaard), worden wijzigingen direct naar de server gestuurd.

Om eigenschappen van een samengevoegde publicatie te bekijken of aan te passen

  1. Maak een verbinding met publisher met behulp van de ServerConnection klasse.

  2. Maak een instantie van de MergePublication klasse aan, stel de Name en DatabaseName eigenschappen in voor de publicatie, en stel de ConnectionContext eigenschap in op de verbinding die in stap 1 is gemaakt.

  3. Roep de LoadProperties methode aan om de eigenschappen van het object op te halen. Als deze methode onwaarretourneert, zijn de publicatie-eigenschappen in stap 2 onjuist gedefinieerd of bestaat de publicatie niet.

  4. (Optioneel) Om eigenschappen te wijzigen, stel je een nieuwe waarde in voor een of meer van de instelbare eigenschappen. Gebruik de logische EN-operator (& in Visual C# en And in Visual Basic) om te bepalen of een bepaalde -waarde is ingesteld voor de eigenschap . Gebruik de inclusieve logische OR-operator (|in Visual C# en Or in Visual Basic) en de exclusieve logische OR-operator (^in Visual C# en Xor in Visual Basic) om de PublicationAttributes waarden voor de Attributes eigenschap te wijzigen.

  5. (Optioneel) Als je voor CachePropertyChanges de waarde true hebt opgegeven, roep je de methode CommitPropertyChanges aan om wijzigingen op de server door te voeren. Als je een waarde van false voor CachePropertyChanges hebt opgegeven (de standaard), worden wijzigingen direct naar de server gestuurd.

Voorbeelden (RMO)

Dit voorbeeld stelt publicatieattributen vast voor een transactionele publicatie. De wijzigingen worden gecachet totdat ze expliciet naar de server worden gestuurd.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = true;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Enable support for push subscriptions and disable support 
        // for pull subscriptions.
        if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
        {
            publication.Attributes ^= PublicationAttributes.AllowPull;
        }
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Send changes to the server.
        publication.CommitPropertyChanges();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publication As TransPublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = True

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then
        ' Enable support for push subscriptions and disable support 
        ' for pull subscriptions.
        If (publication.Attributes And PublicationAttributes.AllowPull) <> 0 Then
            publication.Attributes = publication.Attributes _
            Xor PublicationAttributes.AllowPull
        End If
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Send changes to the server.
        publication.CommitPropertyChanges()
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try

Dit voorbeeld schakelt DDL-replicatie uit voor een mergepublicatie.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";

MergePublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new MergePublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;


    // If we can't get the properties for this merge publication, then throw an application exception.
    if (publication.LoadProperties())
    {
        // If DDL replication is currently enabled, disable it.
        if (publication.ReplicateDdl == DdlReplicationOptions.All)
        {
            publication.ReplicateDdl = DdlReplicationOptions.None;
        }
        else
        {
            publication.ReplicateDdl = DdlReplicationOptions.All;
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publication As MergePublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' If DDL replication is currently enabled, disable it.
        If publication.ReplicateDdl = DdlReplicationOptions.All Then
            publication.ReplicateDdl = DdlReplicationOptions.None
        Else
            publication.ReplicateDdl = DdlReplicationOptions.All
        End If
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try