【问题标题】:Script to start subscribers synchronizing启动订阅者同步的脚本
【发布时间】:2011-01-14 23:13:48
【问题描述】:

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

我相信这个问题之前已经被问过很多次了,但是我的谷歌搜索结果都是空的。

【问题讨论】:

    标签: sql-server vba command-line vbscript replication


    【解决方案1】:

    假设发布已经存在(并且有效的快照在有效的文件夹中可用),下面是您需要在发布者和订阅者上启动和维护订阅的 T-SQL 和命令行指令。我们使用此代码从头开始 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. 订阅者代码:两个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]
      

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我目前无法访问 SQL Server Profiler(我在我的测试/开发系统上运行 Express 2008)。此外,我的 SQL Server 知识非常有限(即,我从未真正使用过 SQL Server Profiler 或 Trace)。
      猜你喜欢
      • 2018-06-20
      • 2011-05-19
      • 2016-06-10
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2015-09-06
      • 2021-02-25
      相关资源
      最近更新 更多