Назад | Перейти на главную страницу

Sql Server 2005 Replication: как настроить подписку с помощью sql скрипта?

Проходя через мастер настройки репликации, я могу в конце выбрать «Создать скрипт». Сценарий отлично работает для настройки публикации, однако, когда я запускаю сгенерированный скрипт для настройки подписки, я сталкиваюсь с проблемами, и репликация не работает. Однако, если я не создаю сценарий, а просто заставляю мастера запускать репликацию, все работает. Очень хотелось бы автоматизировать настройку подписки с помощью скрипта.

Сгенерированный сценарий подписки:

-----------------BEGIN: Script to be run at Publisher 'SERVER\INSTANCE'-----------------
use [PublisherDatabase]
exec sp_addsubscription @publication = N'PublicationName', @subscriber = N'server\instance', @destination_db = N'SubscriberDatabase', @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0
exec sp_addpushsubscription_agent @publication = N'PublicationName', @subscriber = N'server\instance', @subscriber_db = N'SubscriberDatabase', @job_login = null, @job_password = null, @subscriber_security_mode = 1, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20091028, @active_end_date = 99991231, @enabled_for_syncmgr = N'False', @dts_package_location = N'Distributor'
GO
-----------------END: Script to be run at Publisher 'FLANDERS\TESTING'-----------------

Когда я запускаю приведенный выше сценарий, он завершается без ошибок. Однако подписка никогда не отображается в дереве Sql Server Management Studio Replication-> Local Subscriptions, и данные никогда не реплицируются.

Как ни странно, выполнение запроса:

use distribution
select * from MSSubscriptions

дает набор результатов:

publisher_database_id publisher_id publisher_db                                                                                                                     publication_id article_id  subscriber_id subscriber_db                                                                                                                    subscription_type sync_type status subscription_seqno                 snapshot_seqno_flag independent_agent subscription_time       loopback_detection agent_id    update_mode publisher_seqno                    ss_cplt_seqno
--------------------- ------------ -------------------------------------------------------------------------------------------------------------------------------- -------------- ----------- ------------- -------------------------------------------------------------------------------------------------------------------------------- ----------------- --------- ------ ---------------------------------- ------------------- ----------------- ----------------------- ------------------ ----------- ----------- ---------------------------------- ----------------------------------
3                     0            PublisherDatabase                                                                                                                3              1           -1            virtual                                                                                                                          0                 1         1      0x00000027000001230003             0                   1                 2009-10-29 10:41:37.540 1                  10          0           0x00000027000001230003             0x00000027000001230003
3                     0            PublisherDatabase                                                                                                                3              1           -2            virtual                                                                                                                          0                 1         2      0x00000027000001230003             0                   1                 2009-10-29 10:41:37.603 1                  11          0           0x00000027000001230009             0x00000027000001230009
3                     0            PublisherDatabase                                                                                                                3              1           0             SubscriberDatabase                                                                                                               0                 1         1      0x000000270000013B0008             0                   1                 2009-10-29 10:54:58.140 1                  12          0           0x000000270000013B0008             0x000000270000013B0008

Что, казалось бы, указывает на наличие подписки.

В случае необходимости, это только принудительная публикация / подписка, и базы данных издателя и подписчика находятся на одном сервере.

Что еще мне нужно сделать, чтобы подписки работали из sql-скрипта?

редактировать: отправлено в http://www.sqlservercentral.com/Forums/Topic811043-291-1.aspx

Догадаться. При создании подписки непосредственно из Management Studio автоматически запускается агент моментальных снимков. Однако сценарий, созданный студией управления для подписки, не запустите агент моментальных снимков. Добавление следующей строки в сгенерированный скрипт заставляет все работать:

EXEC sp_startpublication_snapshot @publication = N'InstitutionPublication'

Итак, мой полный сценарий для подписчика после модификации:

-----------------BEGIN: Script to be run at Publisher 'SERVER\INSTANCE'-----------------
-----------------BEGIN: Script to be run at Publisher 'SERVER\INSTANCE'-----------------
use [Profile]
exec sp_addsubscription @publication = N'PublicationName', @subscriber = N'server\instance', @destination_db = N'destinationDatabaseName', @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0
exec sp_addpushsubscription_agent @publication = N'PublicationName', @subscriber = N'server\instance', @subscriber_db = N'destinationDatabaseName', @job_login = null, @job_password = null, @subscriber_security_mode = 1, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20091104, @active_end_date = 99991231, @enabled_for_syncmgr = N'False', @dts_package_location = N'Distributor'
GO
-----------------END: Script to be run at Publisher 'SERVER\INSTANCE'-----------------

EXEC sp_startpublication_snapshot @publication = N'PublicationName';
GO