sp_link_publication (Transact-SQL)
Задает сведения о конфигурации и безопасности, применяемые триггерами синхронизации немедленно обновляемых подписок при подключении к издателю. Эта хранимая процедура выполняется на подписчике в базе данных подписки.
Примечание по безопасности |
---|
При настройке издателя с помощью удаленного распространителя значения для всех параметров, включая job_login и job_password, отправляются распространителю в виде простого текста. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе Шифрование соединений с SQL Server. |
Важно! |
---|
При определенных условиях данная хранимая процедура может завершиться ошибкой, если подписчик выполняется на Microsoft SQL Server 2005 с пакетом обновления 1 (SP1) или более поздней версии, а издатель выполняется на более ранней версии. Если в этом случае хранимая процедура завершается ошибкой, обновите издатель до SQL Server 2005 с пакетом обновления 1 (SP1) или более поздней версии. |
Синтаксис
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'
Имя публикации для связи. Аргумент publication имеет тип sysname и не имеет значения по умолчанию.[ @security_mode= ] security_mode
Режим безопасности, который подписчик использует для подключения к удаленному издателю для немедленного обновления. Аргумент security_mode имеет тип int и может принимать одно из следующих значений. По возможности используйте проверку подлинности Windows.Значение
Описание
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'
Пароль. Аргумент password имеет тип sysname и значение по умолчанию NULL. Этот аргумент должен быть указан, если security_mode равно 0.[ @distributor =] 'distributor'
Имя распространителя. Аргумент distributor имеет тип sysname и значение по умолчанию NULL.
Значения кодов возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Замечания
Процедура sp_link_publication применяется для немедленного обновления подписок при репликации транзакций.
С помощью процедуры sp_link_publication можно как принудительно отправлять подписки, так и подписывать по запросу. Ее можно вызывать как до, так и после создания подписки. Запись вставляется или обновляется в системной таблице MSsubscription_properties (Transact-SQL).
Для принудительных подписок запись можно очистить с помощью процедуры sp_subscription_cleanup (Transact-SQL). Для подписок по запросу запись можно очистить с помощью процедур sp_droppullsubscription (Transact-SQL) или sp_subscription_cleanup (Transact-SQL). Кроме того, в целях безопасности можно вызывать процедуру sp_link_publication с пустым паролем для очистки записи в системной таблице 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'AdventureWorks2008R2';
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 AdventureWorks2008R2;
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'AdventureWorks2008R2Replica';
SET @subscriber = $(SubServer);
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'pull',
@update_mode = N'failover';
GO
Разрешения
Только члены предопределенной роли сервера sysadmin могут выполнять процедуру sp_link_publication.