Partilhar via


sp_marksubscriptionvalidation (Transact-SQL)

Aplica-se: SQL Server

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 publicador.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

@publication [ = ] N'publicação'

O nome da publicação. @publication é sysname, sem padrão.

@subscriber [ = ] N'assinante'

O nome do Assinante. @subscriber é sysname, sem padrão.

@destination_db [ = ] N'destination_db'

O nome do banco de dados de destino. @destination_db é sysname, sem padrão.

@publisher [ = ] N'editor'

Especifica um Publicador não-SQL Server. @publisher é sysname, com um padrão de NULL.

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

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Comentários

sp_marksubscriptionvalidation é usado na replicação transacional.

sp_marksubscriptionvalidation não dá suporte a Assinantes não SQL Server.

Para Publicadores que não são do SQL Server, você não pode executar sp_marksubscriptionvalidation de dentro de uma transação explícita. Isso ocorre porque não há suporte para transações explícitas na conexão de servidor vinculada usada para acessar o Publicador.

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

Permissões

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

Exemplos

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. A primeira transação valida o artigo art1, enquanto a segunda transação valida art2. As chamadas para sp_marksubscriptionvalidation e sp_article_validation são encapsuladas em uma transação. Recomendamos apenas uma chamada para sp_article_validation por transação. Isso ocorre porque sp_article_validation 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 TRANSACTION;

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 TRANSACTION;

BEGIN TRANSACTION;

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 TRANSACTION;