Как создавать принудительные подписки (программирование репликации Transact-SQL)
Принудительные подписки могут быть созданы программно, с помощью хранимых процедур репликации. Какие именно хранимые процедуры будут при этом применяться, зависит от типа публикации, к которой относится подписка.
Примечание по безопасности |
---|
По возможности следует предлагать пользователям вводить учетные данные безопасности во время выполнения приложения. Если же возникла необходимость хранения учетных данных в файле сценария, то этот файл следует защитить от несанкционированного доступа. |
Создание принудительной подписки на публикацию моментальных снимков или транзакций
На издателе в базе данных публикации с помощью процедуры sp_helppublication проверьте, поддерживает ли публикация принудительные подписки.
Если значение allow_push равно 1, то принудительная подписка поддерживается.
Если значение allow_push равно 0, то необходимо выполнить процедуру sp_changepublication, указав allow_push в @property и значение true в @value.
На издателе в базе данных публикации выполните хранимую процедуру sp_addsubscription. Укажите @publication, @subscriber и @destination_db. Укажите значение push в качестве параметра @subscription_type. Сведения об обновлении подписок см. в разделе Как создать обновляемую подписку на публикацию транзакций (программирование репликации на языке Transact-SQL).
На издателе в базе данных публикации выполните хранимую процедуру sp_addpushsubscription_agent. Укажите следующие параметры:
@subscriber, @subscriber_db и @publication.
Учетные данные Microsoft Windows, с которыми будет запускаться агент распространителя на распространителе в параметре @job_login, а пароль — в параметре @job_password.
Примечание Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику через встроенную систему проверки подлинности Windows.
(необязательно) Значение 0 в параметре @subscriber_security_mode и сведения об имени входа MicrosoftSQL Server в параметрах @subscriber_login и @subscriber_password. Эти параметры указываются в том случае, если при соединении с подписчиком необходимо использовать проверку подлинности SQL Server.
Расписание агента распространителя для данной подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).
Примечание по безопасности При создании принудительной подписки на издателе с удаленным распространителем значения, указываемые для всех параметров, включая job_login и job_password, передаются распространителю в виде незашифрованного текста. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе Шифрование соединений с SQL Server.
Создание принудительной подписки на публикацию слиянием
На издателе в базе данных публикации при помощи процедуры sp_helpmergepublication проверьте, поддерживает ли публикация принудительные подписки.
Если значение allow_push равно 1, то публикацией принудительные подписки поддерживаются.
Если значение allow_push не равно 1, необходимо выполнить процедуру sp_changemergepublication, значение allow_push в параметре @property и значение true в параметре @value.
На издателе в базе данных публикации выполните хранимую процедуру sp_addmergesubscription, указав следующие параметры.
@publication. Имя публикации.
@subscriber_type. Для клиентской подписки укажите local, а для серверной — global.
@subscription_priority. Для серверной подписки укажите приоритет подписки (в диапазоне от 0.00 до 99.99).
Дополнительные сведения см. в разделе Расширенное обнаружение и разрешение конфликтов репликации слиянием.
На издателе в базе данных публикации выполните хранимую процедуру sp_addmergepushsubscription_agent. Укажите следующие параметры:
@subscriber, @subscriber_db и @publication.
Учетные данные Windows, с которыми будет запускаться агент слияния на распространителе в параметрах @job_login и @job_password.
Примечание Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент слияния всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику через встроенную систему проверки подлинности Windows.
(необязательно) Значение 0 в параметре @subscriber_security_mode и сведения об имени входа SQL Server в параметрах @subscriber_login и @subscriber_password. Эти параметры указываются в том случае, если при соединении с подписчиком необходимо использовать проверку подлинности SQL Server.
(необязательно) Значение 0 в параметре @publisher_security_mode и сведения об имени входа SQL Server в параметрах @publisher_login и @publisher_password. Эти параметры указываются в том случае, если при соединении с издателем необходимо использовать проверку подлинности SQL Server.
Расписание агента слияния для данной подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).
Примечание по безопасности При создании принудительной подписки на издателе с удаленным распространителем значения, указываемые для всех параметров, включая job_login и job_password, передаются распространителю в виде незашифрованного текста. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе Шифрование соединений с SQL Server.
Пример
В следующем примере создается принудительная подписка на публикацию транзакций. Значения для имени входа и пароля передаются во время выполнения через переменные сценария sqlcmd.
-- 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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'push';
--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
В следующем примере создается принудительная подписка на публикацию слиянием. Значения для имени входа и пароля передаются во время выполнения через переменные сценария sqlcmd.
-- 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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
SET @hostname = N'adventure-works\david8'
-- Add a push subscription to a merge publication.
USE [AdventureWorks]
EXEC sp_addmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@subscription_type = N'push',
@hostname = @hostname;
--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO