用于启动订阅者同步的脚本

mwo*_*e02 3 sql-server vbscript replication command-line vba

当我想强制更新我的合并复制发布的订阅者时,我可以进入复制监视器,右键单击订阅,然后选择开始同步.我希望能够编写脚本(使用vba/vbscript或命令行).我也希望用户能够运行脚本(如果有的话,需要什么权限?).

我确信之前已经多次询问和回答,但我的谷歌搜索尝试空了.

Phi*_*ier 8

假设发布已存在(并且有效文件夹上有效快照),以下是在发布者和订阅者上发起和维护订阅所需的T-SQL和命令行指令.我们使用此代码从头开始Web复制(订户方没有数据库).一旦通过存储过程在双方声明订阅,您必须(定期)运行订户方的同步命令行指令(见下文).

由于此代码特定于Web复制,请检查有关在服务器上组织此类复制的其他参考,包括发布参数等.您将在相应的文档中找到与安全性相关的所有内容.当然,同步命令行参数与特定订阅及其参数严格相关.如果您的订阅不是通过Web完成的(如本例所示),那么您将不得不调整发布,订阅和同步参数.请注意,此处的许多参数反映了我们的具体情况,例如发布者也是订阅者.您可能需要根据您的情况进行调整.

PS:SQLEXPRESS服务器不能是发布者.您必须获得完整版本的SQL才能发布数据库.SQLEXPRESS服务器可以是订户.

  1. 发布商代码:一个sp

    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
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  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]
    
    Run Code Online (Sandbox Code Playgroud)