Compartir a través de


sp_marksubscriptionvalidation (Transact-SQL)

Se aplica a: SQL Server

Marca la transacción abierta actual para que sea una transacción de validación de nivel de suscripción para el suscriptor especificado. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación. @publication es sysname, sin ningún valor predeterminado.

[ @subscriber = ] N'subscriber'

Nombre del suscriptor. @subscriber es sysname, sin ningún valor predeterminado.

[ @destination_db = ] N'destination_db'

El nombre de la base de datos de destino. @destination_db es sysname, sin ningún valor predeterminado.

[ @publisher = ] N'publisher'

Especifica un publicador que no es de SQL Server. @publisher es sysname, con un valor predeterminado de NULL.

@publisher no se debe usar para una publicación que pertenezca a un publicador de SQL Server.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_marksubscriptionvalidation se usa en la replicación transaccional.

sp_marksubscriptionvalidation no admite suscriptores que no sean de SQL Server.

En el caso de los publicadores que no son de SQL Server, no se puede ejecutar sp_marksubscriptionvalidation desde dentro de una transacción explícita. Esto se debe a que no se admiten transacciones explícitas a través de la conexión del servidor vinculado que se usa para acceder al publicador.

sp_marksubscriptionvalidation debe usarse junto con sp_article_validation, especificando un valor de 1 para @subscription_level y se puede usar con otras llamadas para sp_marksubscriptionvalidation marcar la transacción abierta actual para otros suscriptores.

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_marksubscriptionvalidation.

Ejemplos

La siguiente consulta puede aplicarse a la base de datos de publicaciones para exponer comandos de validación de suscripción. Los Agentes de distribución de los suscriptores especificados recogen estos comandos. La primera transacción valida el artículo art1, mientras que la segunda transacción valida art2. Las llamadas a sp_marksubscriptionvalidation y sp_article_validation se encapsulan en una transacción. Se recomienda solo una llamada a sp_article_validation por transacción. Esto se debe a que sp_article_validation contiene un bloqueo de tabla compartida en la tabla de origen durante la transacción. Debe mantener la transacción corta para maximizar la simultaneidad.

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;