Поделиться через


sp_link_publication (Transact-SQL)

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

Примечание по безопасностиПримечание по безопасности

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

Важное примечаниеВажно!

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

Значок ссылки на раздел Синтаксические обозначения в 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'
    Имя публикации для связи. Аргумент publication имеет тип sysname и не имеет значения по умолчанию.

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

    Значение

    Описание

    0

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

    Примечание

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

    1

    Использует контекст безопасности (проверка подлинности SQL Server или Windows) пользователя, редактирующего подписчика.

    > [!NOTE]
    > <P>Эта учетная запись должна существовать также и на издателе с соответствующими правами доступа.В случае использования проверки подлинности Windows должно поддерживаться делегирование учетной записи безопасности.</P>
    

    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'AdventureWorks2012';
    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 AdventureWorks2012
    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'AdventureWorks2012Replica'; 
    SET @subscriber = $(SubServer);
    
    -- At the Publisher, register the subscription, using the defaults.
    USE [AdventureWorks2012]
    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)