Скрипт для запуска синхронизации подписчиков

Когда я хочу принудительно обновить подписчиков на мою публикацию репликации слиянием, я могу зайти в монитор репликации, щелкнуть правой кнопкой мыши подписку и выбрать «Начать синхронизацию». Я хотел бы иметь возможность написать это (используя vba/vbscript или командную строку). Я также хотел бы, чтобы пользователи могли запускать скрипт (какие разрешения потребуются, если таковые имеются?).

Я уверен, что об этом уже много раз спрашивали и отвечали, но мои попытки поиска в Google оказались тщетными.


person mwolfe02    schedule 09.02.2010    source источник


Ответы (2)


Предполагая, что публикация уже существует (и допустимый моментальный снимок доступен в допустимой папке), ниже приведены инструкции T-SQL и командной строки, необходимые для запуска и обслуживания подписки как на издателе, так и на подписчике. Мы используем этот код для запуска веб-репликации с нуля (без базы данных на стороне подписчика). Как только подписка объявлена ​​на обеих сторонах через хранимые процедуры, вы должны запускать (на регулярной основе) инструкцию командной строки синхронизации на стороне подписчика (см. ниже).

Поскольку этот код предназначен для веб-репликации, ознакомьтесь с дополнительной информацией по организации такой репликации на вашем сервере, включая параметры публикации и т. д. Все, что связано с безопасностью, вы найдете в соответствующих документах. Разумеется, параметры командной строки синхронизации строго связаны с конкретной подпиской и ее параметрами. Если ваша подписка не осуществляется через Интернет (как в этом примере), вам придется последовательно настроить параметры публикации, подписки и синхронизации. Имейте в виду, что многие параметры здесь отражают нашу конкретную ситуацию, когда, например, издатель также является подписчиком. Возможно, вам придется адаптироваться в зависимости от вашей ситуации.

PS: сервер SQLEXPRESS не может быть издателем. Вам потребуется полная версия SQL для публикации базы данных. Серверы SQLEXPRESS могут быть подписчиками.

  1. Код издателя: один сп

    exec sp_addmergesubscription 
        @publication = N'myPublication', 
        @subscriber = N'mySuscriber\SQLEXPRESS', 
        @subscriber_db = N'myDatabaseOnMySubscriber', 
        @subscription_type = N'pull', 
        @subscriber_type = N'local', 
        @subscription_priority = 0, 
        @sync_type = N'Automatic'
    go
    
  2. Код абонента: два sp

    exec sp_addmergepullsubscription 
        @publisher = N'myServerName', 
        @publication = N'myPublicationName', 
        @publisher_db = N'myMainDatabase', 
        @subscriber_type = N'Local', 
        @subscription_priority = 0, 
        @description = N'', 
        @sync_type = N'Automatic'
    
    exec sp_addmergepullsubscription_agent
        @publisher = N'myServername', 
        @publisher_db = N'myMainDatabase', 
        @publication = N'myDatabaseOnMySubscriber', 
        @distributor = N'myServerName', 
        @distributor_security_mode = 1, 
        @distributor_login = N'', 
        @distributor_password = N'', 
        @enabled_for_syncmgr = N'True', 
        @frequency_type = 4, 
        @frequency_interval = 1, 
        @frequency_relative_interval = 1, 
        @frequency_recurrence_factor = 0, 
        @frequency_subday = 8, 
        @frequency_subday_interval = 1, 
        @active_start_time_of_day = 0, 
        @active_end_time_of_day = 235959, 
        @active_start_date = 0, 
        @active_end_date = 0, 
        @alt_snapshot_folder = N'', 
        @working_directory = N'', 
        @use_ftp = N'True', 
        @job_login = null, 
        @job_password = null, 
        @publisher_security_mode = 1, 
        @publisher_login = N'', 
        @publisher_password = N'', 
        @use_interactive_resolver = N'False', 
        @dynamic_snapshot_location = N'', 
        @use_web_sync = 1, 
        @internet_url = N'https://mySecuredWebPage:myOpenPort/myPublicationName/replisapi.dll',
        @internet_login = N'myDomain\myUserName', 
        @internet_password = null, 
        @internet_security_mode = 0, 
        @internet_timeout = 300
    go
    
  3. BAT-файл подписчика для синхронизации

    "C:\Program Files\Microsoft SQL Server\90\COM\replmerg.exe"
        -Publisher [myServerName]  
        -PublisherDB [myMainDatabase]  
        -Publication [myPublicationName] 
        -Distributor [myServerName] 
        -Subscriber [mySubscriber\SQLEXPRESS] 
        -SubscriptionType 1 
        -SubscriberSecurityMode 1 
        -SubscriberDB [myDatabaseOnMySubscriber] 
        -InternetURL [https://mySecuredWebPage:myOpenPort/myPublicationName/replisapi.dll] 
        -InternetLogin [myDomain\myUserName] 
        -InternetPassword [myPassword]
    
person Philippe Grondier    schedule 09.02.2010

В тестовой системе, почему бы не запустить SQL Server Profiler из своего имени пользователя и не захватить операторы SQL, когда вы нажимаете на Монитор репликации?

person Peter Schofield    schedule 09.02.2010
comment
В настоящее время у меня нет доступа к SQL Server Profiler (я использую Express 2008 в своей системе тестирования/разработки). Кроме того, мои знания SQL Server довольно ограничены (т. е. я никогда не использовал SQL Server Profiler или Trace). - person mwolfe02; 10.02.2010