根据Microsoft的说法,SQL Server 2008 Express应该能够作为拉取订阅者参与合并复制。至少使用RMO对象。
但也可以使用其他变体。
但是,我们无法在客户端(运行SQL Server 2008 Express)上启动SQL Server代理。这似乎是一个普遍的问题,据我所知,尚未解决。
我是否认为SQL Server 2008 Express不支持实际的合并(拉)订阅?有没有人成功使用过这项技术?我认为微软声称这可以正常工作非常严重,尽管它根本没有。
我希望有人对此有任何经验!
答案 0 :(得分:3)
我能够在没有SQL Server代理的情况下同步SQL Server 2008 R2 Express上的Merge pull订阅 - 通过RMO与以下C#同步:
static void SynchronizeMergePullSubscriptionViaRMO()
{
// Define the server, publication, and database names.
string subscriberName = "WIN8CP\\SQLEXPRESS";
string publisherName = "WS2008R2_1";
string distributorName = "WS2008R2_1";
string publicationName = "TestMergePub2";
string subscriptionDbName = "TestSubDB1";
string publicationDbName = "AdventureWorksLT";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
MergeSynchronizationAgent agent;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription exists, then start the synchronization.
if (subscription.LoadProperties())
{
// Get the agent for the subscription.
agent = subscription.SynchronizationAgent;
// Set the required properties that could not be returned
// from the MSsubscription_properties table.
agent.PublisherSecurityMode = SecurityMode.Integrated;
agent.DistributorSecurityMode = SecurityMode.Integrated;
agent.Distributor = publisherName;
// Enable agent output to the console.
agent.OutputVerboseLevel = 4;
agent.Output = "C:\\TEMP\\mergeagent.log";
// Synchronously start the Merge Agent for the subscription.
agent.Synchronize();
}
else
{
// Do something here if the pull subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement appropriate error handling here.
throw new ApplicationException("The subscription could not be " +
"synchronized. Verify that the subscription has " +
"been defined correctly.", ex);
}
finally
{
conn.Disconnect();
}
}
可以从MSDN Code Gallery下载代码示例。
答案 1 :(得分:1)
如Replication Considerations (SQL Server Express)中所述,SQL Server Express可以充当所有类型的复制中的订阅者。
更重要的是,SQL Server Express不包含SQL Server代理。这意味着必须使用推送订阅,以便从分发服务器运行复制代理,或者如果通过Windows Sync Manager,RMO或批处理脚本进行同步,则可以使用提取订阅。
答案 2 :(得分:1)
Windows同步中心WIN7:
假设要在单人远程分支机构的“预算服务器”(例如Win7等客户端操作系统)上运行此复制,那么这将非常有效。它有一个很好的GUI,在同步过程中可以通过打击消息框进行打击,并且可以进行一些高级调度。
注意事项:
使用:Windows身份验证 NOT WITH:SQL身份验证
使用:一个当前登录的用户,始终保持登录状态,前提是:
NB - 它具有欺骗性,因为它看起来像是支持SQL身份验证,但实际上并不是这样;如果您手动输入密码,它将起作用,但只在输入密码后每次输入一次。因此在实际意义上它不能使用sql身份验证。
原因是它无法保存密码。微软通过设计做到了这一点,到目前为止还没有解决方法。
答案 3 :(得分:0)
另一个选项是执行合并代理(replmerg.exe)以使用批处理脚本同步Express订阅。 How to: Synchronize a Pull Subscription (Replication Programming)中介绍了这一点。从这里开始,批处理脚本可以按指定的时间表通过任务计划程序运行。
最后,Windows同步管理器可用于同步Express Merge请求订阅:How to: Synchronize a Subscription Using Windows Synchronization Manager (Windows Synchronization Manager)