Partilhar via


sp_marksubscriptionvalidation (Transact-SQL)

Marca a transação aberta atual para ser uma transação de validação do nível de assinatura para o assinante especificado. Esse procedimento armazenado é executado no Publicador, no banco de dados de publicação.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

sp_marksubscriptionvalidation [ @publication = ] 'publication'
        , [ @subscriber = ] 'subscriber'
        , [ @destination_db = ] 'destination_db'
    [ , [ @publisher = ] 'publisher' ]

Argumentos

  • [ @publication= ] 'publication'
    É o nome da publicação. publication é sysname, sem padrão.

  • [ @subscriber= ] 'subscriber'
    É o nome do Assinante. subscriber é sysname, sem padrão.

  • [ @destination_db=] 'destination_db'
    É o nome do banco de dados de destino. destination_db é sysname, sem padrão.

  • [ @publisher= ] 'publisher'
    Especifica um Publicador não-MicrosoftSQL Server. publisher é sysname, com um padrão de NULL.

    ObservaçãoObservação

    publisher não deveria ser usado para uma publicação que pertence a um Publicador SQL Server.

Valores de código de retorno

0 (êxito) ou 1 (falha)

Comentários

sp_marksubscriptionvalidation é usado em replicação transacional.

sp_marksubscriptionvalidation não oferece suporte a Assinantes não-SQL Server.

Para Publicadores não-SQL Server, você não pode executar sp_marksubscriptionvalidation de dentro uma transação explícita. Isso porque transações explícitas não têm suporte em conexão de servidor vinculada usada para acessar o Editor.

sp_marksubscriptionvalidation deve ser usado com sp_article_validation (Transact-SQL), especificando um valor de 1 para subscription_level, e pode ser usado com outras chamadas para sp_marksubscriptionvalidation para marcar a transação atual aberta para outros assinantes.

Permissões

Somente membros da função de servidor fixa sysadmin ou da função de banco de dados fixa db_owner podem executar sp_marksubscriptionvalidation.

Exemplo

A consulta seguinte pode ser aplicada ao banco de dados de publicação para publicar comandos de validação de nível de assinatura. Esses comandos são retirados pelos Distribution Agents de Assinantes especificados. Observe que a primeira transação valida o artigo 'art1', enquanto a segunda transação valida 'art2'. Observe também que as chamadas para sp_marksubscriptionvalidation e sp_article_validation (Transact-SQL) foram encapsuladas em uma transação. É recomendável somente uma chamada para sp_article_validation (Transact-SQL) por transação. Isso porque sp_article_validation (Transact-SQL) mantém um bloqueio de tabela compartilhada na tabela de origem durante a transação. A transação deve ser curta para maximizar simultaneidade.

begin tran

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub', @destination_db = 'SubDB'

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub2', @destination_db = 'SubDB'

exec sp_article_validation @publication = 'pub1', @article = 'art1',
 @rowcount_only = 0, @full_or_fast = 0, @shutdown_agent = 0,
 @subscription_level = 1

commit tran

begin tran

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub', @destination_db = 'SubDB'

exec sp_marksubscriptionvalidation @publication = 'pub1',
 @subscriber = 'Sub2', @destination_db = 'SubDB'

exec sp_article_validation @publication = 'pub1', @article = 'art2',
 @rowcount_only = 0, @full_or_fast = 0, @shutdown_agent = 0,
 @subscription_level = 1

commit tran