Partilhar via


Validar dados no assinante

Este tópico descreve como validar os dados no Assinante no SQL Server 2012 usando SQL Server Management Studio, Transact-SQL, ou RMO (Replication Management Objects).

A validação de dados é um processo de três etapas:

  1. Uma única assinatura ou todas as assinaturas para uma publicação são marcadas para validação. Marque as assinaturas para validação nas caixas de diálogo Validar Assinatura, Validar Assinaturas e Validar Todas as Assinaturas que estão disponíveis na pasta Publicações Locais e na pasta Assinaturas Locais no Microsoft SQL Server Management Studio. Você também pode marcar assinaturas da guia Todas as Assinaturas, a guia Lista de Observação da Assinatura e o nó de publicações no Replication Monitor. Para obter informações sobre como iniciar o Replication Monitor, consulte Iniciar o Replication Monitor.

  2. Uma assinatura é validada da próxima vez em que for sincronizada pelo Agente de Distribuição (para replicação transacional) ou pelo Agente de Mesclagem (replicação de mesclagem). O Agente de Distribuição normalmente é executado continuamente, nesse caso a validação ocorre imediatamente; o Agente de Mesclagem normalmente é executado por solicitação, neste caso a validação ocorrerá após você executar o agente.

  3. Exibir os resultados de validação:

    • Nas janelas de detalhes do Replication Monitor: na guia Histórico do Distribuidor para o Assinante para replicação transacional e na guia Histórico de Sincronização para replicação de mesclagem.

    • Na caixa de diálogo Exibir Status de Sincronização no Management Studio.

Neste tópico

  • Antes de começar:

    Limitações e restrições

  • Para validar dados no Assinante, usando:

    SQL Server Management Studio

    Transact-SQL

    RMO (Replication Management Objects)

Antes de começar

Limitações e restrições

  • Os procedimentos para o Replication Monitor são somente para assinaturas push porque as assinaturas pull não podem ser sincronizadas no Replication Monitor. Porém, você pode marcar uma assinatura para validação e exibir os resultados da validação para assinaturas pull no Replication Monitor.

  • Os resultados da validação indicam se a validação obteve êxito ou se falhou, porém não especifica quais linhas falharam a validação caso tenha ocorrido uma falha. Para comparar dados no Publicador e no Assinante, use o Utilitário tablediff. Para obter mais informações sobre como usar este utilitário com dados replicados, consulte Comparar tabelas replicadas para descobrir diferenças (Programação de replicação).

Ícone de seta usado com o link Voltar ao Início[Top]

Usando o SQL Server Management Studio

Para validar dados para assinaturas para uma publicação transacional (Management Studio)

  1. Conecte-se ao Publicador no SQL Server Management Studio e 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 do mouse na publicação para a qual você quer validar assinaturas e então clique em Validar Assinaturas.

  4. Na caixa de diálogo Validar Assinaturas, selecione quais assinatura validar:

    • Selecione Validar todas as assinaturas SQL Server

    • Selecione Validar estas assinaturas e então selecione uma ou mais assinaturas.

  5. Para especificar o tipo de validação a ser executado (contagem de linha ou contagem de linha e soma de verificação) clique em Opções de Validação e então especifique as opções na caixa de diálogo Opções de Validação de Assinatura.

  6. Clique em OK.

  7. Exiba os resultados da validação no Replication Monitor ou a caixa de diálogo Exibir Status da Sincronização. Para cada assinatura:

    1. Expanda a publicação, clique com o botão direito do mouse na assinatura e então clique em Exibir Status da Sincronização.

    2. Se o agente não estiver sendo executado clique em Iniciar na caixa de diálogo Exibir Status da Sincronização. A caixa de diálogo exibirá mensagens informativas relacionadas à validação.

    Se você não vir nenhuma mensagem relacionada à validação, o agente já registrou uma mensagem subsequente. Neste caso, exiba os resultados de validação no Replication Monitor. Para obter mais informações, consulte os procedimentos de instruções do Replication Monitor neste tópico.

Para validar dados para uma única assinatura para uma publicação de mesclagem (Management Studio)

  1. Conecte-se ao Publicador no SQL Server Management Studio e expanda o nó do servidor.

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

  3. Expanda a publicação para a qual você quer validar assinaturas, clique com o botão direito do mouse na assinatura e então clique em Validar Assinatura.

  4. Na caixa de diálogoValidar Assinatura, selecione Validar esta assinatura.

  5. Para especificar o tipo de validação a ser executado (contagem de linha ou contagem de linha e soma de verificação) clique em Opções e então especifique as opções na caixa de diálogo Opções de Validação de Assinatura.

  6. Clique em OK.

  7. Exiba os resultados da validação no Replication Monitor ou a caixa de diálogo Exibir Status da Sincronização:

    1. Expanda a publicação, clique com o botão direito do mouse na assinatura e então clique em Exibir Status da Sincronização.

    2. Se o agente não estiver sendo executado clique em Iniciar na caixa de diálogo Exibir Status da Sincronização. A caixa de diálogo exibirá mensagens informativas relacionadas à validação.

    Se você não vir nenhuma mensagem relacionada à validação, o agente já registrou uma mensagem subsequente. Neste caso, exiba os resultados de validação no Replication Monitor. Para obter mais informações, consulte os procedimentos de instruções do Replication Monitor neste tópico.

Para validar dados para todas as assinaturas para uma publicação de mesclagem (Management Studio)

  1. Conecte-se ao Publicador no SQL Server Management Studio e 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 do mouse na publicação para a qual você quer validar assinaturas e então clique em Validar Todas as Assinaturas.

  4. Na caixa de diálogo Validar Todas as Assinaturas, especifique o tipo de validação a ser executado (contagem de linha ou contagem de linha e soma de verificação).

  5. Clique em OK.

  6. Exiba os resultados da validação no Replication Monitor ou a caixa de diálogo Exibir Status da Sincronização. Para cada assinatura:

    1. Expanda a publicação, clique com o botão direito do mouse na assinatura e então clique em Exibir Status da Sincronização.

    2. Se o agente não estiver sendo executado clique em Iniciar na caixa de diálogo Exibir Status da Sincronização. A caixa de diálogo exibirá mensagens informativas relacionadas à validação.

    Se você não vir nenhuma mensagem relacionada à validação, o agente já registrou uma mensagem subsequente. Neste caso, exiba os resultados de validação no Replication Monitor. Para obter mais informações, consulte os procedimentos de instruções do Replication Monitor neste tópico.

Para validar dados para todas as inscrições push para uma publicação transacional (Replication Monitor)

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

  2. Clique com o botão direito do mouse na publicação para a qual você quer validar assinaturas e então clique em Validar Assinaturas.

  3. Na caixa de diálogo Validar Assinaturas, selecione quais assinatura validar:

    • Selecione Validar todas as assinaturas SQL Server

    • Selecione Validar estas assinaturas e então selecione uma ou mais assinaturas.

  4. Para especificar o tipo de validação a ser executado (contagem de linha ou contagem de linha e soma de verificação) clique em Opções de Validação e então especifique as opções na caixa de diálogo Opções de Validação de Assinatura.

  5. Clique em OK.

  6. Clique na guia Todas as Assinaturas.

  7. Exiba os resultados da validação. Para cada assinatura push:

    1. Se o agente não estiver sendo executado, clique com o botão direito do mouse na assinatura e então clique em Iniciar Sincronização.

    2. Clique com o botão direito do mouse na assinatura e, em seguida, clique em Exibir Detalhes.

    3. Exiba informações na guia Histórico de Distribuidor para o Assinante na área de texto Ações na seção selecionada.

Para validar dados para uma única assinatura push para uma publicação de mesclagem (Replication Monitor)

  1. No Replication Monitor, expanda um Grupo do publicador no painel esquerdo, expanda um Publicador e, depois, clique em uma publicação.

  2. Clique na guia Todas as Assinaturas.

  3. Clique com o botão direito do mouse na assinatura que você quer validar, depois clique em Validar Assinatura.

  4. Na caixa de diálogoValidar Assinatura, selecione Validar esta assinatura.

  5. Para especificar o tipo de validação a ser executado (contagem de linha ou contagem de linha e soma de verificação) clique em Opções e então especifique as opções na caixa de diálogo Opções de Validação de Assinatura.

  6. Clique em OK.

  7. Clique na guia Todas as Assinaturas.

  8. Exiba os resultados da validação:

    1. Se o agente não estiver sendo executado, clique com o botão direito do mouse na assinatura e então clique em Iniciar Sincronização.

    2. Clique com o botão direito do mouse na assinatura e, em seguida, clique em Exibir Detalhes.

    3. Exiba informações na guia Histórico de Sincronização na área de texto Última mensagem da sessão selecionada.

Para validar dados para todas as assinaturas push para uma publicação de mesclagem (Replication Monitor)

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

  2. Clique com o botão direito do mouse na publicação para a qual você quer validar assinaturas e então clique em Validar Todas as Assinaturas.

  3. Na caixa de diálogo Validar Todas as Assinaturas, especifique o tipo de validação a ser executado (contagem de linha ou contagem de linha e soma de verificação).

  4. Clique em OK.

  5. Clique na guia Todas as Assinaturas.

  6. Exiba os resultados da validação. Para cada assinatura push:

    1. Se o agente não estiver sendo executado, clique com o botão direito do mouse na assinatura e então clique em Iniciar Sincronização.

    2. Clique com o botão direito do mouse na assinatura e, em seguida, clique em Exibir Detalhes.

    3. Exiba informações na guia Histórico de Sincronização na área de texto Última mensagem da sessão selecionada.

Ícone de seta usado com o link Voltar ao Início[Top]

Usando Transact-SQL

Para validar dados para todos os artigos em uma publicação transacional

  1. No Publicador do banco de dados de publicação, execute sp_publication_validation (Transact-SQL). Especifique @publication e um dos valores seguintes para @rowcount_only:

    • 1 - apenas verifica número de linhas (o padrão)

    • 2 - número de linhas e soma de verificação binária.

    ObservaçãoObservação

    Ao executar sp_publication_validation (Transact-SQL), o sp_article_validation (Transact-SQL) é executado para cada artigo na publicação. Para executar o sp_publication_validation (Transact-SQL) com êxito, é necessário ter permissões SELECT em todas as colunas nas tabelas base publicadas.

  2. (Opcional) Iniciar o Agente de Distribuição para cada assinatura se já não estiver em execução. Para obter mais informações, consulte Sincronizar uma assinatura pull e Sincronizar uma assinatura push.

  3. Verifique a saída de agente para o resultado da validação. Para obter mais informações, consulte Validar os dados replicados.

Para validar dados para um único artigo em uma publicação transacional

  1. No Publicador do banco de dados de publicação, execute sp_article_validation (Transact-SQL). Especifique @publication, o nome do artigo como @article e um dos valores seguintes como @rowcount_only:

    • 1 - apenas verifica número de linhas (o padrão)

    • 2 - número de linhas e soma de verificação binária.

    ObservaçãoObservação

    Para executar o sp_article_validation (Transact-SQL) com êxito, é necessário ter permissões SELECT em todas as colunas na tabela base publicada.

  2. (Opcional) Iniciar o Agente de Distribuição para cada assinatura se já não estiver em execução. Para obter mais informações, consulte Sincronizar uma assinatura pull e Sincronizar uma assinatura push.

  3. Verifique a saída de agente para o resultado da validação. Para obter mais informações, consulte Validar os dados replicados.

Para validar dados de um único assinante para uma publicação transacional

  1. No Publicador do banco de dados de publicação, abra uma transação explícita usando BEGIN TRANSACTION (Transact-SQL).

  2. No Publicador do banco de dados de publicação, execute sp_marksubscriptionvalidation (Transact-SQL). Especifique a publicação como @publication, o nome do Assinante como @subscriber, e o nome do banco de dados da assinatura como @destination_db.

  3. (Opcional) Repita a etapa 2 para cada assinatura que é validada.

  4. No Publicador do banco de dados de publicação, execute sp_article_validation (Transact-SQL). Especifique @publication, o nome do artigo como @article e um dos valores seguintes como @rowcount_only:

    • 1 - apenas verifica número de linhas (o padrão)

    • 2 - número de linhas e soma de verificação binária.

    ObservaçãoObservação

    Para executar o sp_article_validation (Transact-SQL) com êxito, é necessário ter permissões SELECT em todas as colunas na tabela base publicada.

  5. No Publicador do banco de dados de publicação, confirme a transação usando COMMIT TRANSACTION (Transact-SQL).

  6. (Opcional) Repita as etapas 1 a 5 para cada artigo que é validado.

  7. (Opcional) Iniciar o Agente de Distribuição se já não estiver em execução. Para obter mais informações, consulte Sincronizar uma assinatura pull e Sincronizar uma assinatura push.

  8. Verifique a saída de agente para o resultado da validação. Para obter mais informações, consulte Validar dados no assinante.

Para validar dados em todas as assinaturas para uma publicação de mesclagem

  1. No Publicador do banco de dados de publicação, execute sp_validatemergepublication (Transact-SQL). Especifique @publication e um dos valores a seguir para @level:

    • 1 - apenas validação de número de linhas.

    • 3 - validação de soma de verificação binária de número de linhas.

    Isso marca todas as assinaturas para validação.

  2. Inicie o agente de mesclagem para cada assinatura. Para obter mais informações, consulte Sincronizar uma assinatura pull e Sincronizar uma assinatura push.

  3. Verifique a saída de agente para o resultado da validação. Para obter mais informações, consulte Validar dados no assinante.

Para validar dados nas assinaturas selecionadas para uma publicação de mesclagem

  1. No Publicador do banco de dados de publicação, execute sp_validatemergesubscription (Transact-SQL). Especifique @publication, o nome do Assinante como @subscriber, o nome do banco de dados de assinatura como @subscriber_db, e um dos seguintes valores para @level:

    • 1 - apenas validação de número de linhas.

    • 3 - validação de soma de verificação binária de número de linhas.

    Isso marca a assinatura selecionada para validação.

  2. Inicie o agente de mesclagem para cada assinatura. Para obter mais informações, consulte Sincronizar uma assinatura pull e Sincronizar uma assinatura push.

  3. Verifique a saída de agente para o resultado da validação.

  4. Repita as etapas 1 a 3 para cada assinatura que é validada.

ObservaçãoObservação

A assinatura para uma publicação de mesclagem também pode ser validada especificando-se o parâmetro -Validate ao executar o Replication Merge Agent.

Para validar dados em uma assinatura usando parâmetros do Agente de Mesclagem

  • Inicie o Agente de Mesclagem no Assinante (assinatura pull) ou no Distribuidor (assinatura push) do prompt de comando em um dos seguintes modos.

    • Especificando o valor de 1 (número de linhas) ou 3 (número de linhas e soma de verificação binária) para o parâmetro-Validate.

    • Especificando validação de número de linhas ou validação de número de linhas e de soma de verificação para o parâmetro - ProfileName.

    Para obter mais informações, consulte Sincronizar uma assinatura pull ou Sincronizar uma assinatura push.

Ícone de seta usado com o link Voltar ao Início[Top]

Usando o RMO (Replication Management Objects)

A replicação permite que você use RMO (Replication Management Objects) para validar programaticamente os dados que no Assinante correspondam aos dados do Publicador. Os objetos usados dependem do tipo de topologia de replicação. A replicação transacional necessita de validação em todas as assinaturas de uma publicação.

ObservaçãoObservação

Para obter um exemplo, consulte Exemplo (RMO) posteriormente nesta seção.

Para validar dados para todos os artigos em uma publicação transacional

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

  2. Crie uma instância da classe TransPublication. Defina as propriedades Name e DatabaseName para a publicação. Defina a propriedade ConnectionContext para a conexão criada na etapa 1.

  3. Chame o método LoadProperties para obter as propriedades remanescentes 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. Chame o método ValidatePublication. Passe o seguinte:

    Isso marca os artigos para a validação.

  5. Se ainda não estiver executando, inicie o Agente de Distribuição para sincronizar cada assinatura. Para obter mais informações, consulte Sincronizar uma assinatura push ou Sincronizar uma assinatura pull. O resultado da operação de validação é escrito no histórico do agente. Para obter mais informações, consulte Replicação de monitoramento.

Para validar dados em todas as assinaturas para 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 as propriedades Name e DatabaseName para a publicação. Defina a propriedade ConnectionContext para a conexão criada na etapa 1.

  3. Chame o método LoadProperties para obter as propriedades remanescentes 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. Chame o método ValidatePublication. Passe o ValidationOption desejado.

  5. Execute o Agente de Mesclagem para cada assinatura iniciar a validação ou espere pela próxima execução de agente marcada. Para obter mais informações, consulte Sincronizar uma assinatura pull e Sincronizar uma assinatura push. O resultado da operação de validação é gravado no histórico de agente que você exibe usando o Replication Monitor. Para obter mais informações, consulte Replicação de monitoramento.

Para validar os dados em uma única assinatura em 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 as propriedades Name e DatabaseName para a publicação. Defina a propriedade ConnectionContext para a conexão criada na etapa 1.

  3. Chame o método LoadProperties para obter as propriedades remanescentes 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. Chame o método ValidateSubscription. Passe o nome do Assinante e banco de dados de assinatura que estão sendo validados e o ValidationOption desejado.

  5. Execute o Agente de Mesclagem para a assinatura iniciar a validação ou espere pela próxima execução de agente marcada. Para obter mais informações, consulte Sincronizar uma assinatura pull e Sincronizar uma assinatura push. O resultado da operação de validação é gravado no histórico de agente que você exibe usando o Replication Monitor. Para obter mais informações, consulte Replicação de monitoramento.

Exemplo (RMO)

Este exemplo marca todas as assinatura em uma publicação transacional para a validação de número de linhas.

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

            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;

                // If we can't get the properties for this publication, 
                // throw an application exception.
                if (publication.LoadProperties())
                {
                    // Initiate validataion for all subscriptions to this publication.
                    publication.ValidatePublication(ValidationOption.RowCountOnly,
                        ValidationMethod.ConditionalFast, false);

                    // If not already running, start the Distribution Agent at each 
                    // Subscriber to synchronize and validate the subscriptions.
                }
                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(
                    "Subscription validation could not be initiated.", 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 = "AdventureWorks2012"

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

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then

        ' Initiate validataion for all subscriptions to this publication.
        publication.ValidatePublication(ValidationOption.RowCountOnly, _
         ValidationMethod.ConditionalFast, False)

        ' If not already running, start the Distribution Agent at each 
        ' Subscriber to synchronize and validate the subscriptions.
    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( _
     "Subscription validation could not be initiated.", ex)
Finally
    conn.Disconnect()
End Try

Este exemplo marca uma assinatura específica em uma publicação de mesclagem para validação de número de linhas.

         // Define the server, database, and publication names
            string publisherName = publisherInstance;
            string publicationName = "AdvWorksSalesOrdersMerge";
            string publicationDbName = "AdventureWorks2012";
            string subscriberName = subscriberInstance;
            string subscriptionDbName = "AdventureWorks2012Replica";

            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())
                {
                    // Initiate validation of the specified subscription.
                    publication.ValidateSubscription(subscriberName,
                        subscriptionDbName, ValidationOption.RowCountOnly);
                    
                    // Start the Merge Agent to synchronize and validate the subscription.
                }
                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(String.Format(
                    "The subscription at {0} to the {1} publication could not " +
                    "be validated.", subscriberName, publicationName), 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 = "AdventureWorks2012"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"

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
        ' Initiate validation of the specified subscription.
        publication.ValidateSubscription(subscriberName, _
         subscriptionDbName, ValidationOption.RowCountOnly)

        ' Start the Merge Agent to synchronize and validate the subscription.
    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(String.Format( _
     "The subscription at {0} to the {1} publication could not " + _
     "be validated.", subscriberName, publicationName), ex)
Finally
    conn.Disconnect()
End Try

Ícone de seta usado com o link Voltar ao Início[Top]