【发布时间】:2011-01-14 23:13:48
【问题描述】:
当我想强制更新我的合并复制发布的订阅者时,我可以进入复制监视器,右键单击订阅,然后选择开始同步。我希望能够编写脚本(使用 vba/vbscript 或命令行)。我还希望用户能够运行脚本(需要什么权限,如果有的话?)。
我相信这个问题之前已经被问过很多次了,但是我的谷歌搜索结果都是空的。
【问题讨论】:
标签: sql-server vba command-line vbscript replication
当我想强制更新我的合并复制发布的订阅者时,我可以进入复制监视器,右键单击订阅,然后选择开始同步。我希望能够编写脚本(使用 vba/vbscript 或命令行)。我还希望用户能够运行脚本(需要什么权限,如果有的话?)。
我相信这个问题之前已经被问过很多次了,但是我的谷歌搜索结果都是空的。
【问题讨论】:
标签: sql-server vba command-line vbscript replication
假设发布已经存在(并且有效的快照在有效的文件夹中可用),下面是您需要在发布者和订阅者上启动和维护订阅的 T-SQL 和命令行指令。我们使用此代码从头开始 Web 复制(订阅方没有数据库)。通过存储过程在双方声明订阅后,您必须(定期)在订阅者端运行同步命令行指令(见下文)。
由于此代码特定于 Web 复制,请查看有关在您的服务器上组织此类复制的其他参考资料,包括发布参数等。您可以在相应的文档中找到与安全性相关的所有内容。当然,同步命令行参数与具体订阅及其参数严格相关。如果您的订阅不是通过网络完成的(如本例所示),您将不得不相应地调整发布、订阅和同步参数。请注意,这里的许多参数反映了我们的具体情况,例如发布者也是订阅者。您可能需要根据自己的情况进行调整。
PS:SQLEXPRESS 服务器不能是发布者。您必须获得完整版本的 SQL 才能发布您的数据库。 SQLEXPRESS 服务器可以是订阅服务器。
发布者代码:一个 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
订阅者代码:两个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
用于同步的订阅者 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]
【讨论】:
在测试系统上,为什么不从您的登录中运行 SQL Server Profiler - 并在您单击复制监视器时捕获 SQL 语句?
【讨论】: