代码之家  ›  专栏  ›  技术社区  ›  mwolfe02

启动订阅服务器同步的脚本

  •  3
  • mwolfe02  · 技术社区  · 16 年前

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

    我相信这个问题以前被问过很多次,也被回答过很多次,但我在谷歌上的搜索结果都是空的。

    2 回复  |  直到 16 年前
        1
  •  8
  •   Philippe Grondier    16 年前

    由于此代码特定于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
      
    2. 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]
      
        2
  •  0
  •   Peter Schofield    16 年前

    在测试系统上,为什么不从您的登录名运行SQL Server Profiler—并在单击复制监视器时捕获SQL语句?