Partilhar via


Exibir e modificar as propriedades da publicação

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

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

Neste tópico

Antes de começar

Limitações e Restrições

  • Algumas propriedades não podem ser modificadas após uma publicação ter sido criada, e outras não podem ser modificadas se houverem assinaturas na publicação. As propriedades que não podem ser definidas são exibidas como somente leitura.

Recomendações

Como usar o SQL Server Management Studio.

Exibir e modificar 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 Start the Replication Monitor (Iniciar o Replication Monitor).

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

  • A página Geral inclui o nome e descrição da publicação, o nome do banco de dados, o tipo da publicação, e as configurações para expiração da assinatura.

  • A página Artigos corresponde à página Artigos no Assistente para Nova Publicação. Use essa página para adicionar e excluir artigos e para alterar propriedades e filtros de coluna para artigos.

  • A página Filtrar Linhas corresponde à página Filtrar Linhas de Tabela no Assistente para Nova Publicação. Use essa página para adicionar, editar e excluir filtros de linhas estáticas para todos os tipos de publicações, e para adicionar, editar e excluir filtros de linhas com parâmetros e associar filtros para publicações de mesclagem.

  • A página Instantâneo permite que você especifique o formato e o local do instantâneo, se o instantâneo deve estar compactado e scripts para serem executados antes e depois que o instantâneo for aplicado.

  • A página Instantâneo FTP (para publicações transacionais e de instantâneo e publicações de mesclagem para versões de Publicadores em execução antes do SQL Server 2005) permite que você especifique se os Assinantes podem baixar arquivos através de FTP (Protocolo de Transferência de Arquivo).

  • A página Instantâneo de FTP e Internet (para publicações de mesclagem de Publicadores executando o SQL Server 2005 ou versões posteriores) permite que você especifique se os Assinantes podem baixar arquivos de instantâneo através de FTP, e se os Assinantes podem sincronizar as assinaturas através de HTTPS.

  • A página Opções de Assinatura permite que você possa definir um número de opções que se aplicam à todas as assinaturas. As opções diferem dependendo do tipo de publicação.

  • A página Lista de Acesso à Publicação permite que você especifique quais logons e grupos podem acessar uma publicação.

  • A página Segurança do Agente permite que você acesse as configurações para as contas sob as quais os seguintes agentes executam e fazem conexões com os computadores em uma topologia de replicação: O Agente de Instantâneo para todas as publicações; o Log Reader Agent para todas as publicações transacionais e o Queue Reader Agent para publicações transacionais que permitem assinaturas de atualização enfileiradas.

  • A página Partições de Dados (para publicações de mesclagem de Publicadores executando o SQL Server 2005 ou posterior) permite que você especifique se os Assinantes das publicações com filtros com parâmetros podem solicitar uma instantâneo, se um não estiver disponível. Ele também permite que você gere instantâneos para uma ou mais partições uma vez ou em uma agenda recorrente.

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

  1. Conecte-se ao Publicador no Management Studio e, em seguida, expanda o nó do servidor.

  2. Expanda a pasta Replicação e, em seguida, a pasta Publicações Locais .

  3. Clique com o botão direito em uma publicação, em seguida, clique em Propriedades.

  4. Modifique propriedades, se necessário, depois clique em OK.

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

  1. Expanda um Grupo do publicador no painel esquerdo do Replication Monitor e, depois, expanda um Publicador.

  2. Clique com o botão direito em uma publicação, em seguida, clique em Propriedades.

  3. Modifique propriedades, se necessário, depois clique em OK.

Usando o Transact-SQL

Publicações podem ser modificadas e suas propriedades retornadas programaticamente usando-se procedimentos armazenados de replicação. Os procedimentos armazenados usados dependerão do tipo de publicação.

Para visualizar as propriedades de uma publicação de instantâneo ou transacional

  1. Execute sp_helppublication, especificando o nome da publicação para o parâmetro @publication . Se você não especificar esse parâmetro, as informações sobre todas as publicações no Publicador serão retornadas.

Para alterar as propriedades de uma publicação de instantâneo ou transacional

  1. Execute sp_changepublication, especificando a propriedade de publicação a ser alterada no parâmetro @property e o novo valor dessa propriedade no parâmetro @value .

    Observação

    Se a alteração exigir a geração de um novo instantâneo, deve-se também especificar um valor de 1 para @force_invalidate_snapshot, e se a alteração exigir que os Assinantes sejam reinicializados, deve-se especificar um valor de 1 para @force_reinit_subscription. Para obter mais informações sobre as propriedades que, quando alteradas, exigem um novo instantâneo ou uma nova reinicialização, consulte Alterar propriedades da publicação e do artigo.

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

  1. Execute sp_helpmergepublication, especificando o nome da publicação para o parâmetro @publication . Se você não especificar esse parâmetro, as informações sobre todas as publicações no Publicador serão retornadas.

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

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

    Observação

    Se a alteração exigir a geração de um instantâneo, você também precisará especificar um valor igual a 1 em @force_invalidate_snapshot, e se a alteração exigir que os Assinantes sejam reinicializados, você precisará especificar um valor igual a 1 em @force_reinit_subscription. Para obter mais informações sobre as propriedades que, quando alteradas, exigem um novo instantâneo ou uma reinicialização, confira Alterar as propriedades da publicação e do artigo.

Para visualizar as propriedades de um instantâneo

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

Para alterar as propriedades de um instantâneo

  1. Execute sp_changepublication_snapshot, especificando uma ou mais das propriedades de instantâneo novas para os parâmetros de instantâneo apropriados.

Exemplos (Transact-SQL)

Esse exemplo de replicação transacional retorna as propriedades da publicação.

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

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

Esse exemplo de replicação transacional desabilita a replicação de 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

Esse exemplo de replicação de mesclagem retorna as propriedades da publicação.

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

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

Esse exemplo de replicação de mesclagem desabilita a replicação de esquema 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

Usando o RMO (Replication Management Objects)

Você pode modificar as publicações e acessar suas propriedades programaticamente, usando o RMO (Replication Management Objects). As classes RMO que você usa para visualizar ou modificar as propriedades da publicação, dependem do tipo da publicação.

Para visualizar ou modificar as propriedades de um instantâneo ou publicação transacional

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

  2. Crie uma instância da classe TransPublication , defina Name e propriedades DatabaseName para a publicação, e defina a propriedade ConnectionContext para a conexão criada no etapa 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 as propriedades, defina um novo valor para uma ou mais propriedades definíveis. Use o operador lógico AND (* no Microsoft Visual C# e And no Microsoft Visual Basic) para determinar se um dado valor PublicationAttributes está definido para a propriedade Attributes. Use o operador OR de lógica inclusiva (| no Visual C# e Or no Visual Basic) e o operador OR de lógica exclusiva (^ no Visual C# e Xor no Visual Basic) para alterar os valores PublicationAttributes para a propriedade Attributes .

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

Para visualizar ou modificar as propriedades de uma publicação de mesclagem

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

  2. Crie uma instância da classe MergePublication , defina Name e propriedades DatabaseName para a publicação, e defina a propriedade ConnectionContext para a conexão criada no etapa 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 as propriedades, defina um novo valor para uma ou mais propriedades definíveis. Use o operador lógico AND (* no Visual C# e And no Visual Basic) para determinar se um dado valor PublicationAttributes está definido para a propriedade Attributes. Use o operador OR de lógica inclusiva (| no Visual C# e Or no Visual Basic) e o operador OR de lógica exclusiva (^ no Visual C# e Xor no Visual Basic) para alterar os valores PublicationAttributes para a propriedade Attributes .

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

Exemplos (RMO)

Esse exemplo define atributos de publicação para uma publicação transacional. As alterações são armazenadas em cache até que sejam explicitamente enviadas ao 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

Esse exemplo desabilita a replicação DDL para uma publicação de mesclagem.

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