sp_link_publication (Transact-SQL)

Применимо к:SQL Server

Задает сведения о конфигурации и безопасности, применяемые триггерами синхронизации немедленно обновляемых подписок при подключении к издателю. Эта хранимая процедура выполняется на подписчике в базе данных подписки.

Внимание

Если издатель настраивается с удаленным распространителем, то значения, передаваемые для всех аргументов, включая job_login и job_password, передаются распространителю в формате обычного (незашифрованного) текста. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в статье Включение шифрования соединений в компоненте Database Engine (диспетчер конфигурации SQL Server).

Внимание

В определенных условиях эта хранимая процедура может завершиться ошибкой, если подписчик работает под управлением Microsoft SQL Server 2005 (9.x) с пакетом обновления 1 или более поздней версии, и издатель запускает более раннюю версию. Если хранимая процедура завершается ошибкой в этом сценарии, обновите издателя до SQL Server 2005 (9.x) с пакетом обновления 1 или более поздней версии.

Соглашения о синтаксисе Transact-SQL

Синтаксис

  
sp_link_publication [ @publisher = ] 'publisher'   
        , [ @publisher_db = ] 'publisher_db'   
        , [ @publication = ] 'publication'   
        , [ @security_mode = ] security_mode  
    [ , [ @login = ] 'login' ]  
    [ , [ @password = ]'password' ]  
    [ , [ @distributor = ] 'distributor' ]  

Аргументы

[ @publisher = ] 'publisher'Имя издателя для ссылки. publisher — sysname, без значения по умолчанию.

[ @publisher_db = ] 'publisher_db'Имя базы данных издателя для ссылки. publisher_db — sysname без значения по умолчанию.

[ @publication = ] 'publication' Имя публикации для ссылки. публикацияsysname, без значения по умолчанию.

[ @security_mode = ] security_mode Режим безопасности, используемый подписчиком для подключения к удаленному издателю для немедленного обновления. security_mode является int и может быть одним из этих значений. По возможности используйте аутентификацию Windows.

значение Description
0 Использует проверку подлинности SQL Server с именем входа, указанным в этой хранимой процедуре, в качестве имени входа и пароля.

Примечание. В предыдущих версиях SQL Server этот параметр использовался для указания динамического вызова удаленной процедуры (RPC).
1 Использует контекст безопасности (проверка подлинности SQL Server или проверка подлинности Windows) пользователя, изменяющего подписчика.

Примечание. Эта учетная запись также должна существовать на издателе с достаточными привилегиями. В случае использования проверки подлинности Windows должно поддерживаться делегирование учетной записи безопасности.
2 Использует существующее имя входа связанного сервера, определенное пользователем, созданное с помощью sp_link_publication.

[ @login = ] 'login' Имя входа. Аргумент login имеет тип sysname и значение по умолчанию NULL. Этот параметр должен быть указан, если значение security_mode равно 0.

[ @password = ] 'password' Пароль. парольsysname с значением NULL по умолчанию. Этот параметр должен быть указан, если значение security_mode равно 0.

[ @distributor = ] 'distributor' Имя распространителя. распространительsysname с значением NULL по умолчанию.

Значения кода возврата

0 (успешно) или 1 (сбой)

Замечания

sp_link_publication используется немедленно обновляемыми подписками в репликации транзакций.

sp_link_publication можно использовать как для принудительной, так и для извлечения подписок. Ее можно вызывать как до, так и после создания подписки. Запись вставляется или обновляется в системной таблице MSsubscription_properties (Transact-SQL ).

Для push-подписок запись можно очистить с помощью sp_subscription_cleanup (Transact-SQL). Для подписок на вытягивание запись можно очистить с помощью sp_droppullsubscription (Transact-SQL) или sp_subscription_cleanup (Transact-SQL). Вы также можете вызвать sp_link_publication с паролем NULL, чтобы очистить запись в системной таблице MSsubscription_properties (Transact-SQL) для проблем с безопасностью.

Режим по умолчанию, применяемый для немедленного обновления подписчика при соединении с издателем, не позволяет устанавливать соединение с проверкой подлинности Windows. Для подключения в режиме с проверкой подлинности Windows на издателе должен быть настроен связанный сервер, и это соединение должно применяться для немедленного обновления подписчика. Для этого требуется, чтобы sp_link_publication запускались с security_mode = 2. В случае использования проверки подлинности Windows должно поддерживаться делегирование учетной записи безопасности.

пример

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2022';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 
 
-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2022;
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorks2022Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO

Разрешения

Только члены предопределенных ролей сервера sysadmin могут выполнять sp_link_publication.

См. также

sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)