Visualizar e Modificar Propriedades de Publicação

Aplica-se a: SQL ServerAzure SQL Managed Instance

Este tópico descreve como visualizar e modificar propriedades de publicação no SQL Server utilizando o SQL Server Management Studio, Transact-SQL ou Objectos de Gestão de Replicação (RMO).

Limitações e Restrições

  • Algumas propriedades não podem ser modificadas após a criação de uma publicação, e outras não podem ser modificadas se existirem subscrições da publicação. As propriedades que não podem ser modificadas são apresentadas como só de leitura.

Recommendations

Usando o SQL Server Management Studio

Visualize e modifique as propriedades de publicação na caixa de diálogo Propriedades de Publicação - <Publicação>, que está disponível no SQL Server Management Studio e no Replication Monitor. Para obter informações sobre como iniciar o Replication Monitor, consulte Iniciar o Replication Monitor.

A caixa de diálogo Propriedades de Publicação - <Publicação> inclui as seguintes páginas:

  • A página Geral inclui o nome e descrição da publicação, o nome da base de dados, o tipo de publicação e as definições de validade da subscrição.

  • A página de Artigos corresponde à página de Artigos no Assistente de Novas Publicações. Use esta página para adicionar e eliminar artigos, e para alterar propriedades e filtragem de colunas para artigos.

  • A página de Linhas de Filtro corresponde à página de Linhas da Tabela de Filtro no Assistente de Novas Publicações. Use esta página para adicionar, editar e eliminar filtros de linhas estáticas para todos os tipos de publicações, e para adicionar, editar e eliminar filtros de linhas parametrizados e filtros de junção para publicações de fusão.

  • A página do snapshot permite-lhe especificar o formato e a localização do snapshot, se o snapshot deve ser comprimido, e scripts a serem executados antes e depois da aplicação do snapshot.

  • A página FTP Snapshot (para publicações de instantâneo e transacionais, e publicações de fusão para Editores com versões anteriores ao SQL Server 2005) permite-lhe especificar se os Subscritores podem transferir ficheiros de instantâneo através de FTP.

  • A página FTP Snapshot e Internet (para publicações de fusão de editores a correr SQL Server 2005 ou posterior) permite-lhe especificar se os Assinantes podem descarregar ficheiros snapshot através de FTP e se podem sincronizar subscrições via HTTPS.

  • A página de Opções de Subscrição permite-lhe definir várias opções que se aplicam a todas as subscrições. As opções variam consoante o tipo de publicação.

  • A página da Lista de Acesso à Publicação permite-lhe especificar quais os logins e grupos que podem aceder a uma publicação.

  • A página de Segurança do Agente permite-lhe aceder às definições para as contas sob as quais os seguintes agentes correm e estabelecer ligações aos computadores numa topologia de replicação: o Snapshot Agent para todas as publicações; o Agente de Leitor de Registo para todas as publicações transacionais; e o Agente de Leitor de Fila para publicações transacionais que permitem subscrições de atualização em fila.

  • A página de Partições de Dados (para publicações de fusão de editores a correr SQL Server 2005 ou posterior) permite-lhe especificar se os Assinantes de publicações com filtros parametrizados podem solicitar um snapshot caso não esteja disponível. Também permite gerar snapshots para uma ou mais partições, seja uma vez ou num calendário recorrente.

Para visualizar e modificar propriedades de publicação no Management Studio

  1. Liga-te ao Publisher no Management Studio e depois expande o nó servidor.

  2. Expanda a pasta Replicação e depois expanda a pasta Publicações Locais .

  3. Clique com o botão direito numa publicação e depois clique em Propriedades.

  4. Modifica quaisquer propriedades se necessário e depois clica em OK.

Para visualizar e modificar propriedades de publicação no Replication Monitor

  1. Expanda um grupo Publisher no painel esquerdo do Replication Monitor e depois expanda um Publisher.

  2. Clique com o botão direito numa publicação e depois clique em Propriedades.

  3. Modifica quaisquer propriedades se necessário e depois clica em OK.

Usando Transact-SQL

As publicações podem ser modificadas e as suas propriedades devolvidas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados que utiliza dependerão do tipo de publicação.

Para visualizar as propriedades de um snapshot ou publicação transacional

  1. Execute sp_helppublication, especificando o nome da publicação para o parâmetro @publication . Se não especificar este parâmetro, a informação sobre todas as publicações do Publisher é devolvida.

Para alterar as propriedades de um snapshot ou publicação transacional

  1. Execute sp_changepublication, especificando a propriedade de publicação para alterar o parâmetro @property e o novo valor desta propriedade no parâmetro @value .

    Note

    Se a alteração exigir a geração de um novo snapshot, deve também especificar um valor de 1 para @force_invalidate_snapshot, e se a alteração exigir que os Subscritores sejam reinicializados, deve especificar um valor de 1 para @force_reinit_subscription. Para mais informações sobre as propriedades que, quando alteradas, requerem um novo snapshot ou reinicialização, consulte Alterar Publicação e Propriedades do Artigo.

Para visualizar as propriedades de uma publicação de fusão

  1. Execute sp_helpmergepublication, especificando o nome da publicação para o parâmetro @publication . Se não especificar este parâmetro, a informação sobre todas as publicações do Publisher é devolvida.

Para alterar as propriedades de uma publicação de fusão

  1. Execute sp_changemergepublication, especificando a propriedade de publicação que está a ser alterada no parâmetro @property e o novo valor desta propriedade no parâmetro @value .

    Note

    Se a alteração exigir a geração de um novo snapshot, deve também especificar um valor de 1 para @force_invalidate_snapshot, e se a alteração exigir que os Subscritores sejam reinicializados, deve especificar um valor de 1 para @force_reinit_subscription Para mais informações sobre as propriedades que, quando alteradas, exigem um novo snapshot ou reinicialização, ver Alterar Propriedades de Publicação e Artigo.

Para ver as propriedades de um snapshot

  1. Execute sp_helppublication_snapshot, especificando o nome da publicação para o parâmetro @publication .

Para alterar as propriedades de um snapshot

  1. Execute sp_changepublication_snapshot, especificando uma ou mais das novas propriedades do snapshot para os parâmetros apropriados.

Exemplos (Transact-SQL)

Este exemplo de replicação transacional devolve as propriedades da publicação.

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

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

Este exemplo de replicação transacional desativa a replicação do esquema para a publicação.

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

Este exemplo de replicação por fusão devolve as propriedades da publicação.

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

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

Este exemplo de replicação de fusão desativa a replicação de esquemas para a publicação.

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

Utilização de Objetos de Gestão de Replicação (RMO)

Pode modificar publicações e aceder às suas propriedades programaticamente usando Objetos de Gestão de Replicação (RMO). As classes RMO que utiliza para visualizar ou modificar propriedades de publicação dependem do tipo de publicação.

Para visualizar ou modificar as propriedades de um snapshot ou de uma publicação transacional

  1. Crie uma conexão com o Publisher usando a classe ServerConnection.

  2. Crie uma instância da TransPublication classe, defina as Name propriedades e DatabaseName para a publicação e defina a ConnectionContext propriedade para a ligação criada no passo 1.

  3. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de publicação na etapa 2 foram definidas incorretamente ou a publicação não existe.

  4. (Opcional) Para alterar propriedades, defina um novo valor para uma ou mais das propriedades configuráveis. Utilize o operador lógico AND (& em Microsoft Visual C# e And em Microsoft Visual Basic) para determinar se um determinado valor está definido para a propriedade . Use o operador OR lógico inclusivo (|em Visual C# e Or em Visual Basic) e o operador lógico exclusivo OR (^em Visual C# e Xor no Visual Basic) para alterar os PublicationAttributes valores da Attributes propriedade.

  5. (Opcional) Se especificaste um valor de true para CachePropertyChanges, chama o CommitPropertyChanges método para confirmar as alterações no servidor. Se especificar um valor de false para CachePropertyChanges (o padrão), as alterações são enviadas imediatamente para o servidor.

Para visualizar ou modificar propriedades de uma publicação de fusão

  1. Crie uma conexão com o Publisher usando a classe ServerConnection.

  2. Crie uma instância da MergePublication classe, defina as Name propriedades e DatabaseName para a publicação e defina a ConnectionContext propriedade para a ligação criada no passo 1.

  3. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de publicação na etapa 2 foram definidas incorretamente ou a publicação não existe.

  4. (Opcional) Para alterar propriedades, defina um novo valor para uma ou mais das propriedades configuráveis. Utilize o operador lógico AND (& em Visual C# e And em Visual Basic) para determinar se um valor está definido na propriedade . Use o operador OR lógico inclusivo (|em Visual C# e Or em Visual Basic) e o operador lógico exclusivo OR (^em Visual C# e Xor no Visual Basic) para alterar os PublicationAttributes valores da Attributes propriedade.

  5. (Opcional) Se especificaste um valor de true para CachePropertyChanges, chama o CommitPropertyChanges método para confirmar as alterações no servidor. Se especificar um valor de false para CachePropertyChanges (o padrão), as alterações são enviadas imediatamente para o servidor.

Exemplos (RMO)

Este exemplo define atributos de publicação para uma publicação transacional. As alterações são armazenadas em cache até serem enviadas explicitamente para o servidor.

// 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

Este exemplo desativa a replicação DDL para uma publicação de fusão.

// 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